[552307] Move DB4O, Hibernate and Objectivity support to cdo.old

https://bugs.eclipse.org/bugs/show_bug.cgi?id=552307
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/.project b/org.eclipse.emf.cdo.examples.hibernate-feature/.project
new file mode 100644
index 0000000..1ada65c
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/.project
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.examples.hibernate-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng.release/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+  <filteredResources>
+    <filter>
+      <id>1396938000000</id>
+      <name></name>
+      <type>10</type>
+      <matcher>
+        <id>org.eclipse.ui.ide.multiFilter</id>
+        <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+      </matcher>
+    </filter>
+  </filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..1c7024e
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:36:24 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..d573634
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 10:06:10 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..3556bac
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 10:06:10 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/build.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/build.properties
new file mode 100644
index 0000000..08e412d
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/build.properties
@@ -0,0 +1,13 @@
+# Copyright (c) 2011, 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/feature.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/feature.properties
new file mode 100644
index 0000000..d108d40
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/feature.properties
@@ -0,0 +1,8 @@
+# Copyright (c) 2011-2013, 2015 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+
+featureName = CDO Model Repository Server Hibernate Examples
+description = Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/feature.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/feature.xml
new file mode 100644
index 0000000..a4810bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/feature.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	Copyright (c) 2011-2013, 2015, 2016 Eike Stepper (Berlin, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Martin Fluegge - initial API and implementation
+-->
+<feature
+      id="org.eclipse.emf.cdo.examples.hibernate"
+      label="%featureName"
+      version="4.2.500.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.emf.cdo.examples.hibernate.server"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.emf.cdo.license"
+      license-feature-version="0.0.0">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.client"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.server"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.log4j"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/pom.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/pom.xml
new file mode 100644
index 0000000..ddd9da7
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Berlin, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.features</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/features</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo.features</groupId>
+  <artifactId>org.eclipse.emf.cdo.examples.hibernate</artifactId>
+  <version>4.2.500-SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.properties
new file mode 100644
index 0000000..ab802bd
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.properties
@@ -0,0 +1,144 @@
+# Copyright (c) 2011-2013, 2015 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+
+featureName = CDO Model Repository Server Hibernate Examples
+description = Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.
+
+
+providerName = Eclipse Modeling Project
+updateSiteName = Eclipse Modeling Project Updates
+
+copyrightURL = copyright.txt
+copyright = Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+
+licenseURL=license.html
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.xml
new file mode 100644
index 0000000..2e3f42f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/feature.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	Copyright (c) 2011-2013, 2015, 2016 Eike Stepper (Berlin, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Martin Fluegge - initial API and implementation
+-->
+<feature
+      id="org.eclipse.emf.cdo.examples.hibernate"
+      label="%featureName"
+      version="4.2.500.v20171218-1712"
+      provider-name="%providerName"
+      plugin="org.eclipse.emf.cdo.examples.hibernate.server"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.client"
+         download-size="15"
+         install-size="28"
+         version="4.1.400.v20171218-1712"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.server"
+         download-size="11"
+         install-size="14"
+         version="4.1.400.v20171218-1712"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.examples.hibernate.log4j"
+         download-size="4"
+         install-size="6"
+         version="4.0.300.v20171218-1712"
+         fragment="true"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/local-artifacts.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/target/local-artifacts.properties
new file mode 100644
index 0000000..1064045
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/local-artifacts.properties
@@ -0,0 +1,5 @@
+#Mon Dec 18 18:13:36 CET 2017
+artifact.attached.p2metadata=C\:\\develop\\cdo-master\\git\\cdo\\features\\org.eclipse.emf.cdo.examples.hibernate-feature\\target\\p2content.xml
+artifact.attached.sources-feature=C\:\\develop\\cdo-master\\git\\cdo\\features\\org.eclipse.emf.cdo.examples.hibernate-feature\\target\\org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT-sources-feature.jar
+artifact.main=C\:\\develop\\cdo-master\\git\\cdo\\features\\org.eclipse.emf.cdo.examples.hibernate-feature\\target\\org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT.jar
+artifact.attached.p2artifacts=C\:\\develop\\cdo-master\\git\\cdo\\features\\org.eclipse.emf.cdo.examples.hibernate-feature\\target\\p2artifacts.xml
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/maven-archiver/pom.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..e68a863
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Dec 18 18:13:36 CET 2017
+version=4.2.500-SNAPSHOT
+groupId=org.eclipse.emf.cdo.features
+artifactId=org.eclipse.emf.cdo.examples.hibernate
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT-sources-feature.jar b/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT-sources-feature.jar
new file mode 100644
index 0000000..ef9d8ff
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT-sources-feature.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT.jar b/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT.jar
new file mode 100644
index 0000000..f5a7237
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/org.eclipse.emf.cdo.examples.hibernate-4.2.500-SNAPSHOT.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2artifacts.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2artifacts.xml
new file mode 100644
index 0000000..3710199
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2artifacts.xml
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<artifacts size='2'>
+  <artifact classifier='org.eclipse.update.feature' id='org.eclipse.emf.cdo.examples.hibernate' version='4.2.500.v20171218-1712'>
+    <properties size='6'>
+      <property name='artifact.size' value='23284'/>
+      <property name='download.size' value='23284'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+      <property name='download.contentType' value='application/zip'/>
+    </properties>
+  </artifact>
+  <artifact classifier='org.eclipse.update.feature' id='org.eclipse.emf.cdo.examples.hibernate.source' version='4.2.500.v20171218-1712'>
+    <properties size='7'>
+      <property name='artifact.size' value='24657'/>
+      <property name='download.size' value='24657'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources-feature'/>
+      <property name='download.contentType' value='application/zip'/>
+    </properties>
+  </artifact>
+</artifacts>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2content.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2content.xml
new file mode 100644
index 0000000..de74862
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/p2content.xml
@@ -0,0 +1,172 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<units size='4'>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.feature.group' version='4.2.500.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.feature.group' range='[0.0.0,4.2.500.v20171218-1712)' severity='0'/>
+    <properties size='12'>
+      <property name='org.eclipse.equinox.p2.name' value='%featureName'/>
+      <property name='org.eclipse.equinox.p2.description' value='%description'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.equinox.p2.type.group' value='true'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+      <property name='df_LT.license' value='Eclipse Foundation Software User Agreement&#xA;April 9, 2014&#xA;&#xA;Usage Of Content&#xA;&#xA;THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR&#xA;OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY &quot;CONTENT&quot;).&#xA;USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS&#xA;AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR&#xA;NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU&#xA;AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT&#xA;AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS&#xA;OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE&#xA;TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS&#xA;OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED&#xA;BELOW, THEN YOU MAY NOT USE THE CONTENT.&#xA;&#xA;Applicable Licenses&#xA;&#xA;Unless otherwise indicated, all Content made available by the&#xA;Eclipse Foundation is provided to you under the terms and conditions of&#xA;the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is&#xA;provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.&#xA;For purposes of the EPL, &quot;Program&quot; will mean the Content.&#xA;&#xA;Content includes, but is not limited to, source code, object code,&#xA;documentation and other files maintained in the Eclipse Foundation source code&#xA;repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available&#xA;as downloadable archives (&quot;Downloads&quot;).&#xA;&#xA;- Content may be structured and packaged into modules to facilitate delivering,&#xA;extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;),&#xA;plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).&#xA;- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)&#xA;in a directory named &quot;plugins&quot;.&#xA;- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.&#xA;Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.&#xA;Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version&#xA;numbers of the Plug-ins and/or Fragments associated with that Feature.&#xA;- Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files&#xA;named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.&#xA;&#xA;The terms and conditions governing Plug-ins and Fragments should be&#xA;contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and&#xA;conditions governing Features and Included Features should be contained&#xA;in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature&#xA;Licenses may be located in any directory of a Download or Module&#xA;including, but not limited to the following locations:&#xA;&#xA;- The top-level (root) directory&#xA;- Plug-in and Fragment directories&#xA;- Inside Plug-ins and Fragments packaged as JARs&#xA;- Sub-directories of the directory named &quot;src&quot; of certain Plug-ins&#xA;- Feature directories&#xA;&#xA;Note: if a Feature made available by the Eclipse Foundation is installed using the&#xA;Provisioning Technology (as defined below), you must agree to a license (&quot;Feature &#xA;Update License&quot;) during the installation process. If the Feature contains&#xA;Included Features, the Feature Update License should either provide you&#xA;with the terms and conditions governing the Included Features or inform&#xA;you where you can locate them. Feature Update Licenses may be found in&#xA;the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.&#xA;Such Abouts, Feature Licenses, and Feature Update Licenses contain the&#xA;terms and conditions (or references to such terms and conditions) that&#xA;govern your use of the associated Content in that directory.&#xA;&#xA;THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER&#xA;TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.&#xA;SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):&#xA;&#xA;- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)&#xA;- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)&#xA;- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)&#xA;- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)&#xA;- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)&#xA;&#xA;IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR&#xA;TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License&#xA;is provided, please contact the Eclipse Foundation to determine what terms and conditions&#xA;govern that particular Content.&#xA;&#xA;&#xA;Use of Provisioning Technology&#xA;&#xA;The Eclipse Foundation makes available provisioning software, examples of which include,&#xA;but are not limited to, p2 and the Eclipse Update Manager (&quot;Provisioning Technology&quot;) for&#xA;the purpose of allowing users to install software, documentation, information and/or&#xA;other materials (collectively &quot;Installable Software&quot;). This capability is provided with&#xA;the intent of allowing such users to install, extend and update Eclipse-based products.&#xA;Information about packaging Installable Software is available at&#xA;http://eclipse.org/equinox/p2/repository_packaging.html (&quot;Specification&quot;).&#xA;&#xA;You may use Provisioning Technology to allow other parties to install Installable Software.&#xA;You shall be responsible for enabling the applicable license agreements relating to the&#xA;Installable Software to be presented to, and accepted by, the users of the Provisioning Technology&#xA;in accordance with the Specification. By using Provisioning Technology in such a manner and&#xA;making it available in accordance with the Specification, you further acknowledge your&#xA;agreement to, and the acquisition of all necessary rights to permit the following:&#xA;&#xA;1. A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute&#xA;the Provisioning Technology on a machine (&quot;Target Machine&quot;) with the intent of installing,&#xA;extending or updating the functionality of an Eclipse-based product.&#xA;2. During the Provisioning Process, the Provisioning Technology may cause third party&#xA;Installable Software or a portion thereof to be accessed and copied to the Target Machine.&#xA;3. Pursuant to the Specification, you will provide to the user the terms and conditions that&#xA;govern the use of the Installable Software (&quot;Installable Software Agreement&quot;) and such&#xA;Installable Software Agreement shall be accessed from the Target Machine in accordance&#xA;with the Specification. Such Installable Software Agreement must inform the user of the&#xA;terms and conditions that govern the Installable Software and must solicit acceptance by&#xA;the end user in the manner prescribed in such Installable Software Agreement. Upon such&#xA;indication of agreement by the user, the provisioning Technology will complete installation&#xA;of the Installable Software.&#xA;&#xA;Cryptography&#xA;&#xA;Content may contain encryption software. The country in which you are&#xA;currently may have restrictions on the import, possession, and use,&#xA;and/or re-export to another country, of encryption software. BEFORE&#xA;using any encryption software, please check the country&apos;s laws,&#xA;regulations and policies concerning the import, possession, or use, and&#xA;re-export of encryption software, to see if this is permitted.&#xA;&#xA;Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.&#xA;'/>
+      <property name='df_LT.copyright' value='Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;'/>
+      <property name='df_LT.featureName' value='CDO Model Repository Server Hibernate Examples'/>
+      <property name='df_LT.description' value='Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+    </properties>
+    <provides size='2'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.feature.group' version='4.2.500.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <requires size='4'>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.client' range='[4.1.400.v20171218-1712,4.1.400.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.server' range='[4.1.400.v20171218-1712,4.1.400.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.log4j' range='[4.0.300.v20171218-1712,4.0.300.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.feature.jar' range='[4.2.500.v20171218-1712,4.2.500.v20171218-1712]'>
+        <filter>
+          (org.eclipse.update.install.features=true)
+        </filter>
+      </required>
+    </requires>
+    <touchpoint id='null' version='0.0.0'/>
+    <licenses size='1'>
+      <license uri='%25licenseURL' url='%25licenseURL'>
+        %license
+      </license>
+    </licenses>
+    <copyright uri='%25copyrightURL' url='%25copyrightURL'>
+      %copyright
+    </copyright>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.feature.jar' version='4.2.500.v20171218-1712'>
+    <properties size='12'>
+      <property name='org.eclipse.equinox.p2.name' value='%featureName'/>
+      <property name='org.eclipse.equinox.p2.description' value='%description'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.update.feature.plugin' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='df_LT.license' value='Eclipse Foundation Software User Agreement&#xA;April 9, 2014&#xA;&#xA;Usage Of Content&#xA;&#xA;THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR&#xA;OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY &quot;CONTENT&quot;).&#xA;USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS&#xA;AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR&#xA;NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU&#xA;AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT&#xA;AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS&#xA;OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE&#xA;TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS&#xA;OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED&#xA;BELOW, THEN YOU MAY NOT USE THE CONTENT.&#xA;&#xA;Applicable Licenses&#xA;&#xA;Unless otherwise indicated, all Content made available by the&#xA;Eclipse Foundation is provided to you under the terms and conditions of&#xA;the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is&#xA;provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.&#xA;For purposes of the EPL, &quot;Program&quot; will mean the Content.&#xA;&#xA;Content includes, but is not limited to, source code, object code,&#xA;documentation and other files maintained in the Eclipse Foundation source code&#xA;repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available&#xA;as downloadable archives (&quot;Downloads&quot;).&#xA;&#xA;- Content may be structured and packaged into modules to facilitate delivering,&#xA;extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;),&#xA;plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).&#xA;- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)&#xA;in a directory named &quot;plugins&quot;.&#xA;- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.&#xA;Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.&#xA;Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version&#xA;numbers of the Plug-ins and/or Fragments associated with that Feature.&#xA;- Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files&#xA;named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.&#xA;&#xA;The terms and conditions governing Plug-ins and Fragments should be&#xA;contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and&#xA;conditions governing Features and Included Features should be contained&#xA;in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature&#xA;Licenses may be located in any directory of a Download or Module&#xA;including, but not limited to the following locations:&#xA;&#xA;- The top-level (root) directory&#xA;- Plug-in and Fragment directories&#xA;- Inside Plug-ins and Fragments packaged as JARs&#xA;- Sub-directories of the directory named &quot;src&quot; of certain Plug-ins&#xA;- Feature directories&#xA;&#xA;Note: if a Feature made available by the Eclipse Foundation is installed using the&#xA;Provisioning Technology (as defined below), you must agree to a license (&quot;Feature &#xA;Update License&quot;) during the installation process. If the Feature contains&#xA;Included Features, the Feature Update License should either provide you&#xA;with the terms and conditions governing the Included Features or inform&#xA;you where you can locate them. Feature Update Licenses may be found in&#xA;the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.&#xA;Such Abouts, Feature Licenses, and Feature Update Licenses contain the&#xA;terms and conditions (or references to such terms and conditions) that&#xA;govern your use of the associated Content in that directory.&#xA;&#xA;THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER&#xA;TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.&#xA;SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):&#xA;&#xA;- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)&#xA;- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)&#xA;- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)&#xA;- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)&#xA;- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)&#xA;&#xA;IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR&#xA;TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License&#xA;is provided, please contact the Eclipse Foundation to determine what terms and conditions&#xA;govern that particular Content.&#xA;&#xA;&#xA;Use of Provisioning Technology&#xA;&#xA;The Eclipse Foundation makes available provisioning software, examples of which include,&#xA;but are not limited to, p2 and the Eclipse Update Manager (&quot;Provisioning Technology&quot;) for&#xA;the purpose of allowing users to install software, documentation, information and/or&#xA;other materials (collectively &quot;Installable Software&quot;). This capability is provided with&#xA;the intent of allowing such users to install, extend and update Eclipse-based products.&#xA;Information about packaging Installable Software is available at&#xA;http://eclipse.org/equinox/p2/repository_packaging.html (&quot;Specification&quot;).&#xA;&#xA;You may use Provisioning Technology to allow other parties to install Installable Software.&#xA;You shall be responsible for enabling the applicable license agreements relating to the&#xA;Installable Software to be presented to, and accepted by, the users of the Provisioning Technology&#xA;in accordance with the Specification. By using Provisioning Technology in such a manner and&#xA;making it available in accordance with the Specification, you further acknowledge your&#xA;agreement to, and the acquisition of all necessary rights to permit the following:&#xA;&#xA;1. A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute&#xA;the Provisioning Technology on a machine (&quot;Target Machine&quot;) with the intent of installing,&#xA;extending or updating the functionality of an Eclipse-based product.&#xA;2. During the Provisioning Process, the Provisioning Technology may cause third party&#xA;Installable Software or a portion thereof to be accessed and copied to the Target Machine.&#xA;3. Pursuant to the Specification, you will provide to the user the terms and conditions that&#xA;govern the use of the Installable Software (&quot;Installable Software Agreement&quot;) and such&#xA;Installable Software Agreement shall be accessed from the Target Machine in accordance&#xA;with the Specification. Such Installable Software Agreement must inform the user of the&#xA;terms and conditions that govern the Installable Software and must solicit acceptance by&#xA;the end user in the manner prescribed in such Installable Software Agreement. Upon such&#xA;indication of agreement by the user, the provisioning Technology will complete installation&#xA;of the Installable Software.&#xA;&#xA;Cryptography&#xA;&#xA;Content may contain encryption software. The country in which you are&#xA;currently may have restrictions on the import, possession, and use,&#xA;and/or re-export to another country, of encryption software. BEFORE&#xA;using any encryption software, please check the country&apos;s laws,&#xA;regulations and policies concerning the import, possession, or use, and&#xA;re-export of encryption software, to see if this is permitted.&#xA;&#xA;Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.&#xA;'/>
+      <property name='df_LT.copyright' value='Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;'/>
+      <property name='df_LT.featureName' value='CDO Model Repository Server Hibernate Examples'/>
+      <property name='df_LT.description' value='Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+    </properties>
+    <provides size='3'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.feature.jar' version='4.2.500.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/>
+      <provided namespace='org.eclipse.update.feature' name='org.eclipse.emf.cdo.examples.hibernate' version='4.2.500.v20171218-1712'/>
+    </provides>
+    <filter>
+      (org.eclipse.update.install.features=true)
+    </filter>
+    <artifacts size='1'>
+      <artifact classifier='org.eclipse.update.feature' id='org.eclipse.emf.cdo.examples.hibernate' version='4.2.500.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='zipped'>
+          true
+        </instruction>
+      </instructions>
+    </touchpointData>
+    <licenses size='1'>
+      <license uri='%25licenseURL' url='%25licenseURL'>
+        %license
+      </license>
+    </licenses>
+    <copyright uri='%25copyrightURL' url='%25copyrightURL'>
+      %copyright
+    </copyright>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.source.feature.group' version='4.2.500.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.source.feature.group' range='[0.0.0,4.2.500.v20171218-1712)' severity='0'/>
+    <properties size='13'>
+      <property name='org.eclipse.equinox.p2.name' value='%featureName'/>
+      <property name='org.eclipse.equinox.p2.description' value='%description'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.equinox.p2.type.group' value='true'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources-feature'/>
+      <property name='df_LT.license' value='Eclipse Foundation Software User Agreement&#xA;April 9, 2014&#xA;&#xA;Usage Of Content&#xA;&#xA;THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR&#xA;OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY &quot;CONTENT&quot;).&#xA;USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS&#xA;AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR&#xA;NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU&#xA;AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT&#xA;AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS&#xA;OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE&#xA;TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS&#xA;OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED&#xA;BELOW, THEN YOU MAY NOT USE THE CONTENT.&#xA;&#xA;Applicable Licenses&#xA;&#xA;Unless otherwise indicated, all Content made available by the&#xA;Eclipse Foundation is provided to you under the terms and conditions of&#xA;the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is&#xA;provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.&#xA;For purposes of the EPL, &quot;Program&quot; will mean the Content.&#xA;&#xA;Content includes, but is not limited to, source code, object code,&#xA;documentation and other files maintained in the Eclipse Foundation source code&#xA;repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available&#xA;as downloadable archives (&quot;Downloads&quot;).&#xA;&#xA;- Content may be structured and packaged into modules to facilitate delivering,&#xA;extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;),&#xA;plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).&#xA;- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)&#xA;in a directory named &quot;plugins&quot;.&#xA;- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.&#xA;Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.&#xA;Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version&#xA;numbers of the Plug-ins and/or Fragments associated with that Feature.&#xA;- Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files&#xA;named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.&#xA;&#xA;The terms and conditions governing Plug-ins and Fragments should be&#xA;contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and&#xA;conditions governing Features and Included Features should be contained&#xA;in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature&#xA;Licenses may be located in any directory of a Download or Module&#xA;including, but not limited to the following locations:&#xA;&#xA;- The top-level (root) directory&#xA;- Plug-in and Fragment directories&#xA;- Inside Plug-ins and Fragments packaged as JARs&#xA;- Sub-directories of the directory named &quot;src&quot; of certain Plug-ins&#xA;- Feature directories&#xA;&#xA;Note: if a Feature made available by the Eclipse Foundation is installed using the&#xA;Provisioning Technology (as defined below), you must agree to a license (&quot;Feature &#xA;Update License&quot;) during the installation process. If the Feature contains&#xA;Included Features, the Feature Update License should either provide you&#xA;with the terms and conditions governing the Included Features or inform&#xA;you where you can locate them. Feature Update Licenses may be found in&#xA;the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.&#xA;Such Abouts, Feature Licenses, and Feature Update Licenses contain the&#xA;terms and conditions (or references to such terms and conditions) that&#xA;govern your use of the associated Content in that directory.&#xA;&#xA;THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER&#xA;TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.&#xA;SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):&#xA;&#xA;- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)&#xA;- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)&#xA;- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)&#xA;- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)&#xA;- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)&#xA;&#xA;IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR&#xA;TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License&#xA;is provided, please contact the Eclipse Foundation to determine what terms and conditions&#xA;govern that particular Content.&#xA;&#xA;&#xA;Use of Provisioning Technology&#xA;&#xA;The Eclipse Foundation makes available provisioning software, examples of which include,&#xA;but are not limited to, p2 and the Eclipse Update Manager (&quot;Provisioning Technology&quot;) for&#xA;the purpose of allowing users to install software, documentation, information and/or&#xA;other materials (collectively &quot;Installable Software&quot;). This capability is provided with&#xA;the intent of allowing such users to install, extend and update Eclipse-based products.&#xA;Information about packaging Installable Software is available at&#xA;http://eclipse.org/equinox/p2/repository_packaging.html (&quot;Specification&quot;).&#xA;&#xA;You may use Provisioning Technology to allow other parties to install Installable Software.&#xA;You shall be responsible for enabling the applicable license agreements relating to the&#xA;Installable Software to be presented to, and accepted by, the users of the Provisioning Technology&#xA;in accordance with the Specification. By using Provisioning Technology in such a manner and&#xA;making it available in accordance with the Specification, you further acknowledge your&#xA;agreement to, and the acquisition of all necessary rights to permit the following:&#xA;&#xA;1. A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute&#xA;the Provisioning Technology on a machine (&quot;Target Machine&quot;) with the intent of installing,&#xA;extending or updating the functionality of an Eclipse-based product.&#xA;2. During the Provisioning Process, the Provisioning Technology may cause third party&#xA;Installable Software or a portion thereof to be accessed and copied to the Target Machine.&#xA;3. Pursuant to the Specification, you will provide to the user the terms and conditions that&#xA;govern the use of the Installable Software (&quot;Installable Software Agreement&quot;) and such&#xA;Installable Software Agreement shall be accessed from the Target Machine in accordance&#xA;with the Specification. Such Installable Software Agreement must inform the user of the&#xA;terms and conditions that govern the Installable Software and must solicit acceptance by&#xA;the end user in the manner prescribed in such Installable Software Agreement. Upon such&#xA;indication of agreement by the user, the provisioning Technology will complete installation&#xA;of the Installable Software.&#xA;&#xA;Cryptography&#xA;&#xA;Content may contain encryption software. The country in which you are&#xA;currently may have restrictions on the import, possession, and use,&#xA;and/or re-export to another country, of encryption software. BEFORE&#xA;using any encryption software, please check the country&apos;s laws,&#xA;regulations and policies concerning the import, possession, or use, and&#xA;re-export of encryption software, to see if this is permitted.&#xA;&#xA;Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.&#xA;'/>
+      <property name='df_LT.copyright' value='Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;'/>
+      <property name='df_LT.featureName' value='CDO Model Repository Server Hibernate Examples Source'/>
+      <property name='df_LT.description' value='Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+    </properties>
+    <provides size='2'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.source.feature.group' version='4.2.500.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <requires size='5'>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.feature.group' range='[4.2.500.v20171218-1712,4.2.500.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.client.source' range='[4.1.400.v20171218-1712,4.1.400.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.server.source' range='[4.1.400.v20171218-1712,4.1.400.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.log4j.source' range='[4.0.300.v20171218-1712,4.0.300.v20171218-1712]'/>
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.source.feature.jar' range='[4.2.500.v20171218-1712,4.2.500.v20171218-1712]'>
+        <filter>
+          (org.eclipse.update.install.features=true)
+        </filter>
+      </required>
+    </requires>
+    <touchpoint id='null' version='0.0.0'/>
+    <licenses size='1'>
+      <license uri='%25licenseURL' url='%25licenseURL'>
+        %license
+      </license>
+    </licenses>
+    <copyright uri='%25copyrightURL' url='%25copyrightURL'>
+      %copyright
+    </copyright>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.source.feature.jar' version='4.2.500.v20171218-1712'>
+    <properties size='13'>
+      <property name='org.eclipse.equinox.p2.name' value='%featureName'/>
+      <property name='org.eclipse.equinox.p2.description' value='%description'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.update.feature.plugin' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='df_LT.license' value='Eclipse Foundation Software User Agreement&#xA;April 9, 2014&#xA;&#xA;Usage Of Content&#xA;&#xA;THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR&#xA;OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY &quot;CONTENT&quot;).&#xA;USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS&#xA;AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR&#xA;NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU&#xA;AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT&#xA;AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS&#xA;OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE&#xA;TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS&#xA;OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED&#xA;BELOW, THEN YOU MAY NOT USE THE CONTENT.&#xA;&#xA;Applicable Licenses&#xA;&#xA;Unless otherwise indicated, all Content made available by the&#xA;Eclipse Foundation is provided to you under the terms and conditions of&#xA;the Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is&#xA;provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.&#xA;For purposes of the EPL, &quot;Program&quot; will mean the Content.&#xA;&#xA;Content includes, but is not limited to, source code, object code,&#xA;documentation and other files maintained in the Eclipse Foundation source code&#xA;repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available&#xA;as downloadable archives (&quot;Downloads&quot;).&#xA;&#xA;- Content may be structured and packaged into modules to facilitate delivering,&#xA;extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;),&#xA;plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).&#xA;- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)&#xA;in a directory named &quot;plugins&quot;.&#xA;- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.&#xA;Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.&#xA;Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version&#xA;numbers of the Plug-ins and/or Fragments associated with that Feature.&#xA;- Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files&#xA;named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.&#xA;&#xA;The terms and conditions governing Plug-ins and Fragments should be&#xA;contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and&#xA;conditions governing Features and Included Features should be contained&#xA;in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature&#xA;Licenses may be located in any directory of a Download or Module&#xA;including, but not limited to the following locations:&#xA;&#xA;- The top-level (root) directory&#xA;- Plug-in and Fragment directories&#xA;- Inside Plug-ins and Fragments packaged as JARs&#xA;- Sub-directories of the directory named &quot;src&quot; of certain Plug-ins&#xA;- Feature directories&#xA;&#xA;Note: if a Feature made available by the Eclipse Foundation is installed using the&#xA;Provisioning Technology (as defined below), you must agree to a license (&quot;Feature &#xA;Update License&quot;) during the installation process. If the Feature contains&#xA;Included Features, the Feature Update License should either provide you&#xA;with the terms and conditions governing the Included Features or inform&#xA;you where you can locate them. Feature Update Licenses may be found in&#xA;the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.&#xA;Such Abouts, Feature Licenses, and Feature Update Licenses contain the&#xA;terms and conditions (or references to such terms and conditions) that&#xA;govern your use of the associated Content in that directory.&#xA;&#xA;THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER&#xA;TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.&#xA;SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):&#xA;&#xA;- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)&#xA;- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)&#xA;- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)&#xA;- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)&#xA;- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)&#xA;&#xA;IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR&#xA;TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License&#xA;is provided, please contact the Eclipse Foundation to determine what terms and conditions&#xA;govern that particular Content.&#xA;&#xA;&#xA;Use of Provisioning Technology&#xA;&#xA;The Eclipse Foundation makes available provisioning software, examples of which include,&#xA;but are not limited to, p2 and the Eclipse Update Manager (&quot;Provisioning Technology&quot;) for&#xA;the purpose of allowing users to install software, documentation, information and/or&#xA;other materials (collectively &quot;Installable Software&quot;). This capability is provided with&#xA;the intent of allowing such users to install, extend and update Eclipse-based products.&#xA;Information about packaging Installable Software is available at&#xA;http://eclipse.org/equinox/p2/repository_packaging.html (&quot;Specification&quot;).&#xA;&#xA;You may use Provisioning Technology to allow other parties to install Installable Software.&#xA;You shall be responsible for enabling the applicable license agreements relating to the&#xA;Installable Software to be presented to, and accepted by, the users of the Provisioning Technology&#xA;in accordance with the Specification. By using Provisioning Technology in such a manner and&#xA;making it available in accordance with the Specification, you further acknowledge your&#xA;agreement to, and the acquisition of all necessary rights to permit the following:&#xA;&#xA;1. A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute&#xA;the Provisioning Technology on a machine (&quot;Target Machine&quot;) with the intent of installing,&#xA;extending or updating the functionality of an Eclipse-based product.&#xA;2. During the Provisioning Process, the Provisioning Technology may cause third party&#xA;Installable Software or a portion thereof to be accessed and copied to the Target Machine.&#xA;3. Pursuant to the Specification, you will provide to the user the terms and conditions that&#xA;govern the use of the Installable Software (&quot;Installable Software Agreement&quot;) and such&#xA;Installable Software Agreement shall be accessed from the Target Machine in accordance&#xA;with the Specification. Such Installable Software Agreement must inform the user of the&#xA;terms and conditions that govern the Installable Software and must solicit acceptance by&#xA;the end user in the manner prescribed in such Installable Software Agreement. Upon such&#xA;indication of agreement by the user, the provisioning Technology will complete installation&#xA;of the Installable Software.&#xA;&#xA;Cryptography&#xA;&#xA;Content may contain encryption software. The country in which you are&#xA;currently may have restrictions on the import, possession, and use,&#xA;and/or re-export to another country, of encryption software. BEFORE&#xA;using any encryption software, please check the country&apos;s laws,&#xA;regulations and policies concerning the import, possession, or use, and&#xA;re-export of encryption software, to see if this is permitted.&#xA;&#xA;Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.&#xA;'/>
+      <property name='df_LT.copyright' value='Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v1.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v10.html&#xA;'/>
+      <property name='df_LT.featureName' value='CDO Model Repository Server Hibernate Examples Source'/>
+      <property name='df_LT.description' value='Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo.features'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate'/>
+      <property name='maven-version' value='4.2.500-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources-feature'/>
+    </properties>
+    <provides size='3'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.source.feature.jar' version='4.2.500.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/>
+      <provided namespace='org.eclipse.update.feature' name='org.eclipse.emf.cdo.examples.hibernate.source' version='4.2.500.v20171218-1712'/>
+    </provides>
+    <filter>
+      (org.eclipse.update.install.features=true)
+    </filter>
+    <artifacts size='1'>
+      <artifact classifier='org.eclipse.update.feature' id='org.eclipse.emf.cdo.examples.hibernate.source' version='4.2.500.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='zipped'>
+          true
+        </instruction>
+      </instructions>
+    </touchpointData>
+    <licenses size='1'>
+      <license uri='%25licenseURL' url='%25licenseURL'>
+        %license
+      </license>
+    </licenses>
+    <copyright uri='%25copyrightURL' url='%25copyrightURL'>
+      %copyright
+    </copyright>
+  </unit>
+</units>
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.properties b/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.properties
new file mode 100644
index 0000000..bda3637
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.properties
@@ -0,0 +1,10 @@
+#
+#Mon Dec 18 18:13:36 CET 2017
+featureName=CDO Model Repository Server Hibernate Examples Source
+copyright=Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.\nAll rights reserved. This program and the accompanying materials\nare made available under the terms of the Eclipse Public License v1.0\nwhich accompanies this distribution, and is available at\nhttp\://www.eclipse.org/legal/epl-v10.html\n
+updateSiteName=Eclipse Modeling Project Updates
+copyrightURL=copyright.txt
+licenseURL=license.html
+description=Contains the CDO Hibernate example plugin and sources. Ensure that Hibernate is already installed\! Visit http\://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.
+providerName=Eclipse Modeling Project
+license=Eclipse Foundation Software User Agreement\nApril 9, 2014\n\nUsage Of Content\n\nTHE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\nOTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\nUSE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\nAGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\nNOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\nAGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\nAND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\nOR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\nTERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\nOF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\nBELOW, THEN YOU MAY NOT USE THE CONTENT.\n\nApplicable Licenses\n\nUnless otherwise indicated, all Content made available by the\nEclipse Foundation is provided to you under the terms and conditions of\nthe Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\nprovided with this Content and is also available at http\://www.eclipse.org/legal/epl-v10.html.\nFor purposes of the EPL, "Program" will mean the Content.\n\nContent includes, but is not limited to, source code, object code,\ndocumentation and other files maintained in the Eclipse Foundation source code\nrepository ("Repository") in software modules ("Modules") and made available\nas downloadable archives ("Downloads").\n\n- Content may be structured and packaged into modules to facilitate delivering,\nextending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\nplug-in fragments ("Fragments"), and features ("Features").\n- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\nin a directory named "plugins".\n- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\nEach Feature may be packaged as a sub-directory in a directory named "features".\nWithin a Feature, files named "feature.xml" may contain a list of the names and version\nnumbers of the Plug-ins and/or Fragments associated with that Feature.\n- Features may also include other Features ("Included Features"). Within a Feature, files\nnamed "feature.xml" may contain a list of the names and version numbers of Included Features.\n\nThe terms and conditions governing Plug-ins and Fragments should be\ncontained in files named "about.html" ("Abouts"). The terms and\nconditions governing Features and Included Features should be contained\nin files named "license.html" ("Feature Licenses"). Abouts and Feature\nLicenses may be located in any directory of a Download or Module\nincluding, but not limited to the following locations\:\n\n- The top-level (root) directory\n- Plug-in and Fragment directories\n- Inside Plug-ins and Fragments packaged as JARs\n- Sub-directories of the directory named "src" of certain Plug-ins\n- Feature directories\n\nNote\: if a Feature made available by the Eclipse Foundation is installed using the\nProvisioning Technology (as defined below), you must agree to a license ("Feature \nUpdate License") during the installation process. If the Feature contains\nIncluded Features, the Feature Update License should either provide you\nwith the terms and conditions governing the Included Features or inform\nyou where you can locate them. Feature Update Licenses may be found in\nthe "license" property of files named "feature.properties" found within a Feature.\nSuch Abouts, Feature Licenses, and Feature Update Licenses contain the\nterms and conditions (or references to such terms and conditions) that\ngovern your use of the associated Content in that directory.\n\nTHE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\nTO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\nSOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO)\:\n\n- Eclipse Distribution License Version 1.0 (available at http\://www.eclipse.org/licenses/edl-v1.0.html)\n- Common Public License Version 1.0 (available at http\://www.eclipse.org/legal/cpl-v10.html)\n- Apache Software License 1.1 (available at http\://www.apache.org/licenses/LICENSE)\n- Apache Software License 2.0 (available at http\://www.apache.org/licenses/LICENSE-2.0)\n- Mozilla Public License Version 1.1 (available at http\://www.mozilla.org/MPL/MPL-1.1.html)\n\nIT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\nTO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\nis provided, please contact the Eclipse Foundation to determine what terms and conditions\ngovern that particular Content.\n\n\nUse of Provisioning Technology\n\nThe Eclipse Foundation makes available provisioning software, examples of which include,\nbut are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\nthe purpose of allowing users to install software, documentation, information and/or\nother materials (collectively "Installable Software"). This capability is provided with\nthe intent of allowing such users to install, extend and update Eclipse-based products.\nInformation about packaging Installable Software is available at\nhttp\://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\nYou may use Provisioning Technology to allow other parties to install Installable Software.\nYou shall be responsible for enabling the applicable license agreements relating to the\nInstallable Software to be presented to, and accepted by, the users of the Provisioning Technology\nin accordance with the Specification. By using Provisioning Technology in such a manner and\nmaking it available in accordance with the Specification, you further acknowledge your\nagreement to, and the acquisition of all necessary rights to permit the following\:\n\n1. A series of actions may occur ("Provisioning Process") in which a user may execute\nthe Provisioning Technology on a machine ("Target Machine") with the intent of installing,\nextending or updating the functionality of an Eclipse-based product.\n2. During the Provisioning Process, the Provisioning Technology may cause third party\nInstallable Software or a portion thereof to be accessed and copied to the Target Machine.\n3. Pursuant to the Specification, you will provide to the user the terms and conditions that\ngovern the use of the Installable Software ("Installable Software Agreement") and such\nInstallable Software Agreement shall be accessed from the Target Machine in accordance\nwith the Specification. Such Installable Software Agreement must inform the user of the\nterms and conditions that govern the Installable Software and must solicit acceptance by\nthe end user in the manner prescribed in such Installable Software Agreement. Upon such\nindication of agreement by the user, the provisioning Technology will complete installation\nof the Installable Software.\n\nCryptography\n\nContent may contain encryption software. The country in which you are\ncurrently may have restrictions on the import, possession, and use,\nand/or re-export to another country, of encryption software. BEFORE\nusing any encryption software, please check the country's laws,\nregulations and policies concerning the import, possession, or use, and\nre-export of encryption software, to see if this is permitted.\n\nJava and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
diff --git a/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.xml b/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.xml
new file mode 100644
index 0000000..c084045
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate-feature/target/sources-feature/feature.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature id="org.eclipse.emf.cdo.examples.hibernate.source" version="4.2.500.v20171218-1712" plugin="org.eclipse.emf.cdo.examples.hibernate.server" label="%featureName" provider-name="%providerName">
+  <includes id="org.eclipse.emf.cdo.examples.hibernate" version="4.2.500.v20171218-1712"/>
+  <description>
+      %description
+   </description>
+  <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+  <license url="%licenseURL">
+      %license
+   </license>
+  <plugin id="org.eclipse.emf.cdo.examples.hibernate.client.source" version="4.1.400.v20171218-1712" download-size="0" install-size="0" unpack="false"/>
+  <plugin id="org.eclipse.emf.cdo.examples.hibernate.server.source" version="4.1.400.v20171218-1712" download-size="0" install-size="0" unpack="false"/>
+  <plugin id="org.eclipse.emf.cdo.examples.hibernate.log4j.source" version="4.0.300.v20171218-1712" download-size="0" install-size="0" unpack="false"/>
+</feature>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.classpath b/org.eclipse.emf.cdo.examples.hibernate.client/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.project b/org.eclipse.emf.cdo.examples.hibernate.client/.project
new file mode 100644
index 0000000..7863fa4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.project
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.examples.hibernate.client</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng.release/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+  <filteredResources>
+    <filter>
+      <id>1396938000000</id>
+      <name></name>
+      <type>10</type>
+      <matcher>
+        <id>org.eclipse.ui.ide.multiFilter</id>
+        <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+      </matcher>
+    </filter>
+  </filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..b9743bf
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/.project=UTF-8
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b61ffca
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,381 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..5e9a565
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..fe01bb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.client/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4414156
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/META-INF/MANIFEST.MF
@@ -0,0 +1,36 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.client
+Bundle-Version: 4.1.400.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.jvm;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.net4j;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.net4j.tcp;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.examples.company;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.cdo.server.hibernate.teneo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.teneo;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.mapper;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.teneo.annotations;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.cdo.server.hibernate;bundle-version="[4.0.0,5.0.0)",
+ org.junit;bundle-version="[4.0.0,5.0.0)"
+Import-Package: org.hibernate;version="[4.0.0,5.0.0)",
+ org.hibernate.cfg;version="[4.0.0,5.0.0)",
+ org.hibernate.engine;version="[4.0.0,5.0.0)",
+ org.hibernate.id;version="[4.0.0,5.0.0)",
+ org.hibernate.mapping;version="[4.0.0,5.0.0)",
+ org.hibernate.persister.entity;version="[4.0.0,5.0.0)",
+ org.hibernate.property;version="[4.0.0,5.0.0)",
+ org.hibernate.proxy;version="[4.0.0,5.0.0)",
+ org.hibernate.tool.hbm2ddl;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple.component;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple.entity;version="[4.0.0,5.0.0)",
+ org.hibernate.type;version="[4.0.0,5.0.0)",
+ org.hibernate.usertype;version="[4.0.0,5.0.0)",
+ org.apache.commons.logging;version="[1.0.0,2.0.0)"
+Export-Package: org.eclipse.emf.cdo.examples.hibernate.client;version="4.1.400"
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/about.html b/org.eclipse.emf.cdo.examples.hibernate.client/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class
new file mode 100644
index 0000000..df3e400
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class
new file mode 100644
index 0000000..2b83c0f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class
new file mode 100644
index 0000000..fa4d27c
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class
new file mode 100644
index 0000000..204b798
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class
new file mode 100644
index 0000000..7c995f4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/bin/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/build.properties b/org.eclipse.emf.cdo.examples.hibernate.client/build.properties
new file mode 100644
index 0000000..df22c8e
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/build.properties
@@ -0,0 +1,19 @@
+# Copyright (c) 2010, 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               about.html
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/plugin.properties b/org.eclipse.emf.cdo.examples.hibernate.client/plugin.properties
new file mode 100644
index 0000000..8b9a811
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/plugin.properties
@@ -0,0 +1,25 @@
+# Copyright (c) 2010-2013 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Martin Taal - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName = CDO Model Repository Server Hibernate Examples (Client)
+providerName = Eclipse Modeling Project
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/pom.xml b/org.eclipse.emf.cdo.examples.hibernate.client/pom.xml
new file mode 100644
index 0000000..b56f63d
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Berlin, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.examples.hibernate.client</artifactId>
+  <version>4.1.400-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.java b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.java
new file mode 100644
index 0000000..055c3ba
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.hibernate.client;
+
+import org.eclipse.emf.cdo.examples.company.CompanyPackage;
+import org.eclipse.emf.cdo.net4j.CDONet4jSession;
+import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
+import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
+import org.eclipse.emf.cdo.session.CDOSession;
+
+import org.eclipse.net4j.Net4jUtil;
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.tcp.TCPUtil;
+import org.eclipse.net4j.util.container.ContainerUtil;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.PrintLogHandler;
+import org.eclipse.net4j.util.om.trace.PrintTraceHandler;
+
+import junit.framework.TestCase;
+
+/**
+ * This class contains code to connect to a CDO server in a standalone manner . So the junit test is not running inside
+ * an OSGI container.
+ *
+ * @author Martin Taal
+ */
+public class BaseTest extends TestCase
+{
+  protected static final String REPO_NAME = "repo1"; //$NON-NLS-1$
+
+  protected static final String CONNECTION_ADDRESS = "localhost:2036"; //$NON-NLS-1$
+
+  private CDONet4jSessionConfiguration sessionConfiguration = null;
+
+  /**
+   * Opens a CDOSession, does not register an EPackage with the session. This should be done by the caller.
+   */
+  protected CDOSession openSession()
+  {
+    if (sessionConfiguration == null)
+    {
+      initialize();
+    }
+
+    final CDONet4jSession cdoSession = sessionConfiguration.openNet4jSession();
+    cdoSession.getPackageRegistry().putEPackage(CompanyPackage.eINSTANCE);
+    return cdoSession;
+  }
+
+  /**
+   * Initializes the connection and creates a {@link CDONet4jSessionConfiguration} which is stored in a member of this
+   * class.
+   */
+  protected void initialize()
+  {
+    OMPlatform.INSTANCE.setDebugging(true);
+    OMPlatform.INSTANCE.addLogHandler(PrintLogHandler.CONSOLE);
+    OMPlatform.INSTANCE.addTraceHandler(PrintTraceHandler.CONSOLE);
+
+    // Prepare container
+    final IManagedContainer container = ContainerUtil.createContainer();
+    Net4jUtil.prepareContainer(container); // Register Net4j factories
+    TCPUtil.prepareContainer(container); // Register TCP factories
+    CDONet4jUtil.prepareContainer(container); // Register CDO factories
+    // LifecycleUtil.activate(container);
+    container.activate();
+
+    // Create connector
+    final IConnector connector = TCPUtil.getConnector(container, CONNECTION_ADDRESS);
+
+    // Create configuration
+    sessionConfiguration = CDONet4jUtil.createNet4jSessionConfiguration();
+    sessionConfiguration.setConnector(connector);
+    sessionConfiguration.setRepositoryName(REPO_NAME);
+  }
+
+  /**
+   * Nullifies the session configuration so that a new test will start with a new one.
+   */
+  @Override
+  protected void tearDown() throws Exception
+  {
+    sessionConfiguration = null;
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.java b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.java
new file mode 100644
index 0000000..1738094
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.hibernate.client;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.examples.company.Category;
+import org.eclipse.emf.cdo.examples.company.CompanyFactory;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * This test shows that a custom ID Generator is used. You can find the annotation for the id generator in the ecore
+ * model, at EPackage level and in the Category.name EAttribute.
+ * <p/>
+ * The ID generator is implemented in the org.eclipse.emf.cdo.examples.hibernate.server (see the
+ * CDOExampleUUIDHexGenerator class).
+ * <p/>
+ * The custom id generator ensures that if an object has already an id that it is being re-used.
+ * <p/>
+ * Note this testcase will work with the hibernate mapping created using the latest version of the ecore file. When
+ * using the generated hbm file then it does not work (as the generated hbm file does not necessarily contain the
+ * required generator definitions).
+ *
+ * @author Martin Taal
+ */
+public class CustomIDGeneratorTest extends BaseTest
+{
+
+  /**
+   * Create 2 categories, after persisting they should both have an id. One has a pre-set id, the other one a generated
+   * id (as it was not pre-set).
+   */
+  public void testSetId() throws Exception
+  {
+
+    Category category1;
+    Category category2;
+    final String uuid = "MyUUID"; //$NON-NLS-1$
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      // get/create a resource
+      CDOResource resource = transaction.getOrCreateResource("/res1"); //$NON-NLS-1$
+
+      // clear any previous data
+      resource.getContents().clear();
+
+      category1 = CompanyFactory.eINSTANCE.createCategory();
+      category1.setName(uuid);
+      category2 = CompanyFactory.eINSTANCE.createCategory();
+
+      resource.getContents().add(category1);
+      resource.getContents().add(category2);
+
+      transaction.commit();
+      session.close();
+    }
+
+    // read back and test that the uuid is the same for one
+    // and generated for the other
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource("/res1"); //$NON-NLS-1$
+      final Category category1_read = (Category)resource.getContents().get(0);
+      final Category category2_read = (Category)resource.getContents().get(1);
+
+      // test that we really have different objects
+      assertNotSame(category1, category1_read);
+      assertNotSame(category2, category2_read);
+
+      // but that the uuid for one is equal but not the same object
+      assertEquals(uuid, category1_read.getName());
+      assertNotSame(uuid, category1_read.getName());
+
+      // and the other uuid has been set
+      assertNotNull(category2_read.getName());
+      assertEquals(false, uuid.equals(category2_read.getName()));
+      transaction.commit();
+      session.close();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.java b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.java
new file mode 100644
index 0000000..508b35f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.hibernate.client;
+
+import org.eclipse.emf.cdo.examples.company.CompanyPackage;
+import org.eclipse.emf.cdo.server.hibernate.teneo.CDOMappingGenerator;
+
+import org.eclipse.net4j.util.io.IOUtil;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+/**
+ * This class shows how the hibernate mapping can be generated programmatically. The hibernate mapping can be stored
+ * locally and used in the server.
+ * <p/>
+ * See <a href=
+ * "http://wiki.eclipse.org/CDO_Hibernate_Store_Model_Relational_Mapping#Generating_the_mapping.2C_manually_changing_it_and_then_use_the_manual_mapping"
+ * >this</a> wiki page for more information.
+ * <p/>
+ * The generated hbm is printed to the console. For the rest see the inline comments.
+ * <p/>
+ * Note that this method uses CDO server side plugins and Teneo. This results in two extra dependencies in this plugin:
+ * <ul>
+ * <li>org.eclipse.emf.teno</li>
+ * <li>org.eclipse.emf.cdo.server.hibernate.teneo</li>
+ * <li>org.apache.commons.logging</li>
+ * </ul>
+ * The first two dependencies normally do not exist on a client side application.
+ *
+ * @author Martin Taal
+ */
+public class GenerateHBMTest extends TestCase
+{
+
+  public void testGenerateHBM()
+  {
+    // create a properties
+    final Properties props = new Properties();
+    // this property should normally be set like this:
+    props.put(PersistenceOptions.CASCADE_POLICY_ON_NON_CONTAINMENT, "PERSIST,MERGE"); //$NON-NLS-1$
+
+    // add some demo properties
+    props.put(PersistenceOptions.INHERITANCE_MAPPING, "JOINED"); //$NON-NLS-1$
+    props.put(PersistenceOptions.ADD_INDEX_FOR_FOREIGN_KEY, "true"); //$NON-NLS-1$
+
+    // get the epackages
+    final EPackage[] ePackages = new EPackage[] { CompanyPackage.eINSTANCE };
+
+    // generate the mapping
+    final CDOMappingGenerator mappingGenerator = new CDOMappingGenerator();
+    final String mapping = mappingGenerator.generateMapping(ePackages, props);
+
+    // show it somewhere....
+    // then store the hbm somewhere in a file and change it manually
+    IOUtil.ERR().println(mapping);
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.java b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.java
new file mode 100644
index 0000000..db63e6f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.java
@@ -0,0 +1,456 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.examples.hibernate.client;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDString;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.examples.company.CompanyFactory;
+import org.eclipse.emf.cdo.examples.company.Customer;
+import org.eclipse.emf.cdo.examples.company.Order;
+import org.eclipse.emf.cdo.examples.company.OrderDetail;
+import org.eclipse.emf.cdo.examples.company.Product;
+import org.eclipse.emf.cdo.examples.company.SalesOrder;
+import org.eclipse.emf.cdo.examples.company.VAT;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+import org.eclipse.net4j.util.collection.CloseableIterator;
+
+import org.junit.Before;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test different aspects of HQL querying using the CDO query api.
+ * <p/>
+ * The queries are done on a test set which is created automatically. The size
+ * of the testdata is controlled by the static final int's in the top of this
+ * class.
+ *
+ * @author Martin Taal
+ */
+public class HibernateQueryTest extends BaseTest
+{
+  private static final int NUM_OF_PRODUCTS = 20;
+
+  private static final int NUM_OF_CUSTOMERS = 5;
+
+  private static final int NUM_OF_PRODUCTS_CUSTOMER = NUM_OF_PRODUCTS / NUM_OF_CUSTOMERS;
+
+  private static final int NUM_OF_SALES_ORDERS = 5;
+
+  // MT: remove after https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+  // gets resolved
+  private static int index = 0;
+
+  /**
+   * Calls super.setUp and then removes the old data and creates new one.
+   */
+  @Override
+  @Before
+  public void setUp() throws Exception
+  {
+    super.setUp();
+
+    // first clear the old data
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      if (transaction.hasResource("/test1")) //$NON-NLS-1$
+      {
+        final CDOResource resource = transaction.getResource("/test1"); //$NON-NLS-1$
+        if (resource != null)
+        {
+          resource.getContents().clear();
+        }
+      }
+      transaction.commit();
+    }
+
+    // then create new one
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      final CDOResource resource = transaction.getOrCreateResource("/test1"); //$NON-NLS-1$
+      fillResource(resource);
+      transaction.commit();
+    }
+
+  }
+
+  public void testSimpleQueries() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Product"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Product> products = cdoQuery.getResult(Product.class);
+      assertEquals(NUM_OF_PRODUCTS, products.size());
+    }
+
+    // MT: re-enable after
+    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+    // gets resolved
+    // {
+    // CDOQuery cdoQuery = transaction.createQuery("hql", "from Product where name=:name"); //$NON-NLS-1$ //$NON-NLS-2$
+    // cdoQuery.setParameter("name", "" + 1); //$NON-NLS-1$ //$NON-NLS-2$
+    // final List<Product> products = cdoQuery.getResult(Product.class);
+    // assertEquals(1, products.size());
+    // }
+
+    {
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Customer"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Customer> customers = cdoQuery.getResult(Customer.class);
+      assertEquals(NUM_OF_CUSTOMERS, customers.size());
+    }
+
+    {
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Product where vat=:vat"); //$NON-NLS-1$ //$NON-NLS-2$
+      cdoQuery.setParameter("vat", VAT.VAT15); //$NON-NLS-1$
+      final List<Product> products = cdoQuery.getResult(Product.class);
+      // MT: re-enable after
+      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+      // gets resolved
+      // assertEquals(10, products.size());
+      assertEquals(5, products.size());
+      for (Product p : products)
+      {
+        assertEquals(p.getVat(), VAT.VAT15);
+      }
+    }
+
+    transaction.commit();
+  }
+
+  public void testFunctions() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery cdoQuery = transaction.createQuery("hql", "select count(*) from Product"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Long> counts = cdoQuery.getResult(Long.class);
+      assertEquals(counts.size(), 1);
+      assertEquals(counts.get(0), new Long(NUM_OF_PRODUCTS));
+    }
+
+    {
+      // result with arrays are not yet supported, see this bugzilla:
+      // bug 282612
+      // CDOQuery cdoQuery = transaction.createQuery("hql",
+      // "select so.id, sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id");
+      CDOQuery cdoQuery = transaction.createQuery("hql", //$NON-NLS-1$
+          "select sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id"); //$NON-NLS-1$
+      final List<Double> results = cdoQuery.getResult(Double.class);
+      assertEquals(NUM_OF_SALES_ORDERS * NUM_OF_CUSTOMERS, results.size());
+    }
+
+    transaction.commit();
+  }
+
+  public void testComplexQuerySalesOrderJoinCustomerProduct() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery customerQuery = transaction.createQuery("hql", "from Customer order by name"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Customer> customers = customerQuery.getResult(Customer.class);
+      assertEquals(NUM_OF_CUSTOMERS, customers.size());
+
+      CDOQuery productQuery = transaction.createQuery("hql", "from Product"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Product> products = productQuery.getResult(Product.class);
+      assertEquals(NUM_OF_PRODUCTS, products.size());
+
+      int i = 0;
+      for (Customer customer : customers)
+      {
+        final int customerIndex = Integer.parseInt(customer.getName());
+        // check order by
+        assertEquals(i++, customerIndex);
+
+        final int productCounter = customerIndex * NUM_OF_PRODUCTS_CUSTOMER;
+        for (Product product : products)
+        {
+          final int productIndex = Integer.parseInt(product.getName());
+          final CDOQuery orderQuery = transaction.createQuery("hql", //$NON-NLS-1$
+              "select so from SalesOrder so, OrderDetail od where so.customer=:customer and od in elements(so.orderDetails) and od.product=:product"); //$NON-NLS-1$
+          orderQuery.setParameter("customer", customer); //$NON-NLS-1$
+          orderQuery.setParameter("product", product); //$NON-NLS-1$
+
+          final boolean hasOrders = productCounter <= productIndex && productIndex < productCounter + NUM_OF_PRODUCTS_CUSTOMER;
+          if (hasOrders)
+          {
+            final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+            assertEquals(NUM_OF_SALES_ORDERS, sos.size());
+            for (SalesOrder so : sos)
+            {
+              assertEquals(customer, so.getCustomer());
+              boolean found = false;
+              for (OrderDetail od : so.getOrderDetails())
+              {
+                found |= od.getProduct() == product;
+              }
+
+              assertEquals(true, found);
+            }
+          }
+          else
+          {
+            // MT: re-enable after
+            // https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+            // gets resolved
+            // assertEquals(5,
+            // orderQuery.getResult(SalesOrder.class).size());
+            // assertEquals(0,
+            // orderQuery.getResult(SalesOrder.class).size());
+          }
+        }
+      }
+    }
+
+    transaction.commit();
+  }
+
+  public void testElementsClause() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery odQuery = transaction.createQuery("hql", "from OrderDetail"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<OrderDetail> orderDetails = odQuery.getResult(OrderDetail.class);
+      for (OrderDetail orderDetail : orderDetails)
+      {
+        final CDOQuery orderQuery = transaction.createQuery("hql", //$NON-NLS-1$
+            "select so from SalesOrder so where :od in elements(so.orderDetails)"); //$NON-NLS-1$
+        orderQuery.setParameter("od", orderDetail); //$NON-NLS-1$
+        final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+        assertEquals(1, sos.size());
+        assertEquals(orderDetail.getOrder(), sos.get(0));
+      }
+    }
+
+    transaction.commit();
+  }
+
+  // Tests id handling
+  // See: bug 283106
+  public void testQueryWithID() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery odQuery = transaction.createQuery("hql", "from Customer"); //$NON-NLS-1$ //$NON-NLS-2$
+      final List<Customer> customers = odQuery.getResult(Customer.class);
+      for (Customer customer : customers)
+      {
+        final CDOQuery orderQuery = transaction.createQuery("hql", //$NON-NLS-1$
+            "select so from SalesOrder so where so.customer.id=:customerId"); //$NON-NLS-1$
+        final CDOObject cdoObject = (CDOObject)customer;
+        final CDOID id = cdoObject.cdoID();
+        orderQuery.setParameter("customerId", getIdValue(id)); //$NON-NLS-1$
+        final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+        assertEquals(NUM_OF_SALES_ORDERS, sos.size());
+        for (SalesOrder so : sos)
+        {
+          assertEquals(customer, so.getCustomer());
+        }
+      }
+    }
+
+    transaction.commit();
+  }
+
+  public void testQueryObjectArray() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery query = transaction.createQuery("hql", //$NON-NLS-1$
+          "select od, od.order, od.product.vat, od.price from OrderDetail as od where od.product.vat=:vat"); //$NON-NLS-1$
+      query.setParameter("vat", VAT.VAT15); //$NON-NLS-1$
+      for (Object[] values : query.getResult(Object[].class))
+      {
+        assertEquals(true, values[0] instanceof OrderDetail);
+        assertEquals(true, values[1] instanceof SalesOrder);
+        assertEquals(true, values[2] instanceof VAT);
+        assertEquals(VAT.VAT15, values[2]);
+        assertEquals(true, values[3] instanceof Float);
+        final SalesOrder order = (SalesOrder)values[1];
+        assertEquals(true, order.getOrderDetails().contains(values[0]));
+      }
+    }
+
+    transaction.commit();
+  }
+
+  public void testPaging() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      int pageSize = 5;
+      int numOfPages = NUM_OF_PRODUCTS / pageSize;
+      final List<Product> allProducts = new ArrayList<Product>();
+      for (int page = 0; page < numOfPages; page++)
+      {
+        CDOQuery productQuery = transaction.createQuery("hql", "from Product"); //$NON-NLS-1$ //$NON-NLS-2$
+        productQuery.setMaxResults(pageSize);
+        // NOTE: firstResult is a special parameter for the hql query
+        // language
+        productQuery.setParameter("firstResult", page * pageSize); //$NON-NLS-1$
+        final List<Product> queriedProducts = productQuery.getResult(Product.class);
+        assertEquals(true, queriedProducts.size() <= pageSize);
+        // a product should not have been read yet
+        for (Product newProduct : queriedProducts)
+        {
+          assertEquals(true, !allProducts.contains(newProduct));
+        }
+
+        allProducts.addAll(queriedProducts);
+      }
+
+      assertEquals(NUM_OF_PRODUCTS, allProducts.size());
+    }
+
+    transaction.commit();
+  }
+
+  public void testIterator() throws Exception
+  {
+    CDOSession session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      CDOQuery productQuery = transaction.createQuery("hql", "from Product"); //$NON-NLS-1$ //$NON-NLS-2$
+      final CloseableIterator<Product> iterator = productQuery.getResultAsync(Product.class);
+      int counter = 0;
+      while (iterator.hasNext())
+      {
+        final Product product = iterator.next();
+        // meaningless but do something
+        assertEquals(true, product != null);
+        counter++;
+        if (counter == NUM_OF_PRODUCTS / 2)
+        {
+          iterator.close();
+        }
+      }
+    }
+
+    transaction.commit();
+  }
+
+  private void fillResource(CDOResource resource)
+  {
+    final List<Product> products = new ArrayList<Product>();
+    for (int i = 0; i < NUM_OF_PRODUCTS; i++)
+    {
+      // MT: re-enable after
+      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+      // gets resolved
+      products.add(createProduct(index++ + i));
+    }
+
+    resource.getContents().addAll(products);
+
+    int productCounter = 0;
+    for (int i = 0; i < NUM_OF_CUSTOMERS; i++)
+    {
+      final Customer customer = CompanyFactory.eINSTANCE.createCustomer();
+      customer.setCity("City " + i); //$NON-NLS-1$
+      customer.setName(i + ""); //$NON-NLS-1$
+      customer.setStreet("Street " + i); //$NON-NLS-1$
+      resource.getContents().add(customer);
+
+      final List<Product> customerProducts = products.subList(productCounter, productCounter + NUM_OF_PRODUCTS_CUSTOMER);
+      for (int k = 0; k < NUM_OF_SALES_ORDERS; k++)
+      {
+        resource.getContents().add(createSalesOrder(i * 10 + k, customer, customerProducts));
+      }
+
+      productCounter += NUM_OF_PRODUCTS_CUSTOMER;
+    }
+  }
+
+  private SalesOrder createSalesOrder(int num, Customer customer, List<Product> products)
+  {
+    SalesOrder salesOrder = CompanyFactory.eINSTANCE.createSalesOrder();
+    salesOrder.setCustomer(customer);
+    // MT: re-enable after
+    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=309920
+    // gets resolved
+    // salesOrder.setId(num);
+    salesOrder.setId(index++ + num);
+    createOrderDetail(salesOrder, num, products);
+    return salesOrder;
+  }
+
+  private List<OrderDetail> createOrderDetail(Order order, int index, List<Product> products)
+  {
+    final List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
+    int count = 0;
+    for (Product product : products)
+    {
+      OrderDetail orderDetail = CompanyFactory.eINSTANCE.createOrderDetail();
+      orderDetail.setOrder(order);
+      orderDetail.setPrice(count++ * index * 1.1f);
+      orderDetail.setProduct(product);
+    }
+
+    return orderDetails;
+  }
+
+  private Product createProduct(int index)
+  {
+    Product product = CompanyFactory.eINSTANCE.createProduct();
+    product.setDescription("Description " + index); //$NON-NLS-1$
+    product.setName("" + index); //$NON-NLS-1$
+    if (index < 10)
+    {
+      product.setVat(VAT.VAT15);
+    }
+    else
+    {
+      product.setVat(VAT.VAT7);
+    }
+
+    return product;
+  }
+
+  public Serializable getIdValue(CDOID id)
+  {
+    if (id instanceof CDOIDString)
+    {
+      return CDOIDUtil.getString(id);
+    }
+    return CDOIDUtil.getLong(id);
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.java b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.java
new file mode 100644
index 0000000..8a6b37a
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/src/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.hibernate.client;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.examples.company.Company;
+import org.eclipse.emf.cdo.examples.company.CompanyFactory;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * A quick test to show creating and persisting some data in the repository. To run these tests the CDO server has to be
+ * started on tcp port 2036. This can be accomplished by using the CDOHibernateServer.launch configuration which makes
+ * use of the cdo-server.xml config file in the config directory.
+ * <p/>
+ * The connection logic resides in the {@link BaseTest} parent class.
+ *
+ * @author Martin Taal
+ */
+public class QuickStartTest extends BaseTest
+{
+
+  /**
+   * Simple test that opens a connection gets a resource and creates an address
+   */
+  public void testCreatePersist() throws Exception
+  {
+    // first create an address and persist it
+    final String addressName = "name " + System.currentTimeMillis(); //$NON-NLS-1$
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      // get/create a resource
+      CDOResource resource = transaction.getOrCreateResource("/res1"); //$NON-NLS-1$
+
+      // clear any previous data
+      resource.getContents().clear();
+
+      final Company address = CompanyFactory.eINSTANCE.createCompany();
+      address.setCity("test"); //$NON-NLS-1$
+      address.setName(addressName);
+      address.setStreet("test"); //$NON-NLS-1$
+      resource.getContents().add(address);
+
+      transaction.commit();
+    }
+
+    // read back and do some tests
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource("/res1"); //$NON-NLS-1$
+      assertEquals(true, resource.getContents().get(0) instanceof Company);
+      assertEquals(1, resource.getContents().size());
+      final Company address = (Company)resource.getContents().get(0);
+      assertEquals(addressName, address.getName());
+      transaction.commit();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.client/target/MANIFEST.MF
new file mode 100644
index 0000000..a7577e7
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/MANIFEST.MF
@@ -0,0 +1,36 @@
+Manifest-Version: 1.0
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.client
+Export-Package: org.eclipse.emf.cdo.examples.hibernate.client;version=
+ "4.1.400"
+Bundle-Name: %pluginName
+Bundle-Version: 4.1.400.v20171218-1712
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",org
+ .eclipse.net4j.jvm;bundle-version="[4.0.0,5.0.0)",org.eclipse.emf.cdo
+ .net4j;bundle-version="[4.0.0,5.0.0)",org.eclipse.net4j.tcp;bundle-ve
+ rsion="[4.0.0,5.0.0)",org.eclipse.emf.cdo.examples.company;bundle-ver
+ sion="[4.0.0,5.0.0)",org.eclipse.core.runtime;bundle-version="[3.5.0,
+ 4.0.0)",org.eclipse.emf.cdo.server.hibernate.teneo;bundle-version="[4
+ .0.0,5.0.0)",org.eclipse.emf.teneo;bundle-version="[2.0.0,3.0.0)",org
+ .eclipse.emf.teneo.hibernate.mapper;bundle-version="[2.0.0,3.0.0)",or
+ g.eclipse.emf.teneo.annotations;bundle-version="[2.0.0,3.0.0)",org.ec
+ lipse.emf.cdo.server.hibernate;bundle-version="[4.0.0,5.0.0)",org.jun
+ it;bundle-version="[4.0.0,5.0.0)"
+Bundle-ManifestVersion: 2
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-SourceReferences: scm:git:https://git.eclipse.org/r/p/cdo/cdo.
+ git;path="plugins/org.eclipse.emf.cdo.examples.hibernate.client";comm
+ itId=1e6f785eb70f789fd69cbe2f6f97f02248edfa75
+Bundle-Vendor: %providerName
+Import-Package: org.hibernate;version="[4.0.0,5.0.0)",org.hibernate.cf
+ g;version="[4.0.0,5.0.0)",org.hibernate.engine;version="[4.0.0,5.0.0)
+ ",org.hibernate.id;version="[4.0.0,5.0.0)",org.hibernate.mapping;vers
+ ion="[4.0.0,5.0.0)",org.hibernate.persister.entity;version="[4.0.0,5.
+ 0.0)",org.hibernate.property;version="[4.0.0,5.0.0)",org.hibernate.pr
+ oxy;version="[4.0.0,5.0.0)",org.hibernate.tool.hbm2ddl;version="[4.0.
+ 0,5.0.0)",org.hibernate.tuple;version="[4.0.0,5.0.0)",org.hibernate.t
+ uple.component;version="[4.0.0,5.0.0)",org.hibernate.tuple.entity;ver
+ sion="[4.0.0,5.0.0)",org.hibernate.type;version="[4.0.0,5.0.0)",org.h
+ ibernate.usertype;version="[4.0.0,5.0.0)",org.apache.commons.logging;
+ version="[1.0.0,2.0.0)"
+
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class
new file mode 100644
index 0000000..df3e400
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/BaseTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class
new file mode 100644
index 0000000..ca80799
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/CustomIDGeneratorTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class
new file mode 100644
index 0000000..fa4d27c
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/GenerateHBMTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class
new file mode 100644
index 0000000..204b798
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/HibernateQueryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class
new file mode 100644
index 0000000..7c995f4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/classes/org/eclipse/emf/cdo/examples/hibernate/client/QuickStartTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/local-artifacts.properties b/org.eclipse.emf.cdo.examples.hibernate.client/target/local-artifacts.properties
new file mode 100644
index 0000000..08db469
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/local-artifacts.properties
@@ -0,0 +1,5 @@
+#Mon Dec 18 18:13:35 CET 2017
+artifact.attached.p2metadata=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.client\\target\\p2content.xml
+artifact.main=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.client\\target\\org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT.jar
+artifact.attached.sources=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.client\\target\\org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT-sources.jar
+artifact.attached.p2artifacts=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.client\\target\\p2artifacts.xml
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/maven-archiver/pom.properties b/org.eclipse.emf.cdo.examples.hibernate.client/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..9f1edd6
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Dec 18 18:13:35 CET 2017
+version=4.1.400-SNAPSHOT
+groupId=org.eclipse.emf.cdo
+artifactId=org.eclipse.emf.cdo.examples.hibernate.client
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT-sources.jar b/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT-sources.jar
new file mode 100644
index 0000000..b84a037
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT-sources.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT.jar b/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT.jar
new file mode 100644
index 0000000..b16d1e7
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/org.eclipse.emf.cdo.examples.hibernate.client-4.1.400-SNAPSHOT.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/p2artifacts.xml b/org.eclipse.emf.cdo.examples.hibernate.client/target/p2artifacts.xml
new file mode 100644
index 0000000..49a5b23
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/p2artifacts.xml
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<artifacts size='2'>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400.v20171218-1712'>
+    <properties size='5'>
+      <property name='artifact.size' value='16283'/>
+      <property name='download.size' value='16283'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.client'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+    </properties>
+  </artifact>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.client.source' version='4.1.400.v20171218-1712'>
+    <properties size='6'>
+      <property name='artifact.size' value='11070'/>
+      <property name='download.size' value='11070'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.client'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+  </artifact>
+</artifacts>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/p2content.xml b/org.eclipse.emf.cdo.examples.hibernate.client/target/p2content.xml
new file mode 100644
index 0000000..9672d96
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/p2content.xml
@@ -0,0 +1,94 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<units size='2'>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.client' range='[0.0.0,4.1.400.v20171218-1712)' severity='0'/>
+    <properties size='8'>
+      <property name='df_LT.pluginName' value='CDO Model Repository Server Hibernate Examples (Client)'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+      <property name='org.eclipse.equinox.p2.name' value='%pluginName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='plugin'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.client'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+    </properties>
+    <provides size='5'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400.v20171218-1712'/>
+      <provided namespace='java.package' name='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <requires size='27'>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.net4j.jvm' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.net4j' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.net4j.tcp' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.company' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='[3.5.0,4.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.server.hibernate.teneo' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.teneo' range='[2.0.0,3.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.teneo.hibernate.mapper' range='[2.0.0,3.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.teneo.annotations' range='[2.0.0,3.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.server.hibernate' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.junit' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.cfg' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.engine' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.id' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.mapping' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.persister.entity' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.property' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.proxy' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.tool.hbm2ddl' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.tuple' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.tuple.component' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.tuple.entity' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.type' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.usertype' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.apache.commons.logging' range='[1.0.0,2.0.0)'/>
+    </requires>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.client' version='4.1.400.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.client&#xA;Bundle-Version: 4.1.400.v20171218-1712&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.client.source' version='4.1.400.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.client.source' range='[0.0.0,4.1.400.v20171218-1712)' severity='0'/>
+    <properties size='9'>
+      <property name='df_LT.bundleVendor' value='Eclipse Modeling Project'/>
+      <property name='df_LT.bundleName' value='CDO Model Repository Server Hibernate Examples (Client) Source'/>
+      <property name='org.eclipse.equinox.p2.name' value='%bundleName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%bundleVendor'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='OSGI-INF/l10n/bundle-src'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.client'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+    <provides size='4'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.client.source' version='4.1.400.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.client.source' version='4.1.400.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='source' version='1.0.0'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.client.source' version='4.1.400.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.client.source&#xA;Bundle-Version: 4.1.400.v20171218-1712&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+</units>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.client/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties b/org.eclipse.emf.cdo.examples.hibernate.client/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
new file mode 100644
index 0000000..91b752d
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.client/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
@@ -0,0 +1,4 @@
+#Source Bundle Localization
+#Mon Dec 18 18:13:35 CET 2017
+bundleVendor=Eclipse Modeling Project
+bundleName=CDO Model Repository Server Hibernate Examples (Client) Source
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.classpath b/org.eclipse.emf.cdo.examples.hibernate.log4j/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.project b/org.eclipse.emf.cdo.examples.hibernate.log4j/.project
new file mode 100644
index 0000000..51acf67
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.examples.hibernate.log4j</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng.release/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+  <filteredResources>
+    <filter>
+      <id>1396938000000</id>
+      <name></name>
+      <type>10</type>
+      <matcher>
+        <id>org.eclipse.ui.ide.multiFilter</id>
+        <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+      </matcher>
+    </filter>
+  </filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..b9743bf
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/.project=UTF-8
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a10586d
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Aug 08 14:44:10 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.log4j/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8a96874
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.log4j
+Bundle-Version: 4.0.300.qualifier
+Fragment-Host: org.apache.log4j;bundle-version="[1.2.0,2.0.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/about.html b/org.eclipse.emf.cdo.examples.hibernate.log4j/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/bin/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/bin/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/bin/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/build.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/build.properties
new file mode 100644
index 0000000..3fdcf8d
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/build.properties
@@ -0,0 +1,20 @@
+# Copyright (c) 2011-2013 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties,\
+               src/log4j.properties
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/plugin.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/plugin.properties
new file mode 100644
index 0000000..49f4bb2
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/plugin.properties
@@ -0,0 +1,13 @@
+# Copyright (c) 2011, 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Server Hibernate Log4j
+providerName = Eclipse Modeling Project
+
+extension-point.name = Hibernate Log4j Example
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/pom.xml b/org.eclipse.emf.cdo.examples.hibernate.log4j/pom.xml
new file mode 100644
index 0000000..e8091d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Berlin, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.examples.hibernate.log4j</artifactId>
+  <version>4.0.300-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/src/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/src/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/src/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/MANIFEST.MF
new file mode 100644
index 0000000..e80a772
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.log4j
+Bundle-Name: %pluginName
+Bundle-Version: 4.0.300.v20171218-1712
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-SourceReferences: scm:git:https://git.eclipse.org/r/p/cdo/cdo.
+ git;path="plugins/org.eclipse.emf.cdo.examples.hibernate.log4j";commi
+ tId=1e6f785eb70f789fd69cbe2f6f97f02248edfa75
+Bundle-Vendor: %providerName
+Fragment-Host: org.apache.log4j;bundle-version="[1.2.0,2.0.0)"
+
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/classes/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/classes/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/classes/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/local-artifacts.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/local-artifacts.properties
new file mode 100644
index 0000000..ff552d0
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/local-artifacts.properties
@@ -0,0 +1,5 @@
+#Mon Dec 18 18:13:36 CET 2017
+artifact.attached.p2metadata=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.log4j\\target\\p2content.xml
+artifact.main=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.log4j\\target\\org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT.jar
+artifact.attached.sources=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.log4j\\target\\org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT-sources.jar
+artifact.attached.p2artifacts=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.log4j\\target\\p2artifacts.xml
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/maven-archiver/pom.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..6bec397
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Dec 18 18:13:36 CET 2017
+version=4.0.300-SNAPSHOT
+groupId=org.eclipse.emf.cdo
+artifactId=org.eclipse.emf.cdo.examples.hibernate.log4j
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT-sources.jar b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT-sources.jar
new file mode 100644
index 0000000..d08491e
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT-sources.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT.jar b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT.jar
new file mode 100644
index 0000000..fa413e5
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/org.eclipse.emf.cdo.examples.hibernate.log4j-4.0.300-SNAPSHOT.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2artifacts.xml b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2artifacts.xml
new file mode 100644
index 0000000..bfea202
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2artifacts.xml
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<artifacts size='2'>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.log4j' version='4.0.300.v20171218-1712'>
+    <properties size='5'>
+      <property name='artifact.size' value='4955'/>
+      <property name='download.size' value='4955'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.log4j'/>
+      <property name='maven-version' value='4.0.300-SNAPSHOT'/>
+    </properties>
+  </artifact>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.log4j.source' version='4.0.300.v20171218-1712'>
+    <properties size='6'>
+      <property name='artifact.size' value='1613'/>
+      <property name='download.size' value='1613'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.log4j'/>
+      <property name='maven-version' value='4.0.300-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+  </artifact>
+</artifacts>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2content.xml b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2content.xml
new file mode 100644
index 0000000..e1be456
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/p2content.xml
@@ -0,0 +1,68 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<units size='2'>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.log4j' version='4.0.300.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.log4j' range='[0.0.0,4.0.300.v20171218-1712)' severity='0'/>
+    <properties size='8'>
+      <property name='df_LT.pluginName' value='CDO Model Repository Server Hibernate Log4j'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+      <property name='org.eclipse.equinox.p2.name' value='%pluginName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='plugin'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.log4j'/>
+      <property name='maven-version' value='4.0.300-SNAPSHOT'/>
+    </properties>
+    <provides size='5'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.log4j' version='4.0.300.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.log4j' version='4.0.300.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      <provided namespace='osgi.fragment' name='org.apache.log4j' version='4.0.300.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <requires size='1'>
+      <required namespace='osgi.bundle' name='org.apache.log4j' range='[1.2.0,2.0.0)'/>
+    </requires>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.log4j' version='4.0.300.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.log4j&#xA;Bundle-Version: 4.0.300.v20171218-1712&#xA;Fragment-Host: org.apache.log4j;bundle-version=&quot;[1.2.0,2.0.0)&quot;&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.log4j.source' version='4.0.300.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.log4j.source' range='[0.0.0,4.0.300.v20171218-1712)' severity='0'/>
+    <properties size='9'>
+      <property name='df_LT.bundleVendor' value='Eclipse Modeling Project'/>
+      <property name='df_LT.bundleName' value='CDO Model Repository Server Hibernate Log4j Source'/>
+      <property name='org.eclipse.equinox.p2.name' value='%bundleName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%bundleVendor'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='OSGI-INF/l10n/bundle-src'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.log4j'/>
+      <property name='maven-version' value='4.0.300-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+    <provides size='4'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.log4j.source' version='4.0.300.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.log4j.source' version='4.0.300.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='source' version='1.0.0'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.log4j.source' version='4.0.300.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.log4j.source&#xA;Bundle-Version: 4.0.300.v20171218-1712&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+</units>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.log4j/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
new file mode 100644
index 0000000..088b956
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.log4j/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
@@ -0,0 +1,4 @@
+#Source Bundle Localization
+#Mon Dec 18 18:13:36 CET 2017
+bundleVendor=Eclipse Modeling Project
+bundleName=CDO Model Repository Server Hibernate Log4j Source
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.classpath b/org.eclipse.emf.cdo.examples.hibernate.server/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.project b/org.eclipse.emf.cdo.examples.hibernate.server/.project
new file mode 100644
index 0000000..0a9b5bc
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.project
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.examples.hibernate.server</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng.release/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+  <filteredResources>
+    <filter>
+      <id>1396938000000</id>
+      <name></name>
+      <type>10</type>
+      <matcher>
+        <id>org.eclipse.ui.ide.multiFilter</id>
+        <arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+      </matcher>
+    </filter>
+  </filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b61ffca
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,381 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..5e9a565
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..fe01bb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/CDOHibernateServer.launch b/org.eclipse.emf.cdo.examples.hibernate.server/CDOHibernateServer.launch
new file mode 100644
index 0000000..d9def01
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/CDOHibernateServer.launch
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.cdo.server.app"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.emf.cdo.server.hibernate"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CDOHibernateServer"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../ws-cdo.server"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}&#13;&#10;-debug&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#13;&#10;-Xmx1g&#13;&#10;-Ddebug=true&#10;-Dlog4j.debug=true&#13;&#10;-Dnet4j.config=&quot;${resource_loc:/org.eclipse.emf.cdo.examples.hibernate.server/config}&quot;&#13;&#10;-Dorg.osgi.service.http.port=8080&#10;-Dosgi.console.enable.builtin=true"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.buckminster.cmdline.product"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.emf.cdo.server.hibernate"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.mysql.jdbc@default:default,javax.persistence@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.commons.logging@default:default,org.apache.derby@default:default,org.apache.log4j@default:default,org.dom4j@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.filesystem.win32.x86_64@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources.win32.x86_64@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.teneo.annotations@default:default,org.eclipse.emf.teneo.hibernate.mapper@default:default,org.eclipse.emf.teneo.hibernate@default:default,org.eclipse.emf.teneo@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.compatibility.state@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.team.core@default:default,org.hibernate@default:default,org.hsqldb@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:default,org.eclipse.emf.cdo.examples.company@default:default,org.eclipse.emf.cdo.examples.hibernate.log4j@default:false,org.eclipse.emf.cdo.examples.hibernate.server@default:default,org.eclipse.emf.cdo.expressions@default:default,org.eclipse.emf.cdo.security@default:default,org.eclipse.emf.cdo.server.hibernate.teneo@default:default,org.eclipse.emf.cdo.server.hibernate@default:default,org.eclipse.emf.cdo.server.net4j@default:default,org.eclipse.emf.cdo.server@default:default,org.eclipse.emf.cdo.tests.model1@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.db.jdbc@default:default,org.eclipse.net4j.db@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j.util@default:default,org.eclipse.net4j@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.reading" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.writing" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.adapter" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.util" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.view" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/perf" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/perf.revision" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/perf.revision.loading" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug" value="true"/>
+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.help/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.debug/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.fileshare.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.fileshare/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+</mapAttribute>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7198471
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.server
+Bundle-Version: 4.1.400.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-RegisterBuddy: org.eclipse.emf.cdo.server.hibernate, org.eclipse.emf.cdo.server.hibernate.teneo
+Require-Bundle: org.eclipse.emf.cdo.server.hibernate.teneo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.emf.cdo.tests.model1;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.emf.cdo.examples.company;bundle-version="[4.0.0,5.0.0)"
+Import-Package: org.eclipse.emf.teneo.annotations.mapper;version="[2.0.0,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel;version="[2.0.0,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pannotation;version="[2.0.0,3.0.0)",
+ org.eclipse.emf.cdo.server.hibernate.internal.teneo;version="[4.0.0,5.0.0)",
+ org.hibernate.engine.spi;version="[4.0.0,5.0.0)",
+ org.hibernate.id;version="[4.0.0,5.0.0)",
+ org.hibernate.persister.entity;version="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.emf.cdo.examples.hibernate.server;version="4.1.400"
+Bundle-ClassPath: .
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/company_model_teneo_annotations.xml b/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/company_model_teneo_annotations.xml
new file mode 100644
index 0000000..56531fb
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/META-INF/company_model_teneo_annotations.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<persistence-mapping xmlns="http://www.eclipse.org/emft/teneo"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/examples/company/1.0.0">
+		<eclass name="Addressable">
+			<table name="theAddressTable"/>
+		</eclass>
+	</epackage>
+</persistence-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/about.html b/org.eclipse.emf.cdo.examples.hibernate.server/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/about.ini b/org.eclipse.emf.cdo.examples.hibernate.server/about.ini
new file mode 100644
index 0000000..b7e87ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/about.mappings b/org.eclipse.emf.cdo.examples.hibernate.server/about.mappings
new file mode 100644
index 0000000..bddaab4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/about.properties b/org.eclipse.emf.cdo.examples.hibernate.server/about.properties
new file mode 100644
index 0000000..be9c105
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/about.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2011, 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#    Eike Stepper - initial API and implementation
+   
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = CDO Model Repository Examples Hibernate
+featureText = CDO Model Repository Examples Hibernate\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+Copyright (c) 2004-2016 Eike Stepper (Berlin, Germany) and others. All rights reserved.\n\
+\n\
+Visit http://www.eclipse.org/cdo
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/bin/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.server/bin/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/bin/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class b/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class
new file mode 100644
index 0000000..5adbfa8
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class b/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class
new file mode 100644
index 0000000..b205725
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/bin/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/build.properties b/org.eclipse.emf.cdo.examples.hibernate.server/build.properties
new file mode 100644
index 0000000..efb573a
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/build.properties
@@ -0,0 +1,27 @@
+# Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = META-INF/,\
+               .,\
+               src/log4j.properties,\
+               about.html,\
+               plugin.properties,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               modeling32.png
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = CDOHibernateServer.launch,\
+               about.html
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server-new.xml b/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server-new.xml
new file mode 100644
index 0000000..c8a5803
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server-new.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cdoServer>
+
+<!--
+	This is the new format for the cdo-server.xml which places the hibernate and teneo
+	properties inside the store and mappingprovider tags.
+-->
+
+	<!--
+	<acceptor type="http"/>
+	-->
+
+	<acceptor type="tcp" listenAddr="0.0.0.0" port="2036">
+		<!--
+		<negotiator type="challenge" description="/temp/users.db"/>
+		-->
+	</acceptor>
+
+	<repository name="repo1">
+		<property name="overrideUUID" value=""/>
+		<property name="supportingAudits" value="false"/>
+
+		<store type="hibernate">
+
+			<mappingProvider type="teneo">
+				<!--
+					Teneo options:
+					see: http://www.elver.org/hibernate/options.html
+					or the org.eclipse.emf.teneo.PersistenceOptions class
+				-->
+
+				<!-- The following value must be set normally like this, use this in your app also -->
+				<property name="teneo.mapping.cascade_policy_on_non_containment" value="PERSIST,MERGE"/>
+
+				<!-- some demo settings -->
+				<!--
+					using an external xml file for annotations, note this xml file
+					is located in the org.eclipse.emf.cdo.examples.hibernate.annotations
+					which is available on the cdo server by adding it to the CDOHibernateServer.launch configuration
+				-->
+				<property name="teneo.mapping.persistence_xml" value="/META-INF/company_model_teneo_annotations.xml"/>
+				<!-- create tables for each subclass with joining to the parent table -->
+				<property name="teneo.mapping.inheritance" value="JOINED"/>
+				<!-- create an index for each fk -->
+				<property name="teneo.mapping.add_index_for_fk" value="true"/>
+
+			</mappingProvider>
+
+			<!-- Hibernate properties , see: http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#configuration-optional -->
+			<property name="hibernate.hbm2ddl.auto" value="update"/>
+			<property name="hibernate.show_sql" value="false"/>
+			<property name="hibernate.connection.pool_size" value="10"/>
+			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+
+			<!-- Setting for hsqldb -->
+			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+			<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+			<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:cdohibernate"/>
+			<property name="hibernate.connection.username" value="sa"/>
+			<property name="hibernate.connection.password" value=""/>
+			<property name="hibernate.connection.autocommit" value="true"/>
+
+			<!-- Setting for mysql -->
+			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
+			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
+			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/cdohibernate"/>
+			<property name="hibernate.connection.username" value="root"/>
+			<property name="hibernate.connection.password" value="root"/>
+
+		</store>
+	</repository>
+
+</cdoServer>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server.xml b/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server.xml
new file mode 100644
index 0000000..b9e399c
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/config/cdo-server.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cdoServer>
+
+	<!--
+	<acceptor type="http"/>
+	-->
+
+	<acceptor type="tcp" listenAddr="0.0.0.0" port="2036">
+		<!--
+		<negotiator type="challenge" description="/temp/users.db"/>
+		-->
+	</acceptor>
+
+	<repository name="repo1">
+		<property name="overrideUUID" value=""/>
+		<property name="supportingAudits" value="false"/>
+
+		<!-- 
+		<initialPackage nsURI="http://www.eclipse.org/emf/CDO/examples/company/1.0.0"/>
+		<initialPackage nsURI="http://www.eclipse.org/emf/CDO/tests/model1/1.0.0"/>
+		-->
+		
+		<!--
+			NOTE: the following properties are currently defined on repository level.
+			In future builds of the CDO Hibernate store these properties are defined
+			within the store and mappingProvider tags.
+		-->
+
+			<!--
+				Teneo options:
+				see: http://www.elver.org/hibernate/options.html
+				or the org.eclipse.emf.teneo.PersistenceOptions class
+			-->
+
+			<!-- The following value must be set normally like this, use this in your app also -->
+			<property name="teneo.mapping.cascade_policy_on_non_containment" value="PERSIST,MERGE"/>
+
+			<!-- some demo settings -->
+			<!--
+				using an external xml file for annotations, note this xml file
+				is located in the org.eclipse.emf.cdo.examples.hibernate.annotations
+				which is available on the cdo server by adding it to the CDOHibernateServer.launch configuration
+			-->
+			<property name="teneo.mapping.persistence_xml" value="/META-INF/company_model_teneo_annotations.xml"/>
+			<!-- create tables for each subclass with joining to the parent table -->
+			<property name="teneo.mapping.inheritance" value="JOINED"/>
+			<!-- create an index for each fk -->
+			<property name="teneo.mapping.add_index_for_fk" value="true"/>
+
+
+			<!-- Hibernate properties , see: http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#configuration-optional -->
+			<property name="hibernate.hbm2ddl.auto" value="update"/>
+			<property name="hibernate.show_sql" value="true"/>
+			<property name="hibernate.connection.pool_size" value="10"/>
+			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+
+			<!-- Setting for hsqldb
+			-->
+			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+			<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+			<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:cdohibernate"/>
+			<property name="hibernate.connection.username" value="sa"/>
+			<property name="hibernate.connection.password" value=""/>
+			<!-- property name="hibernate.connection.autocommit" value="true"/-->
+
+			<!-- Setting for mysql
+			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
+			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/cdohibernate"/>
+			<property name="hibernate.connection.username" value="root"/>
+			<property name="hibernate.connection.password" value="root"/>
+			-->
+
+			<!-- Settings for derby
+			<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
+			<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver"/>
+			<property name="hibernate.connection.url" value="jdbc:derby:cdohibernate;create=true"/>
+			-->
+			<!--
+			<property name="hibernate.connection.username" value="root"/>
+			<property name="hibernate.connection.password" value="root"/>
+			 -->
+		<store type="hibernate">
+			<mappingProvider type="teneo">
+				<extension name="org.eclipse.emf.teneo.annotations.mapper.EFeatureAnnotator"
+					value="org.eclipse.emf.cdo.examples.hibernate.server.CDOExampleEFeatureAnnotator"/>
+			</mappingProvider>
+			<!--
+			<mappingProvider type="file">
+				<mappingFile location="generated_hbm.xml"/>
+			</mappingProvider>
+			-->
+		</store>
+	</repository>
+
+</cdoServer>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/config/generated_hbm.xml b/org.eclipse.emf.cdo.examples.hibernate.server/config/generated_hbm.xml
new file mode 100644
index 0000000..54289d0
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/config/generated_hbm.xml
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping auto-import="false">
+	<class entity-name="Addressable" abstract="true" lazy="true" table="`addressable`">
+		<meta attribute="eclassName" inherit="false">Addressable</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id type="long" name="idcol" column="idcol" access="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler">
+			<meta attribute="syntheticId" inherit="false">true</meta>
+			<generator class="native"/>
+		</id>
+		<version name="cdo_teneo_version" type="java.lang.Integer">
+			<meta attribute="version">true</meta>
+			<column name="version"/>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="resource_id"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="container_id"/>
+		</property>
+		<property name="commit_TimeStamp" type="java.lang.Long"/>
+		<property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+			<column not-null="false" unique="false" name="`name`"/>
+		</property>
+		<property name="street" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+			<column not-null="false" unique="false" name="`street`"/>
+		</property>
+		<property name="city" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+			<column not-null="false" unique="false" name="`city`"/>
+		</property>
+	</class>
+	<joined-subclass entity-name="Company" abstract="false" lazy="true" extends="Addressable" table="`company`">
+		<meta attribute="eclassName" inherit="false">Company</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<key>
+			<column name="`addressable_e_id`"/>
+		</key>
+		<list name="categories" lazy="true" cascade="all">
+			<key update="true" foreign-key="company_categories">
+				<column name="`company_categories_e_id`" unique="false"/>
+			</key>
+			<list-index column="`company_categories_idx`"/>
+			<one-to-many entity-name="Category"/>
+		</list>
+		<list name="suppliers" lazy="true" cascade="all">
+			<key update="true" foreign-key="company_suppliers">
+				<column name="`company_suppliers_e_id`" unique="false"/>
+			</key>
+			<list-index column="`company_suppliers_idx`"/>
+			<one-to-many entity-name="Supplier"/>
+		</list>
+		<list name="customers" lazy="true" cascade="all">
+			<key update="true" foreign-key="company_customers">
+				<column name="`company_customers_e_id`" unique="false"/>
+			</key>
+			<list-index column="`company_customers_idx`"/>
+			<one-to-many entity-name="Customer"/>
+		</list>
+		<list name="purchaseOrders" lazy="true" cascade="all">
+			<key update="true" foreign-key="company_purchaseorders">
+				<column name="`company_purchaseorders_e_id`" unique="false"/>
+			</key>
+			<list-index column="`company_purchaseorders_idx`"/>
+			<one-to-many entity-name="PurchaseOrder"/>
+		</list>
+		<list name="salesOrders" lazy="true" cascade="all">
+			<key update="true" foreign-key="company_salesorders">
+				<column name="`company_salesorders_e_id`" unique="false"/>
+			</key>
+			<list-index column="`company_salesorders_idx`"/>
+			<one-to-many entity-name="SalesOrder"/>
+		</list>
+	</joined-subclass>
+	<joined-subclass entity-name="Supplier" abstract="false" lazy="true" extends="Addressable" table="`supplier`">
+		<meta attribute="eclassName" inherit="false">Supplier</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<key>
+			<column name="`addressable_e_id`"/>
+		</key>
+		<list name="purchaseOrders" table="`supplier_purchaseorders`" lazy="true" cascade="merge,persist,save-update,lock">
+			<key update="true">
+				<column name="`supplier_e_id`" unique="false"/>
+			</key>
+			<list-index column="`supplier_purchaseorders_idx`"/>
+			<many-to-many entity-name="PurchaseOrder" unique="true">
+				<column name="`purchaseorder_e_id`" unique="false"/>
+			</many-to-many>
+		</list>
+		<property name="preferred" lazy="false" insert="true" update="true" not-null="false" unique="false" type="boolean">
+			<column not-null="false" unique="false" name="`preferred`"/>
+		</property>
+	</joined-subclass>
+	<joined-subclass entity-name="Customer" abstract="false" lazy="true" extends="Addressable" table="`customer`">
+		<meta attribute="eclassName" inherit="false">Customer</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<key>
+			<column name="`addressable_e_id`"/>
+		</key>
+		<list name="salesOrders" table="`customer_salesorders`" lazy="true" cascade="merge,persist,save-update,lock">
+			<key update="true">
+				<column name="`customer_e_id`" unique="false"/>
+			</key>
+			<list-index column="`customer_salesorders_idx`"/>
+			<many-to-many entity-name="SalesOrder" unique="true">
+				<column name="`salesorder_e_id`" unique="false"/>
+			</many-to-many>
+		</list>
+	</joined-subclass>
+	<class entity-name="BaseOrder" abstract="false" lazy="true" table="`baseorder`">
+		<meta attribute="eclassName" inherit="false">Order</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id type="long" name="idcol" column="idcol" access="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler">
+			<meta attribute="syntheticId" inherit="false">true</meta>
+			<generator class="native"/>
+		</id>
+		<version name="cdo_teneo_version" type="java.lang.Integer">
+			<meta attribute="version">true</meta>
+			<column name="version"/>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="resource_id"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="container_id"/>
+		</property>
+		<property name="commit_TimeStamp" type="java.lang.Long"/>
+		<list name="orderDetails" lazy="true" cascade="all">
+			<key update="true">
+				<column name="`orderdetail_order_e_id`" unique="false"/>
+			</key>
+			<list-index column="`order_orderdetails_idx`"/>
+			<one-to-many entity-name="OrderDetail"/>
+		</list>
+	</class>
+	<class entity-name="OrderDetail" abstract="false" lazy="true" table="`orderdetail`">
+		<meta attribute="eclassName" inherit="false">OrderDetail</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id type="long" name="idcol" column="idcol" access="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler">
+			<meta attribute="syntheticId" inherit="false">true</meta>
+			<generator class="native"/>
+		</id>
+		<version name="cdo_teneo_version" type="java.lang.Integer">
+			<meta attribute="version">true</meta>
+			<column name="version"/>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="resource_id"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="container_id"/>
+		</property>
+		<property name="commit_TimeStamp" type="java.lang.Long"/>
+		<many-to-one name="order" entity-name="BaseOrder" lazy="false" cascade="merge,persist,save-update,lock" foreign-key="orderdetail_order" insert="false" update="false" not-null="false">
+			<column not-null="false" unique="false" name="`orderdetail_order_e_id`" index="OrderDetail_order,OrderDetail_order"/>
+		</many-to-one>
+		<many-to-one name="product" entity-name="Product" lazy="false" cascade="merge,persist,save-update,lock" foreign-key="orderdetail_product" insert="true" update="true" not-null="false"/>
+		<property name="price" lazy="false" insert="true" update="true" not-null="false" unique="false" type="float">
+			<column not-null="false" unique="false" name="`price`"/>
+		</property>
+	</class>
+	<joined-subclass entity-name="PurchaseOrder" abstract="false" lazy="true" extends="BaseOrder" table="`purchaseorder`">
+		<meta attribute="eclassName" inherit="false">PurchaseOrder</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<key>
+			<column name="`baseorder_e_id`"/>
+		</key>
+		<property name="date" lazy="false" insert="true" update="true" not-null="false" unique="false" type="timestamp">
+			<column not-null="false" unique="false" name="`date`"/>
+		</property>
+		<many-to-one name="supplier" entity-name="Supplier" lazy="false" cascade="merge,persist,save-update,lock" foreign-key="purchaseorder_supplier" insert="true" update="true" not-null="false"/>
+	</joined-subclass>
+	<joined-subclass entity-name="SalesOrder" abstract="false" lazy="true" extends="BaseOrder" table="`salesorder`">
+		<meta attribute="eclassName" inherit="false">SalesOrder</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<key>
+			<column name="`baseorder_e_id`"/>
+		</key>
+		<property name="id" lazy="false" insert="true" update="true" not-null="false" unique="false" type="int">
+			<column not-null="false" unique="false" name="`id`"/>
+		</property>
+		<many-to-one name="customer" entity-name="Customer" lazy="false" cascade="merge,persist,save-update,lock" foreign-key="salesorder_customer" insert="true" update="true" not-null="false"/>
+	</joined-subclass>
+	<class entity-name="Category" abstract="false" lazy="true" table="`category`">
+		<meta attribute="eclassName" inherit="false">Category</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id name="name" type="java.lang.String">
+			<column not-null="true" unique="false" name="`name`"/>
+			<generator class="org.eclipse.emf.cdo.examples.hibernate.server.CDOExampleUUIDHexGenerator"/>
+		</id>
+		<version name="cdo_teneo_version" type="java.lang.Integer">
+			<meta attribute="version">true</meta>
+			<column name="version"/>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="resource_id"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="container_id"/>
+		</property>
+		<property name="commit_TimeStamp" type="java.lang.Long"/>
+		<list name="categories" lazy="true" cascade="all">
+			<key update="true" foreign-key="category_categories">
+				<column name="`category_categories_name`" unique="false"/>
+			</key>
+			<list-index column="`category_categories_idx`"/>
+			<one-to-many entity-name="Category"/>
+		</list>
+		<list name="products" lazy="true" cascade="all">
+			<key update="true" foreign-key="category_products">
+				<column name="`category_products_name`" unique="false"/>
+			</key>
+			<list-index column="`category_products_idx`"/>
+			<one-to-many entity-name="Product"/>
+		</list>
+	</class>
+	<class entity-name="Product" abstract="false" lazy="true" table="`product`">
+		<meta attribute="eclassName" inherit="false">Product</meta>
+		<meta attribute="epackage" inherit="false">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id name="name" type="java.lang.String">
+			<column not-null="true" unique="false" name="`name`"/>
+		</id>
+		<version name="cdo_teneo_version" type="java.lang.Integer">
+			<meta attribute="version">true</meta>
+			<column name="version"/>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="resource_id"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="container_id"/>
+		</property>
+		<property name="commit_TimeStamp" type="java.lang.Long"/>
+		<list name="orderDetails" table="`product_orderdetails`" lazy="true" cascade="merge,persist,save-update,lock">
+			<key update="true">
+				<column name="`product_name`" unique="false"/>
+			</key>
+			<list-index column="`product_orderdetails_idx`"/>
+			<many-to-many entity-name="OrderDetail" unique="true">
+				<column name="`orderdetail_e_id`" unique="false"/>
+			</many-to-many>
+		</list>
+		<property name="vat" lazy="false" not-null="true" insert="true" update="true" unique="false">
+			<column not-null="true" unique="false" name="`vat`"/>
+			<type name="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOENumStringType">
+				<param name="enumClass">org.eclipse.emf.cdo.examples.company.VAT</param>
+				<param name="eclassifier">VAT</param>
+				<param name="epackage">http://www.eclipse.org/emf/CDO/examples/company/1.0.0</param>
+			</type>
+		</property>
+		<property name="price" lazy="false" insert="true" update="true" not-null="false" unique="false" type="float">
+			<column not-null="false" unique="false" name="`price`"/>
+		</property>
+	</class>
+</hibernate-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/modeling32.png b/org.eclipse.emf.cdo.examples.hibernate.server/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/modeling32.png
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/plugin.properties b/org.eclipse.emf.cdo.examples.hibernate.server/plugin.properties
new file mode 100644
index 0000000..1c66db4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/plugin.properties
@@ -0,0 +1,25 @@
+# Copyright (c) 2010-2013 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Martin Taal - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName = CDO Model Repository Server Hibernate Examples
+providerName = Eclipse Modeling Project
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/pom.xml b/org.eclipse.emf.cdo.examples.hibernate.server/pom.xml
new file mode 100644
index 0000000..47621c6
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Berlin, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.examples.hibernate.server</artifactId>
+  <version>4.1.400-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/src/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.server/src/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/src/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.java b/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.java
new file mode 100644
index 0000000..cf00ff2
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.hibernate.server;
+
+import org.eclipse.emf.cdo.server.hibernate.teneo.CDOEFeatureAnnotator;
+
+import org.eclipse.net4j.util.io.IOUtil;
+
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEStructuralFeature;
+
+/**
+ * An example of providing an extension for Teneo Mapping. See <a
+ * href="http://wiki.eclipse.org/Teneo/Hibernate/Extensions">here</a> for more information on Teneo extensions.
+ *
+ * @author Martin Taal
+ */
+public class CDOExampleEFeatureAnnotator extends CDOEFeatureAnnotator
+{
+  @Override
+  public void annotate(PAnnotatedEStructuralFeature aStructuralFeature)
+  {
+    IOUtil.ERR().println("CDOExampleEFeatureAnnotator: this method is called as expected"); //$NON-NLS-1$
+    super.annotate(aStructuralFeature);
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.java b/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.java
new file mode 100644
index 0000000..0ed7e76
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/src/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010-2013, 2015 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+
+package org.eclipse.emf.cdo.examples.hibernate.server;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.id.UUIDHexGenerator;
+import org.hibernate.persister.entity.EntityPersister;
+
+import java.io.Serializable;
+
+/**
+ * An example of overriding the standard UUID generator of Hibernate to prevent it overwriting an already existing id in
+ * an object.
+ *
+ * @author mtaal
+ */
+
+public class CDOExampleUUIDHexGenerator extends UUIDHexGenerator
+{
+  @Override
+  public Serializable generate(SessionImplementor session, Object obj)
+  {
+    final EntityPersister entityPersister = session.getEntityPersister(null, obj);
+    final Serializable id = entityPersister.getIdentifier(obj, session);
+    if (id != null)
+    {
+      return id;
+    }
+
+    return super.generate(session, obj);
+  }
+}
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/MANIFEST.MF b/org.eclipse.emf.cdo.examples.hibernate.server/target/MANIFEST.MF
new file mode 100644
index 0000000..97effb3
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Eclipse-RegisterBuddy: org.eclipse.emf.cdo.server.hibernate, org.eclip
+ se.emf.cdo.server.hibernate.teneo
+Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.server
+Require-Bundle: org.eclipse.emf.cdo.server.hibernate.teneo;bundle-vers
+ ion="[4.0.0,5.0.0)",org.eclipse.core.runtime;bundle-version="[3.5.0,4
+ .0.0)",org.eclipse.emf.ecore;bundle-version="[2.5.0,3.0.0)",org.eclip
+ se.net4j.util;bundle-version="[3.0.0,4.0.0)",org.eclipse.emf.cdo.test
+ s.model1;bundle-version="[3.0.0,4.0.0)",org.eclipse.emf.cdo.examples.
+ company;bundle-version="[4.0.0,5.0.0)"
+Bundle-ManifestVersion: 2
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-SourceReferences: scm:git:https://git.eclipse.org/r/p/cdo/cdo.
+ git;path="plugins/org.eclipse.emf.cdo.examples.hibernate.server";comm
+ itId=1e6f785eb70f789fd69cbe2f6f97f02248edfa75
+Bundle-Vendor: %providerName
+Import-Package: org.eclipse.emf.teneo.annotations.mapper;version="[2.0
+ .0,3.0.0)",org.eclipse.emf.teneo.annotations.pamodel;version="[2.0.0,
+ 3.0.0)",org.eclipse.emf.teneo.annotations.pannotation;version="[2.0.0
+ ,3.0.0)",org.eclipse.emf.cdo.server.hibernate.internal.teneo;version=
+ "[4.0.0,5.0.0)",org.hibernate.engine.spi;version="[4.0.0,5.0.0)",org.
+ hibernate.id;version="[4.0.0,5.0.0)",org.hibernate.persister.entity;v
+ ersion="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.emf.cdo.examples.hibernate.server;version=
+ "4.1.400"
+Bundle-Name: %pluginName
+Bundle-Version: 4.1.400.v20171218-1712
+Bundle-Localization: plugin
+Bundle-ClassPath: .
+
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/log4j.properties b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/log4j.properties
new file mode 100644
index 0000000..73099b4
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/log4j.properties
@@ -0,0 +1,42 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+ 
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class
new file mode 100644
index 0000000..5adbfa8
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleEFeatureAnnotator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class
new file mode 100644
index 0000000..b205725
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/classes/org/eclipse/emf/cdo/examples/hibernate/server/CDOExampleUUIDHexGenerator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/local-artifacts.properties b/org.eclipse.emf.cdo.examples.hibernate.server/target/local-artifacts.properties
new file mode 100644
index 0000000..bedae28
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/local-artifacts.properties
@@ -0,0 +1,5 @@
+#Mon Dec 18 18:13:36 CET 2017
+artifact.attached.p2metadata=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.server\\target\\p2content.xml
+artifact.main=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.server\\target\\org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT.jar
+artifact.attached.sources=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.server\\target\\org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT-sources.jar
+artifact.attached.p2artifacts=C\:\\develop\\cdo-master\\git\\cdo\\plugins\\org.eclipse.emf.cdo.examples.hibernate.server\\target\\p2artifacts.xml
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/maven-archiver/pom.properties b/org.eclipse.emf.cdo.examples.hibernate.server/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..6e7ad7e
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Mon Dec 18 18:13:36 CET 2017
+version=4.1.400-SNAPSHOT
+groupId=org.eclipse.emf.cdo
+artifactId=org.eclipse.emf.cdo.examples.hibernate.server
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT-sources.jar b/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT-sources.jar
new file mode 100644
index 0000000..2e6b8ad
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT-sources.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT.jar b/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT.jar
new file mode 100644
index 0000000..5843974
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/org.eclipse.emf.cdo.examples.hibernate.server-4.1.400-SNAPSHOT.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/p2artifacts.xml b/org.eclipse.emf.cdo.examples.hibernate.server/target/p2artifacts.xml
new file mode 100644
index 0000000..6de37b0
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/p2artifacts.xml
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?artifactRepository version='1.1.0'?>
+<artifacts size='2'>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400.v20171218-1712'>
+    <properties size='5'>
+      <property name='artifact.size' value='12081'/>
+      <property name='download.size' value='12081'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+    </properties>
+  </artifact>
+  <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.server.source' version='4.1.400.v20171218-1712'>
+    <properties size='6'>
+      <property name='artifact.size' value='8973'/>
+      <property name='download.size' value='8973'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+  </artifact>
+</artifacts>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/p2content.xml b/org.eclipse.emf.cdo.examples.hibernate.server/target/p2content.xml
new file mode 100644
index 0000000..517fc51
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/p2content.xml
@@ -0,0 +1,80 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<units size='2'>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.server' range='[0.0.0,4.1.400.v20171218-1712)' severity='0'/>
+    <properties size='8'>
+      <property name='df_LT.pluginName' value='CDO Model Repository Server Hibernate Examples'/>
+      <property name='df_LT.providerName' value='Eclipse Modeling Project'/>
+      <property name='org.eclipse.equinox.p2.name' value='%pluginName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%providerName'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='plugin'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+    </properties>
+    <provides size='5'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400.v20171218-1712'/>
+      <provided namespace='java.package' name='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <requires size='13'>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.server.hibernate.teneo' range='[4.0.0,5.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='[3.5.0,4.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.ecore' range='[2.5.0,3.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.net4j.util' range='[3.0.0,4.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.tests.model1' range='[3.0.0,4.0.0)'/>
+      <required namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.company' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.eclipse.emf.teneo.annotations.mapper' range='[2.0.0,3.0.0)'/>
+      <required namespace='java.package' name='org.eclipse.emf.teneo.annotations.pamodel' range='[2.0.0,3.0.0)'/>
+      <required namespace='java.package' name='org.eclipse.emf.teneo.annotations.pannotation' range='[2.0.0,3.0.0)'/>
+      <required namespace='java.package' name='org.eclipse.emf.cdo.server.hibernate.internal.teneo' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.engine.spi' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.id' range='[4.0.0,5.0.0)'/>
+      <required namespace='java.package' name='org.hibernate.persister.entity' range='[4.0.0,5.0.0)'/>
+    </requires>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.server' version='4.1.400.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.server&#xA;Bundle-Version: 4.1.400.v20171218-1712&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+  <unit id='org.eclipse.emf.cdo.examples.hibernate.server.source' version='4.1.400.v20171218-1712' singleton='false'>
+    <update id='org.eclipse.emf.cdo.examples.hibernate.server.source' range='[0.0.0,4.1.400.v20171218-1712)' severity='0'/>
+    <properties size='9'>
+      <property name='df_LT.bundleVendor' value='Eclipse Modeling Project'/>
+      <property name='df_LT.bundleName' value='CDO Model Repository Server Hibernate Examples Source'/>
+      <property name='org.eclipse.equinox.p2.name' value='%bundleName'/>
+      <property name='org.eclipse.equinox.p2.provider' value='%bundleVendor'/>
+      <property name='org.eclipse.equinox.p2.bundle.localization' value='OSGI-INF/l10n/bundle-src'/>
+      <property name='maven-groupId' value='org.eclipse.emf.cdo'/>
+      <property name='maven-artifactId' value='org.eclipse.emf.cdo.examples.hibernate.server'/>
+      <property name='maven-version' value='4.1.400-SNAPSHOT'/>
+      <property name='maven-classifier' value='sources'/>
+    </properties>
+    <provides size='4'>
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.emf.cdo.examples.hibernate.server.source' version='4.1.400.v20171218-1712'/>
+      <provided namespace='osgi.bundle' name='org.eclipse.emf.cdo.examples.hibernate.server.source' version='4.1.400.v20171218-1712'/>
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='source' version='1.0.0'/>
+      <provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
+    </provides>
+    <artifacts size='1'>
+      <artifact classifier='osgi.bundle' id='org.eclipse.emf.cdo.examples.hibernate.server.source' version='4.1.400.v20171218-1712'/>
+    </artifacts>
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
+    <touchpointData size='1'>
+      <instructions size='1'>
+        <instruction key='manifest'>
+          Bundle-SymbolicName: org.eclipse.emf.cdo.examples.hibernate.server.source&#xA;Bundle-Version: 4.1.400.v20171218-1712&#xA;
+        </instruction>
+      </instructions>
+    </touchpointData>
+  </unit>
+</units>
diff --git a/org.eclipse.emf.cdo.examples.hibernate.server/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties b/org.eclipse.emf.cdo.examples.hibernate.server/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
new file mode 100644
index 0000000..d1caf7b
--- /dev/null
+++ b/org.eclipse.emf.cdo.examples.hibernate.server/target/sourcebundle-l10n-gen/OSGI-INF/l10n/bundle-src.properties
@@ -0,0 +1,4 @@
+#Source Bundle Localization
+#Mon Dec 18 18:13:36 CET 2017
+bundleVendor=Eclipse Modeling Project
+bundleName=CDO Model Repository Server Hibernate Examples Source
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/.project b/org.eclipse.emf.cdo.server.db4o-feature/.project
new file mode 100644
index 0000000..dc90f09
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/.project
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.db4o-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..f591a1e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Mon Jul 04 12:34:53 CEST 2011
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..0c30cc4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Sun Mar 09 19:15:26 CET 2008
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git "a/org.eclipse.emf.cdo.server.db4o-feature/CDOServer \050DB4O\051.launch" "b/org.eclipse.emf.cdo.server.db4o-feature/CDOServer \050DB4O\051.launch"
new file mode 100644
index 0000000..ec0e995
--- /dev/null
+++ "b/org.eclipse.emf.cdo.server.db4o-feature/CDOServer \050DB4O\051.launch"
@@ -0,0 +1,707 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.cdo.server.app"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.emf.cdo.server,org.eclipse.emf.cdo.server.db,org.eclipse.net4j,org.eclipse.net4j.db,org.eclipse.net4j.db.derby,org.eclipse.net4j.http.common,org.eclipse.net4j.http.server,org.eclipse.net4j.tcp,org.eclipse.net4j.util"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CDOServer (DB4O)"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../ws-cdo.server"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
+<mapEntry key="[run]" value="org.eclipse.pde.ui.RuntimeWorkbench"/>
+</mapAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}&#13;&#10;-debug&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#13;&#10;-Xmx1g&#13;&#10;-Ddebug=true&#13;&#10;-Dnet4j.config=&quot;${project_loc:/org.eclipse.emf.cdo.server.db4o-feature}/rootfiles/configuration&quot;&#13;&#10;-Dorg.eclipse.emf.cdo.server.browser.port=7777&#13;&#10;-Dorg.osgi.service.http.port=8080&#10;-Dosgi.console.enable.builtin=true"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.emf.cdo"/>
+<stringAttribute key="selected_target_plugins" value="com.db4o@default:default,com.ibm.icu@default:default,com.mysql.jdbc@default:default,javax.servlet@default:default,org.apache.derby@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources.win32.x86_64@default:false,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.orbit.mongodb@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.team.core@default:default,org.h2@default:default,org.hsqldb@default:default,org.postgresql@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:false,org.eclipse.emf.cdo.examples.company@default:default,org.eclipse.emf.cdo.server.db4o@default:default,org.eclipse.emf.cdo.server.db@default:default,org.eclipse.emf.cdo.server.mongodb@default:default,org.eclipse.emf.cdo.server.net4j@default:default,org.eclipse.emf.cdo.server@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.db.derby@default:default,org.eclipse.net4j.db.h2@default:default,org.eclipse.net4j.db.hsqldb@default:default,org.eclipse.net4j.db.jdbc@default:default,org.eclipse.net4j.db.mysql@default:default,org.eclipse.net4j.db.postgresql@default:default,org.eclipse.net4j.db@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j.util@default:default,org.eclipse.net4j@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.aspectj.osgi.service.weaving/debug" value="false"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/debug/TypeExtensionManager" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.core.net/debug" value="false"/>
+<mapEntry key="org.eclipse.core.net/systemproviders" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.core.resources/notifications" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/breadcrumb" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/memory/dynamicLoading" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/breakpointDeltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/presentationId" value=""/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.e4.core.contexts/debug" value="false"/>
+<mapEntry key="org.eclipse.e4.core.contexts/debug/listeners" value="false"/>
+<mapEntry key="org.eclipse.e4.core.contexts/debug/names" value="false"/>
+<mapEntry key="org.eclipse.e4.core.di/debug" value="false"/>
+<mapEntry key="org.eclipse.e4.core.services/debug" value="false"/>
+<mapEntry key="org.eclipse.e4.core.services/debug/injector" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/debug" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/eclipse.context.verbose" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/focus" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/menus" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/renderer" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench.swt/trace/workbench" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/eclipse.context.verbose" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/focus" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/menus" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/renderer" value="false"/>
+<mapEntry key="org.eclipse.e4.ui.workbench/trace/workbench" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.admin/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.id" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.reading" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.writing" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.compare/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn.ui/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn.util/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn.util/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.object.statemachine" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.object.store" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.session.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.session.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.view" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.view.audit" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/debug.view.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.dawn/load.resource.before.notification" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.explorer.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.explorer/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.expressions/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.net4j/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.net4j/perf.revision" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.net4j/perf.revision.loading" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.security/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.admin/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.db/debug.units" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.embedded/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.hibernate/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.lissome/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.lissome/debug.index" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.lissome/debug.journal" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.lissome/debug.vob" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.mongodb/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.store" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.net4j/debug.types" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.objectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests.all/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests.lissome/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests.mongodb/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests.objectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.tests/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.transfer.repository/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.transfer.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.transfer.workspace.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.transfer.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.transfer/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui.compare/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui.shared/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui.team/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui/test" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.object.statemachine" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.object.store" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.session.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.session.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.view" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.view.audit" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.view.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/load.resource.before.notification" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/locking" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.emf.transaction/debug/transactions" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.validation/debug/cache" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/disabled" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/constraints/evaluation" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/listeners" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/parsers" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/providers" value="false"/>
+<mapEntry key="org.eclipse.emf.validation/debug/xml" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.emf.workspace/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.equinox.common/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.common/progress_monitors" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/unsigned" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/certificatechecker/untrusted" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/engine/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/enginesession/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/profileregistry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug/bundle" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug/bundleName" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug/cache" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug/supplements" value="false"/>
+<mapEntry key="org.eclipse.equinox.weaving.hook/debug/weave" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/commands/admin" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/commands/execute" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/commands/redo" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/commands/undo" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/plugin/ondemand/loading" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/services/activate" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/services/config" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.core/debug/services/execute" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.action/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.action/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.action/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.action/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.action/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services.action/debug/services/config" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui.services/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/actions/admin" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/actions/repeat" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/actions/run" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.common.ui/debug/resource/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui.actions/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui.actions/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui.actions/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui.actions/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui.actions/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/dnd/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/filter/canonical" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/filter/events" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/filter/persistencemgr" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.diagram.ui/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug/dnd/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.figures/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug/dnd/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.draw2d.ui.render/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.clipboard.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.clipboard.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.clipboard.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.clipboard.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.clipboard.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug/events/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.commands.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/events/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.core/debug/resources" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.type.core/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.type.core/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.type.core/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.type.core/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.type.core/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui.properties/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui.properties/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui.properties/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui.properties/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui.properties/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.emf.ui/debug/model/operations" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug/dnd/tracing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.gef.ui/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.notation.providers/debug" value="true"/>
+<mapEntry key="org.eclipse.gmf.runtime.notation.providers/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.notation.providers/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.notation.providers/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.gmf.runtime.notation.providers/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.help/debug/search" value="false"/>
+<mapEntry key="org.eclipse.help/debug/toc" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/compilationEnv" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFileMaps" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.pluggable.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/dom/ast" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/dom/ast/throw" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/dom/rewrite" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/freespacetest" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/indexer" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/insertions" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/locks" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/logsizemegs" value="0"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/pagecache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/scheduling" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/selftest" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/space" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/index/timing" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/classpath" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/insertions" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/invalid_archives" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.debug/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations" value="false"/>
+<mapEntry key="org.eclipse.jdt.debug/debug/astEvaluations/callingThreads" value="false"/>
+<mapEntry key="org.eclipse.jdt.debug/debug/jdiEvents" value="false"/>
+<mapEntry key="org.eclipse.jdt.debug/debug/jdiRequestTimes" value="false"/>
+<mapEntry key="org.eclipse.jdt.launching/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.launching/debug/classpath/jreContainer" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/BreadcrumbItemDropDown" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.jface.text/assert/TextSelection/validConstructorArguments" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.jface/debug" value="true"/>
+<mapEntry key="org.eclipse.jface/debug/bidiUtils" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/dialog/noparent" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/loadURLImageDescriptor2x" value="true"/>
+<mapEntry key="org.eclipse.jface/debug/loadURLImageDescriptor2xPngForGif" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/loadURLImageDescriptorDirectly" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/logURLImageDescriptorMissing2x" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/trace/URLImageDescriptor" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/viewers/equalElements" value="false"/>
+<mapEntry key="org.eclipse.jface/debug/viewers/reentrantViewerCalls" value="false"/>
+<mapEntry key="org.eclipse.jface/newlook/preferences/showNewLook" value="false"/>
+<mapEntry key="org.eclipse.jface/trace/actions" value="false"/>
+<mapEntry key="org.eclipse.jface/trace/toolbarDisposal" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.h2/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.h2/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.oracle/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.oracle/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.postgresql/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.postgresql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.debug/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.http.common/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.http.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.http/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.tests/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.buffer" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.net4j.trace/open.channel.timeout" value="10000"/>
+<mapEntry key="org.eclipse.net4j.trace/set.signal.thread.name" value="false"/>
+<mapEntry key="org.eclipse.net4j.ui.shared/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om.monitor" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.net4j/open.channel.timeout" value="10000"/>
+<mapEntry key="org.eclipse.net4j/set.signal.thread.name" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug" value="true"/>
+<mapEntry key="org.eclipse.ocl/debug/evaluation" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/catching" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/exceptions/throwing" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/entering" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/methods/exiting" value="false"/>
+<mapEntry key="org.eclipse.ocl/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleFile" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/cachedmanifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/location" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/objectPool/adds" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/objectPool/dups" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/storage" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/systemBundle" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/lazy" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/hooks" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/providers" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/report" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/roots" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/apianalyzer" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/apidescription" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/apifilterstore" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/apiprofile" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/classfilevisitor" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/delta" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/descriptor/framework" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/pluginworkspacecomponent" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/profilemanager" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/search" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/tagscanner" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/usereportconverter" value="false"/>
+<mapEntry key="org.eclipse.pde.api.tools/debug/workspacedeltaprocessor" value="false"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.pde.core/model" value="false"/>
+<mapEntry key="org.eclipse.pde.core/target/profile" value="false"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.pde.ds.annotations/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.ds.annotations/ds-annotation-builder" value="false"/>
+<mapEntry key="org.eclipse.pde.ds.annotations/ds-annotation-builder/processor" value="false"/>
+<mapEntry key="org.eclipse.search/perf" value="false"/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.ui/compare_editor_input" value="false"/>
+<mapEntry key="org.eclipse.team.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.team.ui/dnd" value="false"/>
+<mapEntry key="org.eclipse.team.ui/history" value="false"/>
+<mapEntry key="org.eclipse.team.ui/syncmodels" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.forms/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.forms/debug/focus" value="true"/>
+<mapEntry key="org.eclipse.ui.forms/debug/text" value="true"/>
+<mapEntry key="org.eclipse.ui.forms/debug/textsize" value="true"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug/toolbar" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.ui.monitoring/debug/event_monitor" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/dnd" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/setup" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/sort" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/viewermap" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.workbench/debug/e4" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/earlyStartup" value="100"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/perspectives" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+</mapAttribute>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/build.properties b/org.eclipse.emf.cdo.server.db4o-feature/build.properties
new file mode 100644
index 0000000..49460fe
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/build.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = pom.xml
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/feature.properties b/org.eclipse.emf.cdo.server.db4o-feature/feature.properties
new file mode 100644
index 0000000..c51032c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/feature.properties
@@ -0,0 +1,8 @@
+# Copyright (c) 2010-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+
+featureName = CDO Model Repository Server DB4O
+description = Contains the DB4O Store bundle. Ensure that DB4O Driver is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains DB4O Driver.
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/feature.xml b/org.eclipse.emf.cdo.server.db4o-feature/feature.xml
new file mode 100644
index 0000000..b5c06c7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/feature.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	Copyright (c) 2010-2013, 2015-2017 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Simon McDuff - initial API and implementation
+	  Ibrahim Sallam - Code refactring and CDO 3.0 support
+-->
+<feature
+      id="org.eclipse.emf.cdo.server.db4o"
+      label="%featureName"
+      version="4.2.500.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.emf.cdo.license"
+      license-feature-version="0.0.0">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.emf.cdo.server.db4o"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.emf.cdo.server.db4o-feature/pom.xml b/org.eclipse.emf.cdo.server.db4o-feature/pom.xml
new file mode 100644
index 0000000..bc36e5d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o-feature/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.features</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/features</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo.features</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.db4o</artifactId>
+  <version>4.2.500-SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.db4o/.classpath b/org.eclipse.emf.cdo.server.db4o/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.server.db4o/.project b/org.eclipse.emf.cdo.server.db4o/.project
new file mode 100644
index 0000000..1fe07ff
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.db4o</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..07533b5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,394 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.launching.prefs b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..556ed07
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..edd2b4c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="false" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="false" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-JSDoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..dcd7056
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,25 @@
+#Mon Nov 02 11:30:52 GMT 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..935fac3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.server.db4o;singleton:=true
+Bundle-Version: 4.0.500.qualifier
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.emf.cdo.server.db4o;version="4.0.500",
+ org.eclipse.emf.cdo.server.internal.db4o;version="4.0.500";x-friends:="org.eclipse.emf.cdo.tests.db4o",
+ org.eclipse.emf.cdo.server.internal.db4o.bundle;version="4.0.500";x-internal:=true
+Import-Package: com.db4o;version="[7.4.0,9.0.0)",
+ com.db4o.config;version="[7.4.0,9.0.0)",
+ com.db4o.constraints;version="[7.4.0,9.0.0)",
+ com.db4o.ext;version="[7.4.0,9.0.0)",
+ com.db4o.query;version="[7.4.0,9.0.0)",
+ com.db4o.reflect;version="[7.4.0,9.0.0)",
+ com.db4o.reflect.jdk;version="[7.4.0,9.0.0)",
+ org.osgi.framework;version="[1.5.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-ClassPath: .
+Automatic-Module-Name: org.eclipse.emf.cdo.server.db4o
diff --git a/org.eclipse.emf.cdo.server.db4o/about.html b/org.eclipse.emf.cdo.server.db4o/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.server.db4o/about.ini b/org.eclipse.emf.cdo.server.db4o/about.ini
new file mode 100644
index 0000000..32006ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText 
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/org.eclipse.emf.cdo.server.db4o/about.mappings b/org.eclipse.emf.cdo.server.db4o/about.mappings
new file mode 100644
index 0000000..28e3764
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${build.qualifier}
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.db4o/about.properties b/org.eclipse.emf.cdo.server.db4o/about.properties
new file mode 100644
index 0000000..408f90d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/about.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2011-2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Martin Fluegge - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = CDO Model Repository Server DB4O
+featureText = CDO Model Repository Server DB4O\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.class
new file mode 100644
index 0000000..77a0cf4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OStore.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OStore.class
new file mode 100644
index 0000000..e70e7c6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/IDB4OStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/package-info.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/package-info.class
new file mode 100644
index 0000000..e1e859e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/db4o/package-info.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.class
new file mode 100644
index 0000000..b91207c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.class
new file mode 100644
index 0000000..5de0388
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.class
new file mode 100644
index 0000000..8d136e8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.class
new file mode 100644
index 0000000..0c9bd0a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.class
new file mode 100644
index 0000000..0592464
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.class
new file mode 100644
index 0000000..32e4af9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.class
new file mode 100644
index 0000000..c94a1d0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.class
new file mode 100644
index 0000000..ef78832
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$DB4OFeatureMapEntry.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$DB4OFeatureMapEntry.class
new file mode 100644
index 0000000..74c97e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$DB4OFeatureMapEntry.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$ExplicitNull.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$ExplicitNull.class
new file mode 100644
index 0000000..3184f11
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision$ExplicitNull.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.class
new file mode 100644
index 0000000..26281fb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore$ServerInfo.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore$ServerInfo.class
new file mode 100644
index 0000000..aca24af
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore$ServerInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.class
new file mode 100644
index 0000000..91fb25d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$1.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$1.class
new file mode 100644
index 0000000..10df285
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$2.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$2.class
new file mode 100644
index 0000000..44aacdf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$2.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$3.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$3.class
new file mode 100644
index 0000000..cebe7d5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$3.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$4.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$4.class
new file mode 100644
index 0000000..778f611
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$4.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$5.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$5.class
new file mode 100644
index 0000000..731ba87
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor$5.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.class
new file mode 100644
index 0000000..24a9a68
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.class
new file mode 100644
index 0000000..439c3cb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.class
new file mode 100644
index 0000000..9279a1f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM$Activator.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM$Activator.class
new file mode 100644
index 0000000..1f70be6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM$Activator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.class b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.class
new file mode 100644
index 0000000..d4418a3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/bin/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/build.properties b/org.eclipse.emf.cdo.server.db4o/build.properties
new file mode 100644
index 0000000..9e5b8cf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/build.properties
@@ -0,0 +1,28 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               modeling32.png,\
+               about.ini,\
+               about.mappings,\
+               about.properties
+src.includes = about.html,\
+               pom.xml
+
+doc.project = org.eclipse.emf.cdo.doc
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.server.db4o/modeling32.png b/org.eclipse.emf.cdo.server.db4o/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/modeling32.png
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.db4o/plugin.properties b/org.eclipse.emf.cdo.server.db4o/plugin.properties
new file mode 100644
index 0000000..387f639
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/plugin.properties
@@ -0,0 +1,12 @@
+# Copyright (c) 2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Victor Roldan Betancort - initial API and implementation
+#    Eike Stepper - maintenance
+
+pluginName = CDO Model Repository Server DB4O
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.server.db4o/plugin.xml b/org.eclipse.emf.cdo.server.db4o/plugin.xml
new file mode 100644
index 0000000..7815999
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+
+<!--
+	Copyright (c) 2010, 2012 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+	
+	Contributors:
+	  Victor Roldan Betancort - initial API and implementation
+	  Eike Stepper            - maintenance 
+-->
+
+<plugin>
+   <extension
+         point="org.eclipse.emf.cdo.server.storeFactories">
+      <storeFactory
+            class="org.eclipse.emf.cdo.server.internal.db4o.DB4OStoreFactory"
+            storeType="db4o">
+      </storeFactory>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.server.db4o/pom.xml b/org.eclipse.emf.cdo.server.db4o/pom.xml
new file mode 100644
index 0000000..d2dac8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017, 2018 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.db4o</artifactId>
+  <version>4.0.500-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.java
new file mode 100644
index 0000000..9e55c75
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OIdentifiableObject.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.db4o;
+
+/**
+ * Represents DB4O objects with an {@link #getId() ID}.
+ *
+ * @author Victor Roldan Betancort
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IDB4OIdentifiableObject
+{
+  public String getId();
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java
new file mode 100644
index 0000000..7741633
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/IDB4OStore.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.db4o;
+
+import org.eclipse.emf.cdo.server.IStore;
+
+/**
+ * The main entry point to the API of CDO's integration with DB4O databases.
+ *
+ * @author Victor Roldan Betancort
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IDB4OStore extends IStore
+{
+  public static final String TYPE = "db4o";
+
+  public String getStoreLocation();
+
+  public int getPort();
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java
new file mode 100644
index 0000000..d980e62
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/db4o/package-info.java
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
+ * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Eike Stepper - initial API
+ * and implementation
+ */
+
+/**
+ * Server concepts for dealing with DB4O stores and accessors.
+ */
+package org.eclipse.emf.cdo.server.db4o;
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java
new file mode 100644
index 0000000..327bc9b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OBlob.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OBlob extends DB4OWrappedValue<byte[]>
+{
+  public DB4OBlob(String id, byte[] value)
+  {
+    super(id, value);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java
new file mode 100644
index 0000000..6e86fc6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OClob.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OClob extends DB4OWrappedValue<char[]>
+{
+  public DB4OClob(String id, char[] value)
+  {
+    super(id, value);
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java
new file mode 100644
index 0000000..649abb6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OCommitInfo.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OCommitInfo
+{
+  private int branchID;
+
+  private long timeStamp;
+
+  private long previousTimeStamp;
+
+  private String userID;
+
+  private String comment;
+
+  public DB4OCommitInfo(int branchID, long timeStamp, long previousTimeStamp, String userID, String comment)
+  {
+    this.branchID = branchID;
+    this.timeStamp = timeStamp;
+    this.previousTimeStamp = previousTimeStamp;
+    this.userID = userID;
+    this.comment = comment;
+  }
+
+  public int getBranchID()
+  {
+    return branchID;
+  }
+
+  public long getTimeStamp()
+  {
+    return timeStamp;
+  }
+
+  public void handle(InternalCDOBranchManager branchManager, InternalCDOCommitInfoManager manager, CDOCommitInfoHandler handler)
+  {
+    InternalCDOBranch branch = branchManager.getBranch(branchID);
+    CDOCommitInfo commitInfo = manager.createCommitInfo(branch, timeStamp, previousTimeStamp, userID, comment, null, null);
+    handler.handleCommitInfo(commitInfo);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java
new file mode 100644
index 0000000..71b4427
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ODurableLockingManager.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2011, 2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Caspar De Groot - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockAreaNotFoundException;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+import org.eclipse.emf.cdo.spi.server.InternalLockManager;
+
+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import com.db4o.ObjectContainer;
+import com.db4o.ObjectSet;
+import com.db4o.query.Query;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4ODurableLockingManager extends Lifecycle
+{
+  public DB4ODurableLockingManager()
+  {
+  }
+
+  public LockArea createLockArea(DB4OStoreAccessor accessor, String userID, CDOBranchPoint branchPoint, boolean readOnly, Map<CDOID, LockGrade> locks)
+  {
+    String durableLockingID = getNextDurableLockingID(accessor);
+    LockArea lockArea = CDOLockUtil.createLockArea(durableLockingID, userID, branchPoint, readOnly, locks);
+    storeLockArea(accessor, lockArea);
+    return lockArea;
+  }
+
+  private void storeLockArea(DB4OStoreAccessor accessor, LockArea area)
+  {
+    ObjectContainer objectContainer = accessor.getObjectContainer();
+    DB4OLockArea primitiveLockArea = DB4OLockArea.getPrimitiveLockArea(area);
+    objectContainer.store(primitiveLockArea);
+    objectContainer.commit();
+  }
+
+  public LockArea getLockArea(DB4OStoreAccessor accessor, String durableLockingID) throws LockAreaNotFoundException
+  {
+    DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
+    return DB4OLockArea.getLockArea(accessor.getStore(), primitive);
+  }
+
+  private DB4OLockArea getPrimitiveLockArea(DB4OStoreAccessor accessor, String durableLockingID) throws LockAreaNotFoundException
+  {
+    ObjectContainer container = accessor.getObjectContainer();
+    Query query = container.query();
+    query.constrain(DB4OLockArea.class);
+    query.descend("id").constrain(durableLockingID);
+
+    ObjectSet<?> lockAreas = query.execute();
+    if (lockAreas.isEmpty())
+    {
+      throw new LockAreaNotFoundException(durableLockingID);
+    }
+
+    if (lockAreas.size() > 1)
+    {
+      throw new AssertionError("Lockarea stored more than once in object database");
+    }
+
+    return (DB4OLockArea)lockAreas.get(0);
+  }
+
+  public void getLockAreas(DB4OStoreAccessor accessor, String userIDPrefix, Handler handler)
+  {
+    ObjectContainer container = accessor.getObjectContainer();
+    Query query = container.query();
+    query.constrain(DB4OLockArea.class);
+
+    if (userIDPrefix.length() > 0)
+    {
+      query.descend("userID").constrain(userIDPrefix).startsWith(true);
+    }
+
+    ObjectSet<?> primitives = query.execute();
+    for (Object primitive : primitives)
+    {
+      LockArea area = DB4OLockArea.getLockArea(accessor.getStore(), (DB4OLockArea)primitive);
+      if (!handler.handleLockArea(area))
+      {
+        break;
+      }
+    }
+  }
+
+  public void deleteLockArea(DB4OStoreAccessor accessor, String durableLockingID)
+  {
+    DB4OLockArea primitive = getPrimitiveLockArea(accessor, durableLockingID);
+    ObjectContainer container = accessor.getObjectContainer();
+    container.delete(primitive);
+    container.commit();
+  }
+
+  public void lock(DB4OStoreAccessor accessor, String durableLockingID, LockType type, Collection<? extends Object> objectsToLock)
+  {
+    // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
+    LockArea area = getLockArea(accessor, durableLockingID);
+    Map<CDOID, LockGrade> locks = area.getLocks();
+
+    InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
+    for (Object objectToLock : objectsToLock)
+    {
+      CDOID id = lockManager.getLockKeyID(objectToLock);
+      LockGrade grade = locks.get(id);
+      if (grade != null)
+      {
+        grade = grade.getUpdated(type, true);
+      }
+      else
+      {
+        grade = LockGrade.get(type);
+      }
+
+      locks.put(id, grade);
+    }
+
+    storeLockArea(accessor, area);
+  }
+
+  public void unlock(DB4OStoreAccessor accessor, String durableLockingID, LockType type, Collection<? extends Object> objectsToUnlock)
+  {
+    // TODO (CD) Refactor? Next chunk of code copied verbatim from MEMStore.lock
+    LockArea area = getLockArea(accessor, durableLockingID);
+    Map<CDOID, LockGrade> locks = area.getLocks();
+
+    InternalLockManager lockManager = accessor.getStore().getRepository().getLockingManager();
+    for (Object objectToUnlock : objectsToUnlock)
+    {
+      CDOID id = lockManager.getLockKeyID(objectToUnlock);
+      LockGrade grade = locks.get(id);
+      if (grade != null)
+      {
+        grade = grade.getUpdated(type, false);
+        if (grade == LockGrade.NONE)
+        {
+          locks.remove(id);
+        }
+        else
+        {
+          locks.put(id, grade);
+        }
+      }
+    }
+
+    storeLockArea(accessor, area);
+  }
+
+  public void unlock(DB4OStoreAccessor accessor, String durableLockingID)
+  {
+    LockArea area = getLockArea(accessor, durableLockingID);
+    Map<CDOID, LockGrade> locks = area.getLocks();
+    locks.clear();
+
+    storeLockArea(accessor, area);
+  }
+
+  // TODO: Refactor -- this was copied verbatim from DurableLockingManager
+  private String getNextDurableLockingID(DB4OStoreAccessor accessor)
+  {
+    for (;;)
+    {
+      String durableLockingID = CDOLockUtil.createDurableLockingID();
+
+      try
+      {
+        getLockArea(accessor, durableLockingID); // Check uniqueness
+        // Not unique; try once more...
+      }
+      catch (LockAreaNotFoundException ex)
+      {
+        return durableLockingID;
+      }
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java
new file mode 100644
index 0000000..92cacae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OIdentifiableObject.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.server.db4o.IDB4OIdentifiableObject;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OIdentifiableObject implements IDB4OIdentifiableObject
+{
+  private String id;
+
+  public String getId()
+  {
+    return id;
+  }
+
+  protected void setId(String id)
+  {
+    this.id = id;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java
new file mode 100644
index 0000000..364f6bf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockArea.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2011-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Caspar De Groot - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4OLockArea
+{
+  private static Map<LockArea, DB4OLockArea> map = new HashMap<LockArea, DB4OLockArea>();
+
+  private String id;
+
+  private String userID;
+
+  private long timestamp;
+
+  private int branchID;
+
+  private boolean readOnly;
+
+  private List<DB4OLockEntry> lockEntries = new LinkedList<DB4OLockEntry>();
+
+  public static DB4OLockArea getPrimitiveLockArea(LockArea lockArea)
+  {
+    DB4OLockArea primitive = map.get(lockArea);
+    if (primitive == null)
+    {
+      primitive = new DB4OLockArea();
+    }
+
+    primitive.id = lockArea.getDurableLockingID();
+    primitive.userID = lockArea.getUserID();
+    primitive.timestamp = lockArea.getTimeStamp();
+    primitive.branchID = lockArea.getBranch().getID();
+    primitive.readOnly = lockArea.isReadOnly();
+
+    List<DB4OLockEntry> newList = DB4OLockEntry.getPrimitiveLockEntries(primitive, lockArea.getLocks());
+    primitive.lockEntries = newList;
+
+    return primitive;
+  }
+
+  public static LockArea getLockArea(IDB4OStore store, DB4OLockArea primitive)
+  {
+    // Reconstruct the branchpoint
+    //
+    CDOBranchManager branchManager = store.getRepository().getBranchManager();
+    CDOBranch branch = branchManager.getBranch(primitive.branchID);
+    CDOBranchPoint branchpoint = branch.getPoint(primitive.timestamp);
+
+    // Reconstruct the lockMap
+    //
+    Map<CDOID, LockGrade> lockMap = CDOIDUtil.createMap();
+    for (DB4OLockEntry entry : primitive.getLockEntries())
+    {
+      CDOID cdoid = CDOIDUtil.createLong(entry.getCdoID());
+      LockGrade lockGrade = LockGrade.get(entry.getLockGrade());
+      lockMap.put(cdoid, lockGrade);
+    }
+
+    LockArea lockArea = CDOLockUtil.createLockArea(primitive.id, primitive.userID, branchpoint, primitive.readOnly, lockMap);
+    map.put(lockArea, primitive);
+    return lockArea;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public String getUserID()
+  {
+    return userID;
+  }
+
+  public long getTimestamp()
+  {
+    return timestamp;
+  }
+
+  public int getBranchID()
+  {
+    return branchID;
+  }
+
+  public List<DB4OLockEntry> getLockEntries()
+  {
+    return lockEntries;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java
new file mode 100644
index 0000000..389b66b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OLockEntry.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Caspar De Groot - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * @author Caspar De Groot
+ */
+public class DB4OLockEntry
+{
+  private long cdoID;
+
+  private int lockGrade;
+
+  public DB4OLockEntry(long longCdoID, int intLockGrade)
+  {
+    cdoID = longCdoID;
+    lockGrade = intLockGrade;
+  }
+
+  public static List<DB4OLockEntry> getPrimitiveLockEntries(DB4OLockArea primitive, Map<CDOID, LockGrade> locks)
+  {
+    List<DB4OLockEntry> newList = new LinkedList<DB4OLockEntry>();
+
+    for (Entry<CDOID, LockGrade> entry : locks.entrySet())
+    {
+      CDOID cdoid = entry.getKey();
+      long longCdoID = CDOIDUtil.getLong(cdoid);
+
+      LockGrade lockGrade = entry.getValue();
+      int intLockGrade = lockGrade.getValue();
+
+      DB4OLockEntry lockEntry = getEntry(primitive.getLockEntries(), longCdoID);
+      if (lockEntry == null)
+      {
+        lockEntry = new DB4OLockEntry(longCdoID, intLockGrade);
+      }
+      else
+      {
+        lockEntry.setLockGrade(intLockGrade);
+      }
+
+      newList.add(lockEntry);
+    }
+
+    return newList;
+  }
+
+  private void setLockGrade(int lockGrade)
+  {
+    this.lockGrade = lockGrade;
+  }
+
+  // TODO (CD) Avoid linear search
+  private static DB4OLockEntry getEntry(List<DB4OLockEntry> entries, long targetID)
+  {
+    for (DB4OLockEntry entry : entries)
+    {
+      if (entry.cdoID == targetID)
+      {
+        return entry;
+      }
+    }
+
+    return null;
+  }
+
+  public long getCdoID()
+  {
+    return cdoID;
+  }
+
+  public int getLockGrade()
+  {
+    return lockGrade;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java
new file mode 100644
index 0000000..2cd7cf8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OPackageUnit.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2010-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+
+import org.eclipse.net4j.util.collection.Pair;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OPackageUnit
+{
+  private String id;
+
+  private Integer ordinalType;
+
+  private Long timeStamp;
+
+  private List<Byte> ePackageBytes;
+
+  private List<Pair<String, String>> packageInfos;
+
+  public DB4OPackageUnit(String id, Integer ordinalType, Long timeStamp, List<Byte> ePackageBytes, List<Pair<String, String>> packageInfos)
+  {
+    setId(id);
+    setOrdinalType(ordinalType);
+    setTimeStamp(timeStamp);
+    setEPackageBytes(ePackageBytes);
+    setPackageInfos(packageInfos);
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setOrdinalType(Integer ordinalType)
+  {
+    this.ordinalType = ordinalType;
+  }
+
+  public Integer getOrdinalType()
+  {
+    return ordinalType;
+  }
+
+  public void setTimeStamp(Long timeStamp)
+  {
+    this.timeStamp = timeStamp;
+  }
+
+  public Long getTimeStamp()
+  {
+    return timeStamp;
+  }
+
+  public void setEPackageBytes(List<Byte> ePackageBytes)
+  {
+    this.ePackageBytes = ePackageBytes;
+  }
+
+  public List<Byte> getEPackageBytes()
+  {
+    return ePackageBytes;
+  }
+
+  public static DB4OPackageUnit getPrimitivePackageUnit(IStore store, InternalCDOPackageUnit packageUnit)
+  {
+    return new DB4OPackageUnit(new String(packageUnit.getID()), new Integer(packageUnit.getOriginalType().ordinal()), new Long(packageUnit.getTimeStamp()),
+        getEPackageBytes(store, packageUnit), getPackageInfosAsPair(packageUnit.getPackageInfos()));
+  }
+
+  public static InternalCDOPackageUnit getPackageUnit(DB4OPackageUnit packageUnit)
+  {
+    InternalCDOPackageUnit cdoPackageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
+    CDOPackageUnit.Type type = CDOPackageUnit.Type.values()[packageUnit.getOrdinalType()];
+    cdoPackageUnit.setOriginalType(type);
+    cdoPackageUnit.setTimeStamp(packageUnit.getTimeStamp());
+    cdoPackageUnit.setPackageInfos(getPackageInfos(packageUnit));
+    return cdoPackageUnit;
+  }
+
+  private static InternalCDOPackageInfo[] getPackageInfos(DB4OPackageUnit packageUnit)
+  {
+    List<InternalCDOPackageInfo> list = new ArrayList<InternalCDOPackageInfo>();
+    for (Pair<String, String> infoPair : packageUnit.getPackageInfos())
+    {
+      InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
+      packageInfo.setParentURI(infoPair.getElement1());
+      packageInfo.setPackageURI(infoPair.getElement2());
+      list.add(packageInfo);
+    }
+    return list.toArray(new InternalCDOPackageInfo[list.size()]);
+  }
+
+  private static List<Byte> getEPackageBytes(IStore store, InternalCDOPackageUnit packageUnit)
+  {
+    EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
+    CDOPackageRegistry packageRegistry = store.getRepository().getPackageRegistry();
+    byte[] bytes = EMFUtil.getEPackageBytes(ePackage, true, packageRegistry);
+    List<Byte> bytesObject = new ArrayList<Byte>();
+    for (byte bt : bytes)
+    {
+      bytesObject.add(new Byte(bt));
+    }
+
+    return bytesObject;
+  }
+
+  private static EPackage getEPackageFromBytes(List<Byte> ePackageBytesList)
+  {
+    ResourceSet rSet = new ResourceSetImpl();
+    byte[] packageBytes = new byte[ePackageBytesList.size()];
+    for (int i = 0; i < packageBytes.length; i++)
+    {
+      packageBytes[i] = ePackageBytesList.get(i);
+    }
+
+    EPackage ePackage = EMFUtil.createEPackage("", packageBytes, true, rSet, false);
+    return ePackage;
+  }
+
+  public EPackage getEPackage()
+  {
+    return getEPackageFromBytes(getEPackageBytes());
+  }
+
+  private static List<Pair<String, String>> getPackageInfosAsPair(InternalCDOPackageInfo[] packageInfos)
+  {
+    List<Pair<String, String>> infos = new ArrayList<Pair<String, String>>();
+    for (InternalCDOPackageInfo info : packageInfos)
+    {
+      Pair<String, String> pair = Pair.create(info.getParentURI(), info.getPackageURI());
+      infos.add(pair);
+    }
+
+    return infos;
+  }
+
+  public void setPackageInfos(List<Pair<String, String>> packageInfos)
+  {
+    this.packageInfos = packageInfos;
+  }
+
+  public List<Pair<String, String>> getPackageInfos()
+  {
+    return packageInfos;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java
new file mode 100644
index 0000000..7957788
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java
@@ -0,0 +1,461 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOClassInfo;
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.common.revision.CDOListFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4ORevision
+{
+  public static final String ATTRIBUTE_CLASS_NAME = "className";
+
+  public static final String ATTRIBUTE_PACKAGE_NS_URI = "packageNsURI";
+
+  private String packageNsURI;
+
+  private String className;
+
+  private long id;
+
+  private int version;
+
+  private long timeStamp;
+
+  private long resourceID;
+
+  /**
+   * Can be an external ID!
+   */
+  private Object containerID;
+
+  private int containingFeatureID;
+
+  private List<Object> values;
+
+  // TODO enum RevisionType { NORMAL, ROOT_RESOURCE, RESOURCE, RESOURCE_FOLDER }??
+  private boolean isResource;
+
+  private boolean isResourceFolder;
+
+  public DB4ORevision(String packageURI, String className, long id, int version, long resourceID, Object containerID, int containingFeatureID,
+      List<Object> values, long timestamp, boolean isResource, boolean isResourceFolder)
+  {
+    setPackageURI(packageURI);
+    setClassName(className);
+    setID(id);
+    setVersion(version);
+    setResourceID(resourceID);
+    setContainerID(containerID);
+    setContainingFeatureID(containingFeatureID);
+    setValues(values);
+    setTimeStamp(timestamp);
+    setResource(isResource);
+    setResourceFolder(isResourceFolder);
+  }
+
+  public void setPackageURI(String packageURI)
+  {
+    packageNsURI = packageURI;
+  }
+
+  public String getPackageURI()
+  {
+    return packageNsURI;
+  }
+
+  public void setClassName(String className)
+  {
+    this.className = className;
+  }
+
+  public String getClassName()
+  {
+    return className;
+  }
+
+  public void setID(long id)
+  {
+    this.id = id;
+  }
+
+  public long getID()
+  {
+    return id;
+  }
+
+  public int getBranchID()
+  {
+    return CDOBranch.MAIN_BRANCH_ID;
+  }
+
+  public void setVersion(int version)
+  {
+    this.version = version;
+  }
+
+  public int getVersion()
+  {
+    return version;
+  }
+
+  public long getRevised()
+  {
+    return CDORevision.UNSPECIFIED_DATE;
+  }
+
+  public void setResourceID(long resourceID)
+  {
+    this.resourceID = resourceID;
+  }
+
+  public long getResourceID()
+  {
+    return resourceID;
+  }
+
+  public void setContainerID(Object containerID)
+  {
+    this.containerID = containerID;
+  }
+
+  public Object getContainerID()
+  {
+    return containerID;
+  }
+
+  public void setContainingFeatureID(int containingFeatureID)
+  {
+    this.containingFeatureID = containingFeatureID;
+  }
+
+  public int getContainingFeatureID()
+  {
+    return containingFeatureID;
+  }
+
+  public void setValues(List<Object> values)
+  {
+    this.values = values;
+  }
+
+  public List<Object> getValues()
+  {
+    return values;
+  }
+
+  public void setTimeStamp(long timeStamp)
+  {
+    this.timeStamp = timeStamp;
+  }
+
+  public long getTimeStamp()
+  {
+    return timeStamp;
+  }
+
+  public void setResource(boolean isResource)
+  {
+    this.isResource = isResource;
+  }
+
+  public boolean isResource()
+  {
+    return isResource;
+  }
+
+  public void setResourceFolder(boolean isResourceFolder)
+  {
+    this.isResourceFolder = isResourceFolder;
+  }
+
+  public boolean isResourceFolder()
+  {
+    return isResourceFolder;
+  }
+
+  public boolean isResourceNode()
+  {
+    return isResource || isResourceFolder;
+  }
+
+  public static DB4ORevision getDB4ORevision(InternalCDORevision revision)
+  {
+    CDOClassInfo classInfo = revision.getClassInfo();
+    EClass eClass = classInfo.getEClass();
+    String packageURI = eClass.getEPackage().getNsURI();
+    String className = eClass.getName();
+
+    CDOID revisionID = revision.getID();
+    if (revisionID.isTemporary())
+    {
+      throw new IllegalArgumentException("TEMPORARY CDOID: " + revisionID);
+    }
+
+    boolean isResource = revision.isResource();
+    boolean isResourceFolder = revision.isResourceFolder();
+
+    long id = CDOIDUtil.getLong(revisionID);
+    int version = revision.getVersion();
+    long timeStamp = revision.getTimeStamp();
+    long resourceID = CDOIDUtil.getLong(revision.getResourceID());
+    Object containerID = getDB4OID((CDOID)revision.getContainerID());
+    int containingFeatureID = revision.getContainingFeatureID();
+
+    EStructuralFeature[] features = classInfo.getAllPersistentFeatures();
+    List<Object> values = new ArrayList<Object>(features.length);
+    if (features.length > 0)
+    {
+      for (int i = 0; i < features.length; i++)
+      {
+        EStructuralFeature feature = features[i];
+        Object obj = revision.getValue(feature);
+
+        // We will process CDOList for EReferences to get rid of CDOIDs (we want to get only primitive types,
+        // otherwise the database will persist unwanted objects coming from Object-level relationships
+
+        // Multi-valued EAttributes (also kept in CDOList) will be saved as is
+        if (obj instanceof InternalCDOList && feature instanceof EReference)
+        {
+          InternalCDOList cdoList = (InternalCDOList)obj;
+          List<Object> list = new ArrayList<Object>();
+          for (Object listElement : cdoList)
+          {
+            if (!(listElement instanceof CDOID))
+            {
+              throw new IllegalStateException("CDOList should contain only CDOID instances but received " + listElement.getClass().getName() + " instead");
+            }
+
+            list.add(getDB4OID((CDOID)listElement));
+          }
+
+          values.add(i, list);
+        }
+        else if (listContainsInstancesOfClass(obj, CDOFeatureMapEntry.class)) // FeatureMap
+        {
+          values.add(i, DB4OFeatureMapEntry.getPrimitiveFeatureMapEntryList(obj));
+        }
+        else
+        {
+          // Prevent the explicit null-ref "NIL" from being serialized!
+          if (obj == CDORevisionData.NIL)
+          {
+            obj = new ExplicitNull();
+          }
+
+          values.add(i, obj);
+        }
+      }
+    }
+
+    return new DB4ORevision(packageURI, className, id, version, resourceID, containerID, containingFeatureID, values, timeStamp, isResource, isResourceFolder);
+  }
+
+  public static InternalCDORevision getCDORevision(IStore store, DB4ORevision primitiveRevision)
+  {
+    IRepository repository = store.getRepository();
+    CDORevisionFactory factory = ((InternalCDORevisionManager)repository.getRevisionManager()).getFactory();
+    CDOBranch branch = repository.getBranchManager().getMainBranch();
+
+    String nsURI = primitiveRevision.getPackageURI();
+    String className = primitiveRevision.getClassName();
+    EPackage ePackage = repository.getPackageRegistry().getEPackage(nsURI);
+    EClass eClass = (EClass)ePackage.getEClassifier(className);
+    InternalCDORevision revision = (InternalCDORevision)factory.createRevision(eClass);
+
+    revision.setID(getCDOID(primitiveRevision.getID()));
+    revision.setVersion(primitiveRevision.getVersion());
+    revision.setBranchPoint(branch.getPoint(primitiveRevision.getTimeStamp()));
+    revision.setRevised(primitiveRevision.getRevised());
+    revision.setResourceID(getCDOID(primitiveRevision.getResourceID()));
+    revision.setContainerID(getCDOID(primitiveRevision.getContainerID()));
+    revision.setContainingFeatureID(primitiveRevision.getContainingFeatureID());
+    EStructuralFeature[] features = revision.getClassInfo().getAllPersistentFeatures();
+
+    int i = 0;
+    for (Object value : primitiveRevision.getValues())
+    {
+      EStructuralFeature feature = features[i++];
+      if (feature instanceof EReference && value instanceof List<?>)
+      {
+        List<?> sourceList = (List<?>)value;
+        CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), CDORevision.UNCHUNKED);
+        for (int j = 0; j < sourceList.size(); j++)
+        {
+          list.set(j, getCDOID(sourceList.get(j)));
+        }
+
+        value = list;
+      }
+      else if (listContainsInstancesOfClass(value, DB4OFeatureMapEntry.class))
+      {
+        value = DB4OFeatureMapEntry.getCDOFeatureMapEntryList(eClass, value);
+      }
+
+      // Convert 'null' into the explicit null-ref "NIL" if appropriate
+      if (value instanceof ExplicitNull)
+      {
+        value = CDORevisionData.NIL;
+      }
+
+      revision.setValue(feature, value);
+    }
+
+    return revision;
+  }
+
+  public static Object getDB4OID(CDOID id)
+  {
+    if (id.isExternal())
+    {
+      return new String(((CDOIDExternal)id).getURI());
+    }
+
+    return CDOIDUtil.getLong(id);
+  }
+
+  public static CDOID getCDOID(Object id)
+  {
+    if (id == null)
+    {
+      return CDOID.NULL;
+    }
+
+    if (id instanceof String)
+    {
+      return CDOIDUtil.createExternal((String)id);
+    }
+
+    if (id instanceof CDOID)
+    {
+      return (CDOID)id;
+    }
+
+    return CDOIDUtil.createLong((Long)id);
+  }
+
+  public static boolean listContainsInstancesOfClass(Object obj, Class<?> clazz)
+  {
+    if (obj instanceof List)
+    {
+      List<?> list = (List<?>)obj;
+      for (Object potentialFeatureMap : list)
+      {
+        if (!clazz.isAssignableFrom(potentialFeatureMap.getClass()))
+        {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  private static final class DB4OFeatureMapEntry
+  {
+
+    private int featureID;
+
+    private Object valueID;
+
+    public DB4OFeatureMapEntry(int featureID, Object valueID)
+    {
+      setFeatureID(featureID);
+      setValueID(valueID);
+    }
+
+    private void setFeatureID(int featureID)
+    {
+      this.featureID = featureID;
+    }
+
+    public int getFeatureID()
+    {
+      return featureID;
+    }
+
+    private void setValueID(Object valueID)
+    {
+      this.valueID = valueID;
+    }
+
+    public Object getValueID()
+    {
+      return valueID;
+    }
+
+    public static List<DB4OFeatureMapEntry> getPrimitiveFeatureMapEntryList(Object obj)
+    {
+      InternalCDOList cdoList = (InternalCDOList)obj;
+      List<DB4OFeatureMapEntry> list = new ArrayList<DB4OFeatureMapEntry>();
+      for (Object listElement : cdoList)
+      {
+        if (listElement instanceof FeatureMap.Entry)
+        {
+          FeatureMap.Entry entry = (FeatureMap.Entry)listElement;
+          EStructuralFeature entryFeature = entry.getEStructuralFeature();
+          CDOID entryValue = (CDOID)entry.getValue();
+          DB4OFeatureMapEntry db4oEntry = new DB4OFeatureMapEntry(entryFeature.getFeatureID(), getDB4OID(entryValue));
+          list.add(db4oEntry);
+        }
+      }
+      return list;
+    }
+
+    public static CDOList getCDOFeatureMapEntryList(EClass eClass, Object value)
+    {
+      List<?> sourceList = (List<?>)value;
+      CDOList list = CDOListFactory.DEFAULT.createList(sourceList.size(), sourceList.size(), CDORevision.UNCHUNKED);
+      for (int j = 0; j < sourceList.size(); j++)
+      {
+        DB4OFeatureMapEntry mapEntry = (DB4OFeatureMapEntry)sourceList.get(j);
+        EStructuralFeature entryFeature = eClass.getEStructuralFeature(mapEntry.getFeatureID());
+        CDOID valueID = getCDOID(mapEntry.getValueID());
+        list.set(j, CDORevisionUtil.createFeatureMapEntry(entryFeature, valueID));
+      }
+      return list;
+    }
+  }
+
+  /**
+   * @author Caspar De Groot
+   */
+  private static final class ExplicitNull
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java
new file mode 100644
index 0000000..f7b37fa
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStore.java
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.server.db4o.IDB4OIdentifiableObject;
+import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
+import org.eclipse.emf.cdo.spi.server.LongIDStore;
+import org.eclipse.emf.cdo.spi.server.StoreAccessorPool;
+
+import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import com.db4o.Db4o;
+import com.db4o.ObjectContainer;
+import com.db4o.ObjectServer;
+import com.db4o.ObjectSet;
+import com.db4o.config.Configuration;
+import com.db4o.constraints.UniqueFieldValueConstraint;
+import com.db4o.query.Query;
+import com.db4o.reflect.jdk.JdkReflector;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OStore extends LongIDStore implements IDB4OStore
+{
+  private static final String ID_ATTRIBUTE = "id";
+
+  private transient String storeLocation;
+
+  private transient int port;
+
+  private transient ObjectServer server;
+
+  private transient Configuration serverConfiguration;
+
+  private ServerInfo serverInfo;
+
+  private DB4ODurableLockingManager durableLockingManager = new DB4ODurableLockingManager();
+
+  @ExcludeFromDump
+  private transient final StoreAccessorPool readerPool = new StoreAccessorPool(this, null);
+
+  @ExcludeFromDump
+  private transient final StoreAccessorPool writerPool = new StoreAccessorPool(this, null);
+
+  public DB4OStore(String storeLocation, int port)
+  {
+    super(IDB4OStore.TYPE, set(ChangeFormat.REVISION), set(RevisionTemporality.NONE, RevisionTemporality.AUDITING),
+        set(RevisionParallelism.NONE, RevisionParallelism.BRANCHING));
+
+    // setRevisionTemporality(RevisionTemporality.AUDITING);
+    // setRevisionParallelism(RevisionParallelism.BRANCHING);
+
+    this.storeLocation = storeLocation;
+    this.port = port;
+  }
+
+  public DB4OStore(String storeLocation, int port, Configuration serverConfiguration)
+  {
+    this(storeLocation, port);
+    this.serverConfiguration = serverConfiguration;
+  }
+
+  public String getStoreLocation()
+  {
+    return storeLocation;
+  }
+
+  public int getPort()
+  {
+    return port;
+  }
+
+  public long getCreationTime()
+  {
+    return getServerInfo().getCreationTime();
+  }
+
+  public void setCreationTime(long creationTime)
+  {
+    getServerInfo().setCreationTime(creationTime);
+  }
+
+  public boolean isFirstStart()
+  {
+    return getServerInfo().isFirstTime();
+  }
+
+  public DB4ODurableLockingManager getDurableLockingManager()
+  {
+    return durableLockingManager;
+  }
+
+  public Map<String, String> getPersistentProperties(Set<String> names)
+  {
+    if (names == null || names.isEmpty())
+    {
+      return new HashMap<String, String>(getServerInfo().getProperties());
+    }
+
+    Map<String, String> result = new HashMap<String, String>();
+    for (String key : names)
+    {
+      String value = getServerInfo().getProperties().get(key);
+      if (value != null)
+      {
+        result.put(key, value);
+      }
+    }
+
+    return result;
+  }
+
+  public void setPersistentProperties(Map<String, String> properties)
+  {
+    ServerInfo serverInfo = getServerInfo();
+    serverInfo.getProperties().putAll(properties);
+    commitServerInfo(null);
+  }
+
+  public void removePersistentProperties(Set<String> names)
+  {
+    ServerInfo serverInfo = getServerInfo();
+    Map<String, String> properties = serverInfo.getProperties();
+    for (String key : names)
+    {
+      properties.remove(key);
+    }
+
+    commitServerInfo(null);
+  }
+
+  // @Override
+  // public CDOID getNextCDOID(LongIDStoreAccessor accessor, CDORevision revision)
+  // {
+  // ObjectContainer objectContainer = ((DB4OStoreAccessor)accessor).getObjectContainer();
+  // ExtObjectContainer ext = objectContainer.ext();
+  // ext.store(revision);
+  //
+  // long id = ext.getID(revision);
+  // return CDOIDUtil.createLong(id);
+  // }
+
+  public ObjectContainer openClient()
+  {
+    return server.openClient();
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    super.doActivate();
+    initObjectServer();
+    initServerInfo();
+    setLastCommitTime(getServerInfo().getLastCommitTime());
+    setLastObjectID(fetchLastObjectID());
+    LifecycleUtil.activate(durableLockingManager);
+  }
+
+  private long fetchLastObjectID()
+  {
+    ObjectContainer container = openClient();
+
+    try
+    {
+      Query query = container.query();
+      query.constrain(DB4ORevision.class);
+      query.descend("id").orderDescending();
+      ObjectSet<?> results = query.execute();
+      int size = results.size();
+      if (size > 0)
+      {
+        DB4ORevision rev = (DB4ORevision)results.next();
+        return rev.getID();
+      }
+      return 0;
+    }
+    finally
+    {
+      closeClient(container);
+    }
+  }
+
+  @SuppressWarnings("deprecation")
+  protected void initObjectServer()
+  {
+    Configuration configuration = serverConfiguration;
+    if (configuration == null)
+    {
+      configuration = createServerConfiguration();
+    }
+    {
+      File file = new File(getStoreLocation());
+      if (!file.exists())
+      {
+        try
+        {
+          file.createNewFile();
+        }
+        catch (IOException ex)
+        {
+          throw new RuntimeException(ex);
+        }
+      }
+    }
+
+    server = Db4o.openServer(configuration, getStoreLocation(), getPort());
+  }
+
+  protected void tearDownObjectServer()
+  {
+    server.close();
+    server = null;
+  }
+
+  private ServerInfo getServerInfo()
+  {
+    if (serverInfo == null)
+    {
+      initServerInfo();
+    }
+
+    return serverInfo;
+  }
+
+  private void initServerInfo()
+  {
+    ObjectContainer container = openClient();
+
+    try
+    {
+      serverInfo = getServerInfoFromDatabase(container);
+
+      if (serverInfo == null)
+      {
+        serverInfo = new ServerInfo();
+        serverInfo.setFirstTime(true);
+        serverInfo.setCreationTime(System.currentTimeMillis());
+        commitServerInfo(container);
+      }
+      else
+      {
+        if (serverInfo.isFirstTime())
+        {
+          serverInfo.setFirstTime(false);
+          commitServerInfo(container);
+        }
+      }
+    }
+    finally
+    {
+      closeClient(container);
+    }
+  }
+
+  private ServerInfo getServerInfoFromDatabase(ObjectContainer container)
+  {
+    ObjectSet<ServerInfo> infos = container.query(ServerInfo.class);
+    if (infos.size() > 1)
+    {
+      throw new IllegalStateException("ServeInfo is stored in container more than once");
+    }
+
+    if (infos.size() == 1)
+    {
+      return infos.get(0);
+    }
+
+    return null;
+  }
+
+  protected void closeClient(ObjectContainer container)
+  {
+    container.close();
+  }
+
+  private void commitServerInfo(ObjectContainer container)
+  {
+    ObjectContainer usedContainer = container != null ? container : openClient();
+
+    try
+    {
+      ServerInfo storedInfo = getServerInfoFromDatabase(usedContainer);
+      if (storedInfo != null && storedInfo != serverInfo)
+      {
+        storedInfo.setCreationTime(serverInfo.getCreationTime());
+        storedInfo.setFirstTime(serverInfo.isFirstTime());
+        storedInfo.setLastCommitTime(serverInfo.getLastCommitTime());
+        storedInfo.setProperties(serverInfo.getProperties());
+        serverInfo = storedInfo;
+      }
+
+      usedContainer.store(serverInfo);
+      usedContainer.commit();
+    }
+    finally
+    {
+      if (usedContainer != container)
+      {
+        closeClient(usedContainer);
+      }
+    }
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    ObjectContainer container = openClient();
+
+    try
+    {
+      getServerInfo().setLastCommitTime(getLastCommitTime());
+      commitServerInfo(container);
+    }
+    finally
+    {
+      closeClient(container);
+    }
+
+    LifecycleUtil.deactivate(durableLockingManager);
+    tearDownObjectServer();
+
+    super.doDeactivate();
+  }
+
+  protected Configuration createServerConfiguration()
+  {
+    @SuppressWarnings("deprecation")
+    Configuration config = Db4o.newConfiguration();
+    config.reflectWith(new JdkReflector(getClass().getClassLoader()));
+
+    config.objectClass(DB4ORevision.class).objectField("id").indexed(true);
+    config.add(new UniqueFieldValueConstraint(DB4ORevision.class, "id"));
+
+    config.objectClass(DB4OPackageUnit.class).objectField("id").indexed(true);
+    config.add(new UniqueFieldValueConstraint(DB4OPackageUnit.class, "id"));
+
+    config.objectClass(DB4OIdentifiableObject.class).objectField("id").indexed(true);
+    config.add(new UniqueFieldValueConstraint(DB4OIdentifiableObject.class, "id"));
+
+    config.objectClass(DB4OCommitInfo.class).objectField("timeStamp").indexed(true);
+
+    config.objectClass(DB4OLockArea.class).objectField("id").indexed(true);
+    config.add(new UniqueFieldValueConstraint(DB4OLockArea.class, "id"));
+    config.objectClass(DB4OLockArea.class).cascadeOnUpdate(true);
+    config.objectClass(DB4OLockArea.class).cascadeOnDelete(true);
+
+    return config;
+  }
+
+  @Override
+  protected IStoreAccessor createReader(ISession session)
+  {
+    return new DB4OStoreAccessor(this, session);
+  }
+
+  @Override
+  protected IStoreAccessor createWriter(ITransaction transaction)
+  {
+    return new DB4OStoreAccessor(this, transaction);
+  }
+
+  @Override
+  protected StoreAccessorPool getReaderPool(ISession session, boolean forReleasing)
+  {
+    return readerPool;
+  }
+
+  @Override
+  protected StoreAccessorPool getWriterPool(IView view, boolean forReleasing)
+  {
+    return writerPool;
+  }
+
+  public static DB4ORevision getRevision(ObjectContainer container, CDOID id)
+  {
+    Query query = container.query();
+    query.constrain(DB4ORevision.class);
+    query.descend(ID_ATTRIBUTE).constrain(CDOIDUtil.getLong(id));
+
+    ObjectSet<?> revisions = query.execute();
+    if (revisions.isEmpty())
+    {
+      return null;
+    }
+
+    return (DB4ORevision)revisions.get(0);
+  }
+
+  public static <T> List<T> getElementsOfType(ObjectContainer container, Class<T> clazz)
+  {
+    ObjectSet<T> elements = container.query(clazz);
+    return elements;
+  }
+
+  public static IDB4OIdentifiableObject getIdentifiableObject(ObjectContainer container, String id)
+  {
+    Query query = container.query();
+    query.constrain(IDB4OIdentifiableObject.class);
+    query.descend(ID_ATTRIBUTE).constrain(id);
+
+    ObjectSet<?> revisions = query.execute();
+    if (revisions.isEmpty())
+    {
+      return null;
+    }
+
+    return (IDB4OIdentifiableObject)revisions.get(0);
+  }
+
+  public static void removeRevision(ObjectContainer container, CDOID id)
+  {
+    DB4ORevision revision = getRevision(container, id);
+    if (revision != null)
+    {
+      container.delete(revision);
+    }
+  }
+
+  /**
+   * Carries {@link IStore}-related information.
+   *
+   * @author Victor Roldan Betancort
+   */
+  private static final class ServerInfo
+  {
+    private boolean isFirstTime;
+
+    private long creationTime;
+
+    private long lastCommitTime;
+
+    private Map<String, String> properties = new HashMap<String, String>();
+
+    public boolean isFirstTime()
+    {
+      return isFirstTime;
+    }
+
+    public void setFirstTime(boolean isFirstTime)
+    {
+      this.isFirstTime = isFirstTime;
+    }
+
+    public void setCreationTime(long creationTime)
+    {
+      this.creationTime = creationTime;
+    }
+
+    public long getCreationTime()
+    {
+      return creationTime;
+    }
+
+    public void setProperties(Map<String, String> properties)
+    {
+      this.properties = properties;
+    }
+
+    public Map<String, String> getProperties()
+    {
+      return properties;
+    }
+
+    public long getLastCommitTime()
+    {
+      return lastCommitTime;
+    }
+
+    public void setLastCommitTime(long lastCommitTime)
+    {
+      this.lastCommitTime = lastCommitTime;
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java
new file mode 100644
index 0000000..7322ec3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreAccessor.java
@@ -0,0 +1,868 @@
+/*
+ * Copyright (c) 2010-2012, 2014-2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lob.CDOLobHandler;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionCacheAdder;
+import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
+import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
+import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.IQueryHandler;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.IStoreAccessor.DurableLocking;
+import org.eclipse.emf.cdo.server.IStoreAccessor.Raw;
+import org.eclipse.emf.cdo.server.IStoreChunkReader;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.db4o.IDB4OIdentifiableObject;
+import org.eclipse.emf.cdo.server.internal.db4o.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
+import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.spi.server.LongIDStoreAccessor;
+
+import org.eclipse.net4j.util.HexUtil;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.collection.Pair;
+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.om.monitor.Monitor;
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.db4o.ObjectContainer;
+import com.db4o.ObjectSet;
+import com.db4o.query.Predicate;
+import com.db4o.query.Query;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.CharArrayReader;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OStoreAccessor extends LongIDStoreAccessor implements Raw, DurableLocking
+{
+  private ObjectContainer objectContainer;
+
+  public DB4OStoreAccessor(DB4OStore store, ISession session)
+  {
+    super(store, session);
+  }
+
+  public DB4OStoreAccessor(DB4OStore store, ITransaction transaction)
+  {
+    super(store, transaction);
+  }
+
+  @Override
+  public DB4OStore getStore()
+  {
+    return (DB4OStore)super.getStore();
+  }
+
+  public ObjectContainer getObjectContainer()
+  {
+    return objectContainer;
+  }
+
+  public EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)
+  {
+    DB4OPackageUnit db4OPackageUnit = getPrimitivePackageUnitMap().get(packageUnit.getTopLevelPackageInfo().getPackageURI());
+    return EMFUtil.getAllPackages(db4OPackageUnit.getEPackage());
+  }
+
+  public void writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    monitor.begin(packageUnits.length);
+
+    try
+    {
+      DB4OStore store = getStore();
+      ObjectContainer objectContainer = getObjectContainer();
+
+      for (InternalCDOPackageUnit packageUnit : packageUnits)
+      {
+        DB4OPackageUnit primitivePackageUnit = DB4OPackageUnit.getPrimitivePackageUnit(store, packageUnit);
+        objectContainer.store(primitivePackageUnit);
+        monitor.worked(1);
+      }
+    }
+    catch (Exception ex)
+    {
+      OM.LOG.error(ex);
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  public Collection<InternalCDOPackageUnit> readPackageUnits()
+  {
+    Map<InternalCDOPackageUnit, DB4OPackageUnit> map = getPackageUnitMap();
+    return map.keySet();
+  }
+
+  private Map<InternalCDOPackageUnit, DB4OPackageUnit> getPackageUnitMap()
+  {
+    Map<InternalCDOPackageUnit, DB4OPackageUnit> map = new HashMap<InternalCDOPackageUnit, DB4OPackageUnit>();
+    Collection<DB4OPackageUnit> primitivePackageUnits = getObjectContainer().query(DB4OPackageUnit.class);
+
+    for (DB4OPackageUnit primitivePackageUnit : primitivePackageUnits)
+    {
+      InternalCDOPackageUnit packageUnit = DB4OPackageUnit.getPackageUnit(primitivePackageUnit);
+      map.put(packageUnit, primitivePackageUnit);
+    }
+    return map;
+  }
+
+  private Map<String, DB4OPackageUnit> getPrimitivePackageUnitMap()
+  {
+    Map<String, DB4OPackageUnit> map = new HashMap<String, DB4OPackageUnit>();
+    Collection<DB4OPackageUnit> primitivePackageUnits = getObjectContainer().query(DB4OPackageUnit.class);
+
+    for (DB4OPackageUnit primitivePackageUnit : primitivePackageUnits)
+    {
+      InternalCDOPackageUnit packageUnit = DB4OPackageUnit.getPackageUnit(primitivePackageUnit);
+      map.put(packageUnit.getTopLevelPackageInfo().getPackageURI(), primitivePackageUnit);
+    }
+    return map;
+  }
+
+  public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, CDORevisionCacheAdder cache)
+  {
+    DB4ORevision lastRevision = DB4OStore.getRevision(getObjectContainer(), id);
+    if (lastRevision == null)
+    {
+      // Revision does not exist. Return null to signal inexistent Revision
+      return null;
+    }
+
+    return DB4ORevision.getCDORevision(getStore(), lastRevision);
+  }
+
+  public void queryResources(QueryResourcesContext context)
+  {
+    final long folderID = CDOIDUtil.getLong(context.getFolderID());
+    final String name = context.getName();
+    final boolean exactMatch = context.exactMatch();
+    // RootResource may not be initialized, as there may be queries during IStore activation
+    CDOID rootResourceID = getStore().getRepository().getRootResourceID();
+    final Object rootResourceLongID = rootResourceID != null ? DB4ORevision.getDB4OID(getStore().getRepository().getRootResourceID()) : null;
+
+    ObjectSet<DB4ORevision> revisionObjectSet = getObjectContainer().query(new Predicate<DB4ORevision>()
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public boolean match(DB4ORevision revision)
+      {
+        if (!revision.isResourceNode())
+        {
+          return false;
+        }
+
+        if (ObjectUtil.equals(rootResourceLongID, revision.getID()))
+        {
+          // is Root resource
+          return false;
+        }
+
+        if (ObjectUtil.equals(revision.getContainerID(), folderID))
+        {
+          String candidateName = (String)revision.getValues().get(EresourcePackage.CDO_RESOURCE__NAME);
+          if (exactMatch)
+          {
+            if (ObjectUtil.equals(candidateName, name))
+            {
+              return true;
+            }
+          }
+          else
+          {
+            // provided name is prefix of the resource name
+            if (candidateName != null && candidateName.startsWith(name))
+            {
+              return true;
+            }
+          }
+        }
+
+        return false;
+      }
+    });
+
+    for (DB4ORevision revision : revisionObjectSet)
+    {
+      CDOID id = DB4ORevision.getCDOID(revision.getID());
+      if (!context.addResource(id))
+      {
+        // No more results allowed
+        break;
+      }
+    }
+
+  }
+
+  public IStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature)
+  {
+    // TODO: implement DB4OStoreAccessor.createChunkReader(revision, feature)
+    throw new UnsupportedOperationException();
+  }
+
+  public IQueryHandler getQueryHandler(CDOQueryInfo info)
+  {
+    return null;
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    objectContainer = getStore().openClient();
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    if (objectContainer != null)
+    {
+      objectContainer.close();
+      objectContainer = null;
+    }
+  }
+
+  @Override
+  protected void doPassivate() throws Exception
+  {
+    if (objectContainer != null)
+    {
+      objectContainer.rollback();
+    }
+  }
+
+  @Override
+  protected void doUnpassivate() throws Exception
+  {
+  }
+
+  @Override
+  protected void doRollback(CommitContext commitContext)
+  {
+    getObjectContainer().rollback();
+  }
+
+  public InternalCDORevision readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk, CDORevisionCacheAdder cache)
+  {
+    DB4ORevision revision = DB4OStore.getRevision(getObjectContainer(), id);
+    if (revision == null || revision.getVersion() != branchVersion.getVersion())
+    {
+      return null;
+    }
+
+    return DB4ORevision.getCDORevision(getStore(), revision);
+  }
+
+  public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler)
+  {
+    Query query = getObjectContainer().query();
+    query.constrain(DB4ORevision.class);
+    if (eClass != null)
+    {
+      query.descend(DB4ORevision.ATTRIBUTE_PACKAGE_NS_URI).constrain(eClass.getEPackage().getNsURI());
+      query.descend(DB4ORevision.ATTRIBUTE_CLASS_NAME).constrain(eClass.getName());
+    }
+
+    ObjectSet<?> revisions = query.execute();
+    if (revisions.isEmpty())
+    {
+      return;
+    }
+
+    for (Object revision : revisions.toArray())
+    {
+      CDORevision cdoRevision = DB4ORevision.getCDORevision(getStore(), (DB4ORevision)revision);
+      handler.handleRevision(cdoRevision);
+    }
+  }
+
+  public Set<CDOID> readChangeSet(OMMonitor monitor, CDOChangeSetSegment... segments)
+  {
+    // TODO: implement DB4OStoreAccessor.readChangeSet(segments)
+    throw new UnsupportedOperationException();
+  }
+
+  public void queryXRefs(final QueryXRefsContext context)
+  {
+    final int branchID = context.getBranch().getID();
+
+    for (final CDOID target : context.getTargetObjects().keySet())
+    {
+      for (final EClass eClass : context.getSourceCandidates().keySet())
+      {
+        final String eClassName = eClass.getName();
+        final String nsURI = eClass.getEPackage().getNsURI();
+        final List<EReference> eReferences = context.getSourceCandidates().get(eClass);
+        getObjectContainer().query(new Predicate<DB4ORevision>()
+        {
+          private static final long serialVersionUID = 1L;
+
+          private boolean moreResults = true;
+
+          @Override
+          public boolean match(DB4ORevision revision)
+          {
+            if (!moreResults)
+            {
+              return false;
+            }
+
+            if (!revision.getClassName().equals(eClassName))
+            {
+              return false;
+            }
+
+            if (!revision.getPackageURI().equals(nsURI))
+            {
+              return false;
+            }
+
+            if (!(revision.getBranchID() == branchID))
+            {
+              return false;
+            }
+
+            CDOID id = DB4ORevision.getCDOID(revision.getID());
+            for (EReference eReference : eReferences)
+            {
+              Object obj = revision.getValues().get(eReference.getFeatureID());
+              if (obj instanceof List)
+              {
+                List<?> list = (List<?>)obj;
+                int index = 0;
+                for (Object element : list)
+                {
+                  CDOID ref = DB4ORevision.getCDOID(element);
+                  if (ObjectUtil.equals(ref, target))
+                  {
+                    moreResults = context.addXRef(target, id, eReference, index);
+                  }
+
+                  ++index;
+                }
+              }
+              else
+              {
+                CDOID ref = DB4ORevision.getCDOID(obj);
+                if (ObjectUtil.equals(ref, target))
+                {
+                  moreResults = context.addXRef(target, id, eReference, 0);
+                }
+              }
+            }
+
+            return false;
+          }
+        });
+      }
+    }
+  }
+
+  public void queryLobs(List<byte[]> ids)
+  {
+    for (Iterator<byte[]> it = ids.iterator(); it.hasNext();)
+    {
+      byte[] id = it.next();
+      String key = HexUtil.bytesToHex(id);
+      if (DB4OStore.getIdentifiableObject(getObjectContainer(), key) == null)
+      {
+        it.remove();
+      }
+    }
+  }
+
+  public void handleLobs(long fromTime, long toTime, CDOLobHandler handler) throws IOException
+  {
+    for (DB4OBlob db4oBlob : DB4OStore.getElementsOfType(getObjectContainer(), DB4OBlob.class))
+    {
+      byte[] id = HexUtil.hexToBytes(db4oBlob.getId());
+      byte[] blob = db4oBlob.getValue();
+      ByteArrayInputStream in = new ByteArrayInputStream(blob);
+      OutputStream out = handler.handleBlob(id, blob.length);
+      if (out != null)
+      {
+        try
+        {
+          IOUtil.copyBinary(in, out, blob.length);
+        }
+        finally
+        {
+          IOUtil.close(out);
+        }
+      }
+    }
+    for (DB4OClob db4oClob : DB4OStore.getElementsOfType(getObjectContainer(), DB4OClob.class))
+    {
+      byte[] id = HexUtil.hexToBytes(db4oClob.getId());
+      char[] clob = db4oClob.getValue();
+      CharArrayReader in = new CharArrayReader(clob);
+      Writer out = handler.handleClob(id, clob.length);
+      if (out != null)
+      {
+        try
+        {
+          IOUtil.copyCharacter(in, out, clob.length);
+        }
+        finally
+        {
+          IOUtil.close(out);
+        }
+      }
+    }
+  }
+
+  public void loadLob(byte[] id, OutputStream out) throws IOException
+  {
+    String key = HexUtil.bytesToHex(id);
+    IDB4OIdentifiableObject identifiableObject = DB4OStore.getIdentifiableObject(getObjectContainer(), key);
+    if (identifiableObject == null)
+    {
+      throw new IOException("Lob not found: " + key);
+    }
+
+    if (identifiableObject instanceof DB4OBlob)
+    {
+      DB4OBlob blob = (DB4OBlob)identifiableObject;
+      byte[] byteArray = blob.getValue();
+      ByteArrayInputStream in = new ByteArrayInputStream(byteArray);
+      IOUtil.copyBinary(in, out, byteArray.length);
+    }
+    else
+    {
+      DB4OClob clob = (DB4OClob)identifiableObject;
+      char[] charArray = clob.getValue();
+      CharArrayReader in = new CharArrayReader(charArray);
+      IOUtil.copyCharacter(in, new OutputStreamWriter(out), charArray.length);
+    }
+  }
+
+  @Override
+  protected void writeBlob(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    IOUtil.copyBinary(inputStream, out, size);
+    writeObject(new DB4OBlob(HexUtil.bytesToHex(id), out.toByteArray()), new Monitor());
+  }
+
+  @Override
+  protected void writeClob(byte[] id, long size, Reader reader) throws IOException
+  {
+    CharArrayWriter out = new CharArrayWriter();
+    IOUtil.copyCharacter(reader, out, size);
+    writeObject(new DB4OClob(HexUtil.bytesToHex(id), out.toCharArray()), new Monitor());
+  }
+
+  public Pair<Integer, Long> createBranch(int branchID, BranchInfo branchInfo)
+  {
+    // TODO: implement DB4OStoreAccessor.createBranch(branchID, branchInfo)
+    throw new UnsupportedOperationException();
+  }
+
+  public BranchInfo loadBranch(int branchID)
+  {
+    // TODO: implement DB4OStoreAccessor.loadBranch(branchID)
+    throw new UnsupportedOperationException();
+  }
+
+  public SubBranchInfo[] loadSubBranches(int branchID)
+  {
+    // TODO: implement DB4OStoreAccessor.loadSubBranches(branchID)
+    throw new UnsupportedOperationException();
+  }
+
+  public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+  {
+    // TODO: implement DB4OStoreAccessor.loadBranches(startID, endID, branchHandler)
+    throw new UnsupportedOperationException();
+  }
+
+  public void loadCommitInfos(final CDOBranch branch, final long startTime, final long endTime, CDOCommitInfoHandler handler)
+  {
+    if (endTime < CDOBranchPoint.UNSPECIFIED_DATE)
+    {
+      throw new IllegalArgumentException("Counting not supported");
+    }
+
+    ObjectSet<DB4OCommitInfo> resultSet = getObjectContainer().query(new Predicate<DB4OCommitInfo>()
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public boolean match(DB4OCommitInfo info)
+      {
+        if (startTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() < startTime)
+        {
+          return false;
+        }
+
+        if (endTime != CDOBranchPoint.UNSPECIFIED_DATE && info.getTimeStamp() > endTime)
+        {
+          return false;
+        }
+
+        if (branch != null && !(info.getBranchID() == branch.getID()))
+        {
+          return false;
+        }
+
+        return true;
+      }
+    });
+
+    InternalRepository repository = getStore().getRepository();
+    InternalCDOCommitInfoManager commitInfoManager = repository.getCommitInfoManager();
+    InternalCDOBranchManager branchManager = repository.getBranchManager();
+
+    // Although not specified in the API, the test suite
+    // suggests CommitInfos should be returned ordered by timeStamp
+    // TODO Specify this in the API!
+
+    List<DB4OCommitInfo> infos = new ArrayList<DB4OCommitInfo>(resultSet);
+    Collections.sort(infos, new Comparator<DB4OCommitInfo>()
+    {
+      public int compare(DB4OCommitInfo arg0, DB4OCommitInfo arg1)
+      {
+        return CDOCommonUtil.compareTimeStamps(arg0.getTimeStamp(), arg1.getTimeStamp());
+      }
+    });
+
+    for (DB4OCommitInfo info : infos)
+    {
+      info.handle(branchManager, commitInfoManager, handler);
+    }
+  }
+
+  @Override
+  protected void doCommit(OMMonitor monitor)
+  {
+    monitor.begin();
+    Async async = monitor.forkAsync();
+
+    try
+    {
+      long start = System.currentTimeMillis();
+      getObjectContainer().commit();
+      long end = System.currentTimeMillis();
+      OM.LOG.debug("Commit took -> " + (end - start) + " milliseconds");
+    }
+    catch (Exception e)
+    {
+      OM.LOG.error(e);
+    }
+    finally
+    {
+      async.stop();
+      monitor.done();
+    }
+  }
+
+  @SuppressWarnings("deprecation")
+  @Override
+  protected void writeCommitInfo(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    DB4OCommitInfo commitInfo = new DB4OCommitInfo(branch.getID(), timeStamp, previousTimeStamp, userID, comment);
+    writeObject(commitInfo, monitor);
+  }
+
+  @Override
+  protected void writeRevisions(InternalCDORevision[] revisions, CDOBranch branch, OMMonitor monitor)
+  {
+    monitor.begin(revisions.length);
+
+    try
+    {
+      long start = System.currentTimeMillis();
+      for (InternalCDORevision revision : revisions)
+      {
+        writeRevision(revision, monitor.fork());
+      }
+      long end = System.currentTimeMillis();
+      OM.LOG.debug("Storage of " + revisions.length + " revisions took: " + (end - start) + " milliseconds");
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  protected void writeRevision(InternalCDORevision revision, OMMonitor monitor)
+  {
+    Async async = null;
+    monitor.begin(10);
+
+    try
+    {
+      try
+      {
+        async = monitor.forkAsync();
+        if (revision.isResourceNode())
+        {
+          checkDuplicateResources(revision);
+        }
+      }
+      finally
+      {
+        if (async != null)
+        {
+          async.stop();
+        }
+      }
+
+      // TODO removal of previous version implies query, this should be optimized
+
+      long start = System.currentTimeMillis();
+      CDOID id = revision.getID();
+      DB4OStore.removeRevision(getObjectContainer(), id);
+      DB4ORevision primitiveRevision = DB4ORevision.getDB4ORevision(revision);
+      writeObject(primitiveRevision, monitor);
+      long end = System.currentTimeMillis();
+      OM.LOG.debug("Writing revision " + id + " took: " + (end - start) + " milliseconds");
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  protected void writeObject(Object object, OMMonitor monitor)
+  {
+    monitor.begin();
+    Async async = monitor.forkAsync();
+
+    try
+    {
+      getObjectContainer().store(object);
+    }
+    catch (Throwable t)
+    {
+      OM.LOG.error(t);
+    }
+    finally
+    {
+      async.stop();
+      monitor.done();
+    }
+  }
+
+  @Override
+  protected void writeRevisionDeltas(InternalCDORevisionDelta[] revisionDeltas, CDOBranch branch, long created, OMMonitor monitor)
+  {
+    for (InternalCDORevisionDelta revisionDelta : revisionDeltas)
+    {
+      writeRevisionDelta(revisionDelta, branch, created);
+    }
+  }
+
+  protected void writeRevisionDelta(InternalCDORevisionDelta revisionDelta, CDOBranch branch, long created)
+  {
+    CDOID id = revisionDelta.getID();
+    InternalCDORevision revision = DB4ORevision.getCDORevision(getStore(), DB4OStore.getRevision(getObjectContainer(), id));
+    InternalCDORevision newRevision = revision.copy();
+    newRevision.adjustForCommit(branch, created);
+
+    revisionDelta.applyTo(newRevision);
+    writeRevision(newRevision, new Monitor());
+  }
+
+  @Override
+  protected void detachObjects(CDOID[] detachedObjects, CDOBranch branch, long timeStamp, OMMonitor monitor)
+  {
+    monitor.begin(detachedObjects.length);
+
+    try
+    {
+      for (CDOID id : detachedObjects)
+      {
+        DB4OStore.removeRevision(getObjectContainer(), id);
+        monitor.worked();
+      }
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  protected void checkDuplicateResources(CDORevision revision) throws IllegalStateException
+  {
+    final long folderID = CDOIDUtil.getLong((CDOID)revision.data().getContainerID());
+    final long revisionID = CDOIDUtil.getLong(revision.getID());
+    final String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
+
+    ObjectSet<DB4ORevision> resultSet = getObjectContainer().query(new Predicate<DB4ORevision>()
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public boolean match(DB4ORevision revision)
+      {
+        if (revision.isResourceNode() && ObjectUtil.equals(revision.getContainerID(), folderID))
+        {
+          String candidateName = (String)revision.getValues().get(EresourcePackage.CDO_RESOURCE__NAME);
+          if (StringUtil.compare(name, candidateName) == 0)
+          {
+            if (!ObjectUtil.equals(revision.getID(), revisionID))
+            {
+              return true;
+            }
+          }
+        }
+
+        return false;
+      }
+    });
+
+    if (!resultSet.isEmpty())
+    {
+      throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+  }
+
+  public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) throws IOException
+  {
+    // TODO: Implement DB4OStoreAccessor.rawExport(CDODataOutput, int, int, long, long)
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime, OMMonitor monitor) throws IOException
+  {
+    // TODO: Implement DB4OStoreAccessor.rawImport(CDODataInput, int, int, long, long, OMMonitor)
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    writePackageUnits(packageUnits, monitor);
+  }
+
+  public void rawStore(InternalCDORevision revision, OMMonitor monitor)
+  {
+    writeRevision(revision, monitor);
+  }
+
+  public void rawStore(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    // TODO: Implement DB4OStoreAccessor.rawExport(CDODataOutput, int, int, long, long)
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(byte[] id, long size, Reader reader) throws IOException
+  {
+    // TODO: Implement DB4OStoreAccessor.rawStore(byte[], long, Reader)
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    writeCommitInfo(branch, timeStamp, previousTimeStamp, userID, comment, monitor);
+  }
+
+  public void rawDelete(CDOID id, int version, CDOBranch branch, EClass eClass, OMMonitor monitor)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawCommit(double commitWork, OMMonitor monitor)
+  {
+    doCommit(monitor);
+  }
+
+  public LockArea createLockArea(String userID, CDOBranchPoint branchPoint, boolean readOnly, Map<CDOID, LockGrade> locks)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    return manager.createLockArea(this, userID, branchPoint, readOnly, locks);
+  }
+
+  public LockArea getLockArea(String durableLockingID) throws LockAreaNotFoundException
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    return manager.getLockArea(this, durableLockingID);
+  }
+
+  public void getLockAreas(String userIDPrefix, Handler handler)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    manager.getLockAreas(this, userIDPrefix, handler);
+  }
+
+  public void deleteLockArea(String durableLockingID)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    manager.deleteLockArea(this, durableLockingID);
+  }
+
+  public void lock(String durableLockingID, LockType type, Collection<? extends Object> objectsToLock)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    manager.lock(this, durableLockingID, type, objectsToLock);
+  }
+
+  public void unlock(String durableLockingID, LockType type, Collection<? extends Object> objectsToUnlock)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    manager.unlock(this, durableLockingID, type, objectsToUnlock);
+  }
+
+  public void unlock(String durableLockingID)
+  {
+    DB4ODurableLockingManager manager = getStore().getDurableLockingManager();
+    manager.unlock(this, durableLockingID);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java
new file mode 100644
index 0000000..9e8d134
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OStoreFactory.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.IStoreFactory;
+import org.eclipse.emf.cdo.server.db4o.IDB4OStore;
+import org.eclipse.emf.cdo.server.internal.db4o.bundle.OM;
+import org.eclipse.emf.cdo.spi.server.RepositoryConfigurator;
+
+import org.w3c.dom.Element;
+
+import java.util.Map;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OStoreFactory implements IStoreFactory
+{
+  private static final String PROPERTY_PORT = "port";
+
+  private static final String PROPERTY_PATH = "path";
+
+  public DB4OStoreFactory()
+  {
+  }
+
+  public String getStoreType()
+  {
+    return IDB4OStore.TYPE;
+  }
+
+  public IStore createStore(String repositoryName, Map<String, String> repositoryProperties, Element storeConfig)
+  {
+    try
+    {
+      Map<String, String> properties = RepositoryConfigurator.getProperties(storeConfig, 1);
+      String dataFilePath = properties.get(PROPERTY_PATH);
+      String portString = properties.get(PROPERTY_PORT);
+      int port = portString != null ? Integer.parseInt(portString) : 1677;
+      return new DB4OStore(dataFilePath, port);
+    }
+    catch (Exception ex)
+    {
+      OM.LOG.error(ex);
+    }
+
+    return null;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java
new file mode 100644
index 0000000..0a5c812
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4OWrappedValue.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.db4o;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OWrappedValue<TYPE> extends DB4OIdentifiableObject
+{
+  private TYPE value;
+
+  public DB4OWrappedValue(String id, TYPE value)
+  {
+    setId(id);
+    setValue(value);
+  }
+
+  public TYPE getValue()
+  {
+    return value;
+  }
+
+  private void setValue(TYPE value)
+  {
+    this.value = value;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java
new file mode 100644
index 0000000..8ff465f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/bundle/OM.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.internal.db4o.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Victor Roldan Betancort
+ */
+public abstract class OM
+{
+  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.db4o"; //$NON-NLS-1$
+
+  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+  public static final OMLogger LOG = BUNDLE.logger();
+
+  /**
+   * @author Victor Roldan Betancort
+   */
+  public static final class Activator extends OSGiActivator
+  {
+    public Activator()
+    {
+      super(BUNDLE);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/.project b/org.eclipse.emf.cdo.server.hibernate-feature/.project
new file mode 100644
index 0000000..91ac801
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/.project
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.hibernate-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..55810a4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:36:40 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..d573634
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 10:06:10 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..3556bac
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 10:06:10 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/build.properties b/org.eclipse.emf.cdo.server.hibernate-feature/build.properties
new file mode 100644
index 0000000..edbf61b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/build.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2008-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = pom.xml
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/feature.properties b/org.eclipse.emf.cdo.server.hibernate-feature/feature.properties
new file mode 100644
index 0000000..a0fa19a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/feature.properties
@@ -0,0 +1,8 @@
+# Copyright (c) 2008-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+
+featureName = CDO Model Repository Server Hibernate
+description = Contains the HibernateStore and Teneo integration plugins. Ensure that Hibernate is already installed! Visit http://www.elver.org/eclipse/2.1.0/update for a p2 repository that contains Hibernate.
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/feature.xml b/org.eclipse.emf.cdo.server.hibernate-feature/feature.xml
new file mode 100644
index 0000000..c115992
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/feature.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	Copyright (c) 2008-2013, 2015-2017 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Eike Stepper - initial API and implementation
+-->
+<feature
+      id="org.eclipse.emf.cdo.server.hibernate"
+      label="%featureName"
+      version="4.2.500.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.emf.cdo.license"
+      license-feature-version="0.0.0">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.emf.cdo.server.hibernate"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.server.hibernate.teneo"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.emf.cdo.server.hibernate-feature/pom.xml b/org.eclipse.emf.cdo.server.hibernate-feature/pom.xml
new file mode 100644
index 0000000..5f6fa0d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate-feature/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.features</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/features</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo.features</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.hibernate</artifactId>
+  <version>4.2.500-SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.classpath b/org.eclipse.emf.cdo.server.hibernate.teneo/.classpath
new file mode 100644
index 0000000..c05dc0b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="org/eclipse/emf/teneo/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/emf/teneo/annotations/pamodel/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/emf/teneo/hibernate/mapper/**"/>
+			<accessrule kind="accessible" pattern="org/eclipse/emf/teneo/simpledom/**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.project b/org.eclipse.emf.cdo.server.hibernate.teneo/.project
new file mode 100644
index 0000000..b469391
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.hibernate.teneo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..798fa9c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:59:26 CEST 2011
+eclipse.preferences.version=1
+
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0ce9f5f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,382 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..222aec0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.api.tools.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..0c17d59
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.core.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..e03b596
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Mon Mar 03 10:59:33 CET 2008
+eclipse.preferences.version=1
+resolve.requirebundle=false
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..c6b96bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.server.hibernate.teneo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6baf786
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.emf.cdo.server.hibernate.teneo;singleton:=true
+Bundle-Version: 4.2.400.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-BuddyPolicy: registered
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.common;bundle-version="[4.0.0,5.0.0)"
+Import-Package: org.eclipse.emf.cdo.security;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.hibernate;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.internal.hibernate;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.teneo;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.mapper;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pannotation;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.xml;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.extension;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.annotations;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.hbannotation;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.mapper;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.simpledom;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.util;version="[2.0.1,3.0.0)"
+Export-Package: org.eclipse.emf.cdo.server.hibernate.internal.teneo;version="4.2.400";x-friends:="org.eclipse.emf.cdo.tests.hibernate",
+ org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle;version="4.2.400";x-friends:="org.eclipse.emf.cdo.tests.hibernate",
+ org.eclipse.emf.cdo.server.hibernate.teneo;version="4.2.400"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle.OM$Activator
+Automatic-Module-Name: org.eclipse.emf.cdo.server.hibernate.teneo
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/about.html b/org.eclipse.emf.cdo.server.hibernate.teneo/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.class
new file mode 100644
index 0000000..81a890e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.class
new file mode 100644
index 0000000..a651c03
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.class
new file mode 100644
index 0000000..6ee065c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM$Activator.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM$Activator.class
new file mode 100644
index 0000000..e18c30a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM$Activator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.class
new file mode 100644
index 0000000..d42b294
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.class
new file mode 100644
index 0000000..bdbbb73
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.class
new file mode 100644
index 0000000..577c1ff
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.class
new file mode 100644
index 0000000..4127887
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.class
new file mode 100644
index 0000000..b21929f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.class
new file mode 100644
index 0000000..c0e1ccb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.class
new file mode 100644
index 0000000..760397b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.class
new file mode 100644
index 0000000..930553b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.class
new file mode 100644
index 0000000..838a509
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.class
new file mode 100644
index 0000000..79f6aad
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.class
new file mode 100644
index 0000000..7b05f48
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.class b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.class
new file mode 100644
index 0000000..574d83c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/bin/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/build.properties b/org.eclipse.emf.cdo.server.hibernate.teneo/build.properties
new file mode 100644
index 0000000..9ffe3d0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/build.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2008-2010, 2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
+src.includes = about.html,\
+               pom.xml
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.properties b/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.properties
new file mode 100644
index 0000000..85712da
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2008-2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Server Hibernate (Teneo Integration)
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.xml b/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.xml
new file mode 100644
index 0000000..4d25070
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+	Copyright (c) 2008, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+	
+	Contributors:
+	  Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+   <extension
+         point="org.eclipse.emf.cdo.server.hibernate.mappingProviderFactories">
+      <mappingProviderFactory
+            class="org.eclipse.emf.cdo.server.hibernate.internal.teneo.TeneoHibernateMappingProviderFactory"
+            type="teneo"/>
+   </extension>
+
+   <extension point="org.eclipse.net4j.util.factories">
+      <factory
+            productGroup="org.eclipse.emf.cdo.server.commands"
+            type="exporthbm"
+            class="org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle.ExportHbmCommand"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/pom.xml b/org.eclipse.emf.cdo.server.hibernate.teneo/pom.xml
new file mode 100644
index 0000000..08e8991
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.hibernate.teneo</artifactId>
+  <version>4.2.400-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java
new file mode 100644
index 0000000..3ecf2dd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProvider.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.internal.teneo;
+
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.etypes.EtypesPackage;
+import org.eclipse.emf.cdo.security.SecurityPackage;
+import org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle.OM;
+import org.eclipse.emf.cdo.server.hibernate.teneo.CDOMappingGenerator;
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateConstants;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateMappingProvider;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBlobUserType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOClobUserType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+import org.eclipse.emf.teneo.Constants;
+import org.eclipse.emf.teneo.PackageRegistryProvider;
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Uses the ecore string in the ePackages of the store to generate a mapping.
+ *
+ * @author Martin Taal
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public class TeneoHibernateMappingProvider extends HibernateMappingProvider
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, TeneoHibernateMappingProvider.class);
+
+  private Map<String, String> extensions = new HashMap<String, String>();
+
+  private Properties mappingProviderProperties = new Properties();
+
+  public TeneoHibernateMappingProvider()
+  {
+  }
+
+  public void putExtension(String extensionClassName, String extendingClassName)
+  {
+    extensions.put(extensionClassName, extendingClassName);
+  }
+
+  @Override
+  public HibernateStore getHibernateStore()
+  {
+    return (HibernateStore)super.getHibernateStore();
+  }
+
+  public String getMapping()
+  {
+    final String mapping = generateMapping();
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Generated hibernate mapping:"); //$NON-NLS-1$
+      TRACER.trace(mapping);
+    }
+
+    return mapping;
+  }
+
+  // the passed modelObjects collection is defined as a collection of Objects
+  // to prevent binary dependency on emf.
+  public String generateMapping()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Generating Hibernate Mapping"); //$NON-NLS-1$
+    }
+
+    final Properties storeProperties = getHibernateStore().getProperties();
+
+    // merge the store properties with the mapping provider properties
+    // the mapping provider props take precedence
+    // this also prevents overwriting the original properties
+    final Properties properties = new Properties();
+
+    properties.putAll(storeProperties);
+    properties.putAll(mappingProviderProperties);
+
+    PackageRegistryProvider.getInstance().setThreadPackageRegistry(getHibernateStore().getRepository().getPackageRegistry());
+
+    // translate the list of EPackages to an array
+    boolean hasXMLTypePackage = false;
+    final List<EPackage> epacks = getHibernateStore().getModelEPackages();
+    final ListIterator<EPackage> iterator = epacks.listIterator();
+    while (iterator.hasNext())
+    {
+      final EPackage epack = iterator.next();
+      if (epack == XMLTypePackage.eINSTANCE)
+      {
+        hasXMLTypePackage = true;
+      }
+      if (SecurityPackage.eNS_URI.equals(epack.getNsURI()))
+      {
+        setEntityOnSecurityModel(epack);
+      }
+    }
+
+    if (hasXMLTypePackage)
+    {
+      addTypeAnnotationToXMLTypes();
+    }
+
+    addUniqueConstraintAnnotation();
+
+    final EPackage[] ePackageArray = epacks.toArray(new EPackage[epacks.size()]);
+    // remove the persistence xml if no epackages as this won't work without
+    // epackages
+    if (ePackageArray.length == 0 && properties.getProperty(PersistenceOptions.PERSISTENCE_XML) != null)
+    {
+      properties.remove(PersistenceOptions.PERSISTENCE_XML);
+    }
+
+    properties.setProperty(PersistenceOptions.FEATUREMAP_AS_COMPONENT, "true");
+
+    // add some annotations to the CDO model so that the mapping gets generated correctly
+    addTransientAnnotationToEClass(EtypesPackage.eINSTANCE.getModelElement());
+    addTransientAnnotationToEClass(EtypesPackage.eINSTANCE.getAnnotation());
+    addTypeAnnotationToEDataType(EtypesPackage.eINSTANCE.getBlob(), CDOBlobUserType.class.getName());
+    addTypeAnnotationToEDataType(EtypesPackage.eINSTANCE.getClob(), CDOClobUserType.class.getName());
+    addTypeAnnotationToAuditingResourcePackage();
+
+    final CDOMappingGenerator mappingGenerator = new CDOMappingGenerator();
+    mappingGenerator.getExtensions().putAll(extensions);
+    String hbm = mappingGenerator.generateMapping(ePackageArray, properties);
+    // to solve an issue with older versions of teneo
+    hbm = hbm.replaceAll("_cont", "cont"); //$NON-NLS-1$ //$NON-NLS-2$
+
+    // System.err.println(hbm);
+
+    return hbm;
+  }
+
+  private void setEntityOnSecurityModel(EPackage ePackage)
+  {
+    for (EClassifier eClassifier : ePackage.getEClassifiers())
+    {
+      if (eClassifier instanceof EClass)
+      {
+        final EClass eClass = (EClass)eClassifier;
+        if (eClass.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null)
+        {
+          return;
+        }
+        final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+        eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA);
+        eAnnotation.getDetails().put("value", "@Entity(name=\"CdoSecurity" + eClass.getName() + "\")");
+        eClass.getEAnnotations().add(eAnnotation);
+      }
+    }
+  }
+
+  private void addTypeAnnotationToXMLTypes()
+  {
+    for (EClassifier eClassifier : XMLTypePackage.eINSTANCE.getEClassifiers())
+    {
+      if (eClassifier instanceof EDataType)
+      {
+        final EDataType eDataType = (EDataType)eClassifier;
+        if (eDataType.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null)
+        {
+          continue;
+        }
+
+        final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+        eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA);
+        final String typeAnnotation = "@Type(type=\"org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.XMLUserType$" + eDataType.getName() + "\")";
+        eAnnotation.getDetails().put("value", typeAnnotation);
+        eDataType.getEAnnotations().add(eAnnotation);
+      }
+    }
+  }
+
+  private void addTypeAnnotationToEDataType(EDataType eDataType, String type)
+  {
+    if (eDataType.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null)
+    {
+      return;
+    }
+
+    {
+      final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+      eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA);
+      final String typeAnnotation = "@Type(type=\"" + type + "\")";
+      eAnnotation.getDetails().put("value", typeAnnotation);
+      eDataType.getEAnnotations().add(eAnnotation);
+    }
+    {
+      final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+      eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING);
+      final String typeAnnotation = "@Type(type=\"" + type + "\")";
+      eAnnotation.getDetails().put("value", typeAnnotation);
+      eDataType.getEAnnotations().add(eAnnotation);
+    }
+  }
+
+  private void addTypeAnnotationToAuditingResourcePackage()
+  {
+    addTypeAnnotationToAuditingResourceContents(EresourcePackage.eINSTANCE.getCDOResource_Contents());
+    addTypeAnnotationToAuditingResourceContents(EresourcePackage.eINSTANCE.getCDOResourceFolder_Nodes());
+  }
+
+  private void addTypeAnnotationToAuditingResourceContents(EStructuralFeature eFeature)
+  {
+    EAnnotation eAnnotation = eFeature.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING);
+    if (eAnnotation != null)
+    {
+      return;
+    }
+    eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING);
+    final String typeAnnotation = "@Type(type=\"" + CDOIDUserType.class.getName() + "\")";
+    eAnnotation.getDetails().put("value", typeAnnotation);
+    eFeature.getEAnnotations().add(eAnnotation);
+  }
+
+  private void addTransientAnnotationToEClass(EClass eClass)
+  {
+    if (eClass.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null)
+    {
+      return;
+    }
+
+    final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA);
+    final String transientAnnotation = "@Transient";
+    eAnnotation.getDetails().put("value", transientAnnotation);
+    eClass.getEAnnotations().add(eAnnotation);
+  }
+
+  // see the CDOEntityMapper, there an explicit unique-key is added to
+  // a column also
+  private void addUniqueConstraintAnnotation()
+  {
+    final EClass eClass = EresourcePackage.eINSTANCE.getCDOResourceNode();
+    // already been here
+    if (eClass.getEAnnotation("teneo.jpa") != null) //$NON-NLS-1$
+    {
+      return;
+    }
+
+    final EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    annotation.setSource("teneo.jpa"); //$NON-NLS-1$
+    final String tableAnnotation = "@Table(uniqueConstraints={@UniqueConstraint(columnNames={\"" //$NON-NLS-1$
+        + CDOHibernateConstants.CONTAINER_PROPERTY_COLUMN + "\", \"" //$NON-NLS-1$
+        + EresourcePackage.eINSTANCE.getCDOResourceNode_Name().getName() + "\"})})"; //$NON-NLS-1$
+    annotation.getDetails().put("value", tableAnnotation); //$NON-NLS-1$
+    eClass.getEAnnotations().add(annotation);
+  }
+
+  public Properties getMappingProviderProperties()
+  {
+    return mappingProviderProperties;
+  }
+
+  public void setMappingProviderProperties(Properties mappingProviderProperties)
+  {
+    this.mappingProviderProperties = mappingProviderProperties;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.java
new file mode 100644
index 0000000..5a8e461
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/TeneoHibernateMappingProviderFactory.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.internal.teneo;
+
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.util.Properties;
+
+/**
+ * Reads the hibernate mapping file from one or more resource locations and adds them to the configuration.
+ *
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public class TeneoHibernateMappingProviderFactory implements IHibernateMappingProvider.Factory
+{
+  public static final String TYPE = "teneo"; //$NON-NLS-1$
+
+  private static final String PROPERTY_TAG = "property"; //$NON-NLS-1$
+
+  private static final String EXTENSION_TAG = "extension"; //$NON-NLS-1$
+
+  private static final String NAME_ATTR = "name"; //$NON-NLS-1$
+
+  private static final String VALUE_ATTR = "value"; //$NON-NLS-1$
+
+  public TeneoHibernateMappingProviderFactory()
+  {
+  }
+
+  public String getType()
+  {
+    return TYPE;
+  }
+
+  public TeneoHibernateMappingProvider create(Element config)
+  {
+
+    final Properties properties = new Properties();
+    final NodeList propertyNodes = config.getElementsByTagName(PROPERTY_TAG);
+    for (int i = 0; i < propertyNodes.getLength(); i++)
+    {
+      final Element propertyElement = (Element)propertyNodes.item(i);
+      properties.setProperty(propertyElement.getAttribute(NAME_ATTR), propertyElement.getAttribute(VALUE_ATTR));
+    }
+
+    final TeneoHibernateMappingProvider mappingProvider = new TeneoHibernateMappingProvider();
+    mappingProvider.setMappingProviderProperties(properties);
+    collectExtensions(config, mappingProvider);
+    return mappingProvider;
+  }
+
+  private void collectExtensions(Element config, TeneoHibernateMappingProvider mappingProvider)
+  {
+    final NodeList extensionNodes = config.getElementsByTagName(EXTENSION_TAG);
+    for (int i = 0; i < extensionNodes.getLength(); i++)
+    {
+      final Element extensionElement = (Element)extensionNodes.item(i);
+      final String nameAttrValue = extensionElement.getAttribute(NAME_ATTR);
+      final String valueAttrValue = extensionElement.getAttribute(VALUE_ATTR);
+      if (nameAttrValue == null || valueAttrValue == null)
+      {
+        throw new IllegalArgumentException("Extension element has incorrect format, both the name and value attribute should be present"); //$NON-NLS-1$
+      }
+
+      mappingProvider.putExtension(nameAttrValue, valueAttrValue);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.java
new file mode 100644
index 0000000..b6ecc36
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/ExportHbmCommand.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.spi.server.CDOCommand;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+
+import org.eclipse.net4j.util.io.IOUtil;
+
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+
+/**
+ * @author Eike Stepper
+ */
+public class ExportHbmCommand extends CDOCommand.WithRepository
+{
+  public ExportHbmCommand()
+  {
+    super("exporthbm", "export generated hibernate mapping to a file", parameter("export-file"));
+  }
+
+  @Override
+  public void execute(InternalRepository repository, String[] args) throws Exception
+  {
+    String exportFile = args[0];
+    OutputStream out = null;
+
+    try
+    {
+      out = new FileOutputStream(exportFile);
+
+      final HibernateStore store = (HibernateStore)repository.getStore();
+      final String mapping = store.getMappingXml();
+
+      out.write(mapping.getBytes());
+      println("Hibernate mapping exported");
+    }
+    finally
+    {
+      IOUtil.close(out);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.java
new file mode 100644
index 0000000..a80737d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/internal/teneo/bundle/OM.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2008, 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Erdal Karaca - added HibernateCommandProvider
+ */
+package org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.hibernate.teneo"; //$NON-NLS-1$
+
+  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+  public static final OMLogger LOG = BUNDLE.logger();
+
+  /**
+   * @author Eike Stepper
+   */
+  public static final class Activator extends OSGiActivator
+  {
+    public Activator()
+    {
+      super(BUNDLE);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.java
new file mode 100644
index 0000000..3723123
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOBasicMapper.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEAttribute;
+import org.eclipse.emf.teneo.hibernate.mapper.BasicMapper;
+import org.eclipse.emf.teneo.hibernate.mapper.HbMapperConstants;
+import org.eclipse.emf.teneo.simpledom.Element;
+
+/**
+ * Extends enum mapping with parameters for epackage and eclass. This will be solved in the next build of Teneo.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 3.0
+ */
+public class CDOBasicMapper extends BasicMapper
+{
+  public CDOBasicMapper()
+  {
+  }
+
+  @Override
+  protected void setType(PAnnotatedEAttribute paAttribute, Element propElement)
+  {
+    super.setType(paAttribute, propElement);
+    if (paAttribute.getEnumerated() != null)
+    {
+      final Element typeElement = propElement.element("type"); //$NON-NLS-1$
+      for (Element element : typeElement.getChildren())
+      {
+        if (element.getName().equals(HbMapperConstants.ECLASSIFIER_PARAM))
+        {
+          // it has been done already
+          return;
+        }
+      }
+
+      // add the type elements
+      final EAttribute eAttribute = paAttribute.getModelEAttribute();
+      typeElement.addElement("param").addAttribute("name", HbMapperConstants.ECLASSIFIER_PARAM).addText( //$NON-NLS-1$ //$NON-NLS-2$
+          eAttribute.getEAttributeType().getName());
+      typeElement.addElement("param").addAttribute("name", HbMapperConstants.EPACKAGE_PARAM).addText( //$NON-NLS-1$//$NON-NLS-2$
+          eAttribute.getEAttributeType().getEPackage().getNsURI());
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.java
new file mode 100644
index 0000000..7e64338
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEDataTypeAnnotator.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOCustomTypeUserType;
+
+import org.eclipse.emf.teneo.hibernate.annotations.HbEDataTypeAnnotator;
+
+/**
+ * Makes sure that the default type is a String.
+ *
+ * @author Martin Taal
+ * @since 3.0
+ */
+public class CDOEDataTypeAnnotator extends HbEDataTypeAnnotator
+{
+  public CDOEDataTypeAnnotator()
+  {
+  }
+
+  @Override
+  public String getDefaultUserType()
+  {
+    return CDOCustomTypeUserType.class.getName();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.java
new file mode 100644
index 0000000..b45246f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEFeatureAnnotator.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.teneo.annotations.mapper.EFeatureAnnotator;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEReference;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEStructuralFeature;
+import org.eclipse.emf.teneo.annotations.pannotation.PannotationFactory;
+
+/**
+ * Extends the Teneo EFeatureAnnotator to add an external annotation to each EReference to an EModelElement.
+ *
+ * @author Martin Taal
+ * @since 3.0
+ */
+public class CDOEFeatureAnnotator extends EFeatureAnnotator
+{
+  public CDOEFeatureAnnotator()
+  {
+  }
+
+  @Override
+  public void annotate(PAnnotatedEStructuralFeature aStructuralFeature)
+  {
+    super.annotate(aStructuralFeature);
+
+    // now determine if it needs to be annotated with External
+    if (aStructuralFeature instanceof PAnnotatedEReference)
+    {
+      final PAnnotatedEReference paReference = (PAnnotatedEReference)aStructuralFeature;
+      final boolean refersToEcoreModelElement = paReference.getModelEReference().getEReferenceType().getEPackage() == EcorePackage.eINSTANCE;
+
+      // these are done with a <any ..> mapping
+      final boolean refersToEObject = paReference.getModelEReference().getEReferenceType() == EcorePackage.eINSTANCE.getEObject();
+      final boolean isPartOfEcoreModel = paReference.getModelEReference().getEContainingClass().getEPackage() == EcorePackage.eINSTANCE;
+      if (refersToEcoreModelElement && !isPartOfEcoreModel && !refersToEObject)
+      {
+        paReference.setExternal(PannotationFactory.eINSTANCE.createExternal());
+      }
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java
new file mode 100644
index 0000000..0e96b0b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOEntityMapper.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateConstants;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType;
+
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEClass;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEStructuralFeature;
+import org.eclipse.emf.teneo.hibernate.mapper.EntityMapper;
+import org.eclipse.emf.teneo.simpledom.Element;
+
+import java.util.List;
+
+/**
+ * Adds mapping for econtainer and eresource.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 3.0
+ */
+public class CDOEntityMapper extends EntityMapper
+{
+  private PAnnotatedEClass currentEntity;
+
+  private boolean addedExtraMappings;
+
+  public CDOEntityMapper()
+  {
+  }
+
+  @Override
+  public void processEntity(PAnnotatedEClass entity)
+  {
+    // not the nicest solution
+    currentEntity = entity;
+    try
+    {
+      addedExtraMappings = false;
+      super.processEntity(entity);
+    }
+    finally
+    {
+      currentEntity = null;
+    }
+  }
+
+  // add container and resource mappings
+  @Override
+  protected void processFeatures(List<PAnnotatedEStructuralFeature> features)
+  {
+    super.processFeatures(features);
+
+    final Element entityElement = getHbmContext().getCurrent();
+    entityElement.addAttribute("lazy", "true");
+
+    if (!addedExtraMappings && currentEntity.getPaSuperEntity() == null)
+    {
+      final Element resourceElement = entityElement.addElement("property"); //$NON-NLS-1$
+      resourceElement.addAttribute("name", CDOHibernateConstants.RESOURCE_PROPERTY); //$NON-NLS-1$
+      resourceElement.addElement("column").addAttribute("name", CDOHibernateConstants.RESOURCE_PROPERTY_COLUMN); //$NON-NLS-1$//$NON-NLS-2$
+      resourceElement.addAttribute("type", CDOIDUserType.class.getName()); //$NON-NLS-1$
+
+      final Element containerElement = entityElement.addElement("property"); //$NON-NLS-1$
+      containerElement.addAttribute("name", CDOHibernateConstants.CONTAINER_PROPERTY).addAttribute("type", "string"); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
+      final Element columnElement = containerElement.addElement("column").addAttribute("name", //$NON-NLS-1$ //$NON-NLS-2$
+          CDOHibernateConstants.CONTAINER_PROPERTY_COLUMN);
+
+      final Element versionElement = entityElement.addElement("version"); //$NON-NLS-1$
+      // add cdo_teneo prefix to prop name prevent name clashes with
+      // efeatures which are accidentally called version
+      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378050
+      versionElement.addAttribute("name", "cdo_teneo_" + getHbmContext().getVersionColumnName()); //$NON-NLS-1$
+      versionElement.addElement("meta").addAttribute("attribute", "version").setText("true");
+      versionElement.addElement("column").addAttribute("name", getHbmContext().getVersionColumnName()); //$NON-NLS-1$//$NON-NLS-2$
+      versionElement.addAttribute("type", Integer.class.getName()); //$NON-NLS-1$
+
+      final Element timeStampElement = entityElement.addElement("property"); //$NON-NLS-1$
+      timeStampElement.addAttribute("name", CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY); //$NON-NLS-1$
+      timeStampElement.addAttribute("type", Long.class.getName()); //$NON-NLS-1$
+
+      if (getHbmContext().getCurrentEClass() == EresourcePackage.eINSTANCE.getCDOResourceNode())
+      {
+        // not nice but teneo will assign the first unique-key the number c0
+        // and there is only one unique constraint
+        columnElement.addAttribute("unique-key", "c0"); //$NON-NLS-1$//$NON-NLS-2$
+      }
+
+      addedExtraMappings = true;
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.java
new file mode 100644
index 0000000..ac75bb2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOManyAttributeMapper.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEAttribute;
+import org.eclipse.emf.teneo.annotations.pannotation.FetchType;
+import org.eclipse.emf.teneo.hibernate.mapper.ManyAttributeMapper;
+
+/**
+ * Extends the Teneo ManyAttributeMapper to force eager load of all primitive type lists.
+ *
+ * @author Martin Taal
+ * @since 3.0
+ */
+public class CDOManyAttributeMapper extends ManyAttributeMapper
+{
+  public CDOManyAttributeMapper()
+  {
+  }
+
+  @Override
+  public void processManyAttribute(PAnnotatedEAttribute paAttribute)
+  {
+    paAttribute.getOneToMany().setFetch(FetchType.EAGER);
+    super.processManyAttribute(paAttribute);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.java
new file mode 100644
index 0000000..4d43b72
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingContext.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2008, 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOCustomTypeUserType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOENumIntegerType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOENumStringType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticVersionPropertyHandler;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.FeatureMapEntryTuplizer;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEClass;
+import org.eclipse.emf.teneo.extension.ExtensionManager;
+import org.eclipse.emf.teneo.hibernate.mapper.EntityMapper;
+import org.eclipse.emf.teneo.hibernate.mapper.MappingContext;
+import org.eclipse.emf.teneo.simpledom.Element;
+
+/**
+ * Mapping context for CDO. It provides cdo classes as propertyhandler etc.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 3.0
+ */
+public class CDOMappingContext extends MappingContext
+{
+  public CDOMappingContext()
+  {
+  }
+
+  /** Add a tuplizer element or not */
+  @Override
+  public void addTuplizerElement(Element entityElement, PAnnotatedEClass aclass)
+  {
+    Element tuplizerElement = new Element("tuplizer").addAttribute("entity-mode", "dynamic-map").addAttribute("class", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        CDORevisionTuplizer.class.getName());
+    entityElement.add(0, tuplizerElement);
+    tuplizerElement = new Element("tuplizer").addAttribute("entity-mode", "pojo").addAttribute("class", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        CDORevisionTuplizer.class.getName());
+    entityElement.add(0, tuplizerElement);
+
+    if (entityElement.getAttributeValue("name") != null)
+    {
+      entityElement.addAttribute("proxy", CDORevision.class.getName());
+      entityElement.removeAttribute("name");
+    }
+  }
+
+  @Override
+  public void setExtensionManager(ExtensionManager extensionManager)
+  {
+    super.setExtensionManager(extensionManager);
+    extensionManager.registerExtension(EntityMapper.class.getName(), CDOEntityMapper.class.getName());
+  }
+
+  @Override
+  public String getComponentPropertyHandlerName()
+  {
+    return super.getComponentPropertyHandlerName();
+  }
+
+  @Override
+  public String getIdPropertyHandlerName()
+  {
+    return null;
+  }
+
+  @Override
+  public String getPropertyHandlerName()
+  {
+    return super.getPropertyHandlerName();
+  }
+
+  @Override
+  public String getVersionPropertyHandlerName()
+  {
+    return null;
+  }
+
+  @Override
+  public String getExternalUserType()
+  {
+    return CDOIDExternalUserType.class.getName();
+  }
+
+  @Override
+  public String getComponentFeatureMapTuplizer()
+  {
+    return FeatureMapEntryTuplizer.class.getName();
+  }
+
+  @Override
+  public String getFeatureMapEntryClassName()
+  {
+    return CDOFeatureMapEntry.class.getName();
+  }
+
+  @Override
+  public String getEnumUserType()
+  {
+    return CDOENumStringType.class.getName();
+  }
+
+  @Override
+  public String getEnumIntegerUserType()
+  {
+    return CDOENumIntegerType.class.getName();
+  }
+
+  @Override
+  public String getSyntheticIdPropertyHandlerName()
+  {
+    return CDOSyntheticIdPropertyHandler.class.getName();
+  }
+
+  @Override
+  public String getSyntheticVersionPropertyHandlerName()
+  {
+    return CDOSyntheticVersionPropertyHandler.class.getName();
+  }
+
+  @Override
+  public String getDynamicEnumUserType()
+  {
+    return CDOENumStringType.class.getName();
+  }
+
+  @Override
+  public String getDynamicEnumIntegerUserType()
+  {
+    return CDOENumIntegerType.class.getName();
+  }
+
+  @Override
+  public String getDefaultUserType()
+  {
+    return CDOCustomTypeUserType.class.getName();
+  }
+
+  @Override
+  public String getXSDDateUserType()
+  {
+    return super.getXSDDateUserType();
+  }
+
+  @Override
+  public String getXSDDateTimeUserType()
+  {
+    return super.getXSDDateTimeUserType();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.java
new file mode 100644
index 0000000..ac45436
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOMappingGenerator.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.teneo.PersistenceOptions;
+import org.eclipse.emf.teneo.annotations.mapper.EDataTypeAnnotator;
+import org.eclipse.emf.teneo.annotations.mapper.EFeatureAnnotator;
+import org.eclipse.emf.teneo.annotations.mapper.OneToManyReferenceAnnotator;
+import org.eclipse.emf.teneo.annotations.xml.XmlPersistenceContentHandler;
+import org.eclipse.emf.teneo.extension.ExtensionManager;
+import org.eclipse.emf.teneo.extension.ExtensionManagerFactory;
+import org.eclipse.emf.teneo.extension.ExtensionUtil;
+import org.eclipse.emf.teneo.hibernate.mapper.ManyAttributeMapper;
+import org.eclipse.emf.teneo.hibernate.mapper.MappingContext;
+import org.eclipse.emf.teneo.hibernate.mapper.MappingUtil;
+import org.eclipse.emf.teneo.hibernate.mapper.OneToManyMapper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Generates a CDO enabled mapping for Hibernate.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 3.0
+ */
+public class CDOMappingGenerator
+{
+  private static Map<String, String> extensions = new HashMap<String, String>();
+
+  private ExtensionManager extensionManager = ExtensionManagerFactory.getInstance().create();
+
+  public CDOMappingGenerator()
+  {
+  }
+
+  public void registerCDOExtensions(ExtensionManager extensionManager)
+  {
+    MappingUtil.registerHbExtensions(extensionManager);
+
+    // very strange but these can not go into the constructor...
+    // get a class not found exception then
+    addDefaultExtension(MappingContext.class, CDOMappingContext.class, extensionManager);
+    addDefaultExtension(EFeatureAnnotator.class, CDOEFeatureAnnotator.class, extensionManager);
+    addDefaultExtension(ManyAttributeMapper.class, CDOManyAttributeMapper.class, extensionManager);
+    addDefaultExtension(XmlPersistenceContentHandler.class, CDOXmlPersistenceContentHandler.class, extensionManager);
+    addDefaultExtension(EDataTypeAnnotator.class, CDOEDataTypeAnnotator.class, extensionManager);
+    addDefaultExtension(OneToManyMapper.class, CDOOneToManyMapper.class, extensionManager);
+    addDefaultExtension(OneToManyReferenceAnnotator.class, CDOOneToManyReferenceAnnotator.class, extensionManager);
+
+    for (String key : extensions.keySet())
+    {
+      try
+      {
+        final Class<?> keyClass = Thread.currentThread().getContextClassLoader().loadClass(key);
+        final Class<?> valueClass = Thread.currentThread().getContextClassLoader().loadClass(extensions.get(key));
+        extensionManager.registerExtension(ExtensionUtil.createExtension(keyClass, valueClass, false));
+      }
+      catch (Exception e)
+      {
+        throw new WrappedException(e);
+      }
+    }
+  }
+
+  protected void addDefaultExtension(Class<?> extensionClass, Class<?> extendingClass, ExtensionManager extensionManager)
+  {
+    if (extensions.containsKey(extensionClass.getName()))
+    {
+      return;
+    }
+
+    extensionManager.registerExtension(ExtensionUtil.createExtension(extensionClass, extendingClass, false));
+  }
+
+  public Map<String, String> getExtensions()
+  {
+    return extensions;
+  }
+
+  public void putExtension(String extensionClassName, String extendingClassName)
+  {
+    extensions.put(extensionClassName, extendingClassName);
+  }
+
+  /**
+   * Separate utility method, generates a hibernate mapping for a set of epackages and options. The hibernate.hbm.xml is
+   * returned as a string. The mapping is not registered or used in any other way by Elver.
+   */
+  public String generateMapping(EPackage[] epackages, Properties props)
+  {
+    // set some default properties
+    // never use hibernate optimistic locking
+    props.put(PersistenceOptions.ALWAYS_VERSION, "false"); //$NON-NLS-1$
+
+    if (!props.containsKey(PersistenceOptions.ID_COLUMN_NAME))
+    {
+      props.put(PersistenceOptions.ID_COLUMN_NAME, "idcol"); //$NON-NLS-1$
+    }
+
+    if (!props.containsKey(PersistenceOptions.VERSION_COLUMN_NAME))
+    {
+      props.put(PersistenceOptions.VERSION_COLUMN_NAME, "version"); //$NON-NLS-1$
+    }
+
+    props.setProperty(PersistenceOptions.FEATUREMAP_AS_COMPONENT, "true");
+    props.put(PersistenceOptions.ALSO_MAP_AS_CLASS, "false"); //$NON-NLS-1$
+    props.put(PersistenceOptions.EMAP_AS_TRUE_MAP, "false"); //$NON-NLS-1$
+    registerCDOExtensions(extensionManager);
+    return MappingUtil.generateMapping(epackages, props, extensionManager);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.java
new file mode 100644
index 0000000..b7b1d01
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyMapper.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2012, 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEReference;
+import org.eclipse.emf.teneo.hibernate.hbannotation.HbCascadeType;
+import org.eclipse.emf.teneo.hibernate.mapper.OneToManyMapper;
+import org.eclipse.emf.teneo.simpledom.Element;
+import org.eclipse.emf.teneo.util.StoreUtil;
+
+import java.util.List;
+
+/**
+ * Prevent delete-orphan.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 4.2
+ */
+public class CDOOneToManyMapper extends OneToManyMapper
+{
+
+  private static ThreadLocal<Boolean> isMapMappedAsList = new ThreadLocal<Boolean>();
+
+  @Override
+  protected void addCascades(Element associationElement, List<HbCascadeType> cascades, boolean addDeleteOrphan)
+  {
+    super.addCascades(associationElement, cascades, isMapMappedAsList.get() ? addDeleteOrphan : false);
+  }
+
+  @Override
+  public void process(PAnnotatedEReference paReference)
+  {
+    // is a map and is not mapped as true map
+    isMapMappedAsList.set(StoreUtil.isMap(paReference.getModelEReference()) && !getHbmContext().isMapEMapAsTrueMap());
+    try
+    {
+      super.process(paReference);
+    }
+    finally
+    {
+      isMapMappedAsList.set(null);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.java
new file mode 100644
index 0000000..5d8ed16
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOOneToManyReferenceAnnotator.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.teneo.annotations.mapper.OneToManyReferenceAnnotator;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEReference;
+
+/**
+ * Prevent automatically added delete-orphan.
+ *
+ * @author Martin Taal
+ * @since 4.2
+ */
+public class CDOOneToManyReferenceAnnotator extends OneToManyReferenceAnnotator
+{
+
+  @Override
+  public void annotate(PAnnotatedEReference aReference)
+  {
+    boolean hasOtm = aReference.getOneToMany() != null;
+    super.annotate(aReference);
+    if (!hasOtm && aReference.getOneToMany() != null)
+    {
+      aReference.getOneToMany().setOrphanRemoval(false);
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.java
new file mode 100644
index 0000000..1ccc24a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/CDOXmlPersistenceContentHandler.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.cdo.server.hibernate.internal.teneo.bundle.OM;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.teneo.PackageRegistryProvider;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEPackage;
+import org.eclipse.emf.teneo.annotations.xml.XmlPersistenceContentHandler;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * With cdo packages are registered at runtime so if the package in the xml is not yet present then be lenient about it.
+ *
+ * @author <a href="mtaal@elver.org">Martin Taal</a>
+ * @since 3.0
+ */
+public class CDOXmlPersistenceContentHandler extends XmlPersistenceContentHandler
+{
+  private PAnnotatedEPackage localPAPackage;
+
+  // is also present in super class, should be made protected there
+  private static final int ROOT = 0;
+
+  public CDOXmlPersistenceContentHandler()
+  {
+  }
+
+  @Override
+  public void characters(char[] ch, int start, int length) throws SAXException
+  {
+    // unknown epackage, ignore for now
+    if (localPAPackage == null)
+    {
+      return;
+    }
+
+    super.characters(ch, start, length);
+  }
+
+  @Override
+  public void endElement(String uri, String localName, String qName) throws SAXException
+  {
+    // unknown epackage, ignore for now
+    if (localPAPackage == null)
+    {
+      return;
+    }
+
+    super.endElement(uri, localName, qName);
+  }
+
+  @Override
+  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+  {
+    if (getParseState() != ROOT)
+    {
+      if (localName.equals("epackage")) //$NON-NLS-1$
+      {
+        final String nameSpaceUri = attributes.getValue("namespace-uri"); //$NON-NLS-1$
+        final EPackage ePackage = PackageRegistryProvider.getInstance().getPackageRegistry().getEPackage(nameSpaceUri);
+        if (ePackage != null)
+        {
+          localPAPackage = getPAnnotatedModel().getPAnnotated(ePackage);
+        }
+        else
+        {
+          localPAPackage = null;
+        }
+
+        if (localPAPackage == null)
+        {
+          OM.LOG.warn("No EPackage found for namespace " + nameSpaceUri //$NON-NLS-1$
+              + ". This is not a problem if this EPackage is registered later."); //$NON-NLS-1$
+        }
+      }
+
+      // unknown epackage, ignore for now
+      if (localPAPackage == null)
+      {
+        return;
+      }
+    }
+
+    super.startElement(uri, localName, qName, attributes);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.java b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.java
new file mode 100644
index 0000000..3630a88
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate.teneo/src/org/eclipse/emf/cdo/server/hibernate/teneo/TeneoUtil.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate.teneo;
+
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+import org.eclipse.emf.cdo.server.hibernate.internal.teneo.TeneoHibernateMappingProvider;
+
+/**
+ * @author Eike Stepper
+ * @since 2.0
+ */
+public final class TeneoUtil
+{
+  private TeneoUtil()
+  {
+  }
+
+  public static IHibernateMappingProvider createMappingProvider()
+  {
+    return new TeneoHibernateMappingProvider();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/.classpath b/org.eclipse.emf.cdo.server.hibernate/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.server.hibernate/.options b/org.eclipse.emf.cdo.server.hibernate/.options
new file mode 100644
index 0000000..b688dd9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.emf.cdo.server.hibernate/debug = true
diff --git a/org.eclipse.emf.cdo.server.hibernate/.project b/org.eclipse.emf.cdo.server.hibernate/.project
new file mode 100644
index 0000000..a1b10de
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.project
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.hibernate</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters b/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
new file mode 100644
index 0000000..0f781d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/.api_filters
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.server.hibernate" version="2">
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.emf.cdo.server.embedded.CDOSession">
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.eclipse.emf.cdo.server.embedded.CDOSession"/>
+                <message_argument value="org.eclipse.emf.cdo.server.hibernate_4.2.400"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.emf.cdo.server.embedded.CDOSessionConfiguration">
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.eclipse.emf.cdo.server.embedded.CDOSessionConfiguration"/>
+                <message_argument value="org.eclipse.emf.cdo.server.hibernate_4.2.400"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java" type="org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl">
+        <filter comment="Need to implement own version of branch point to store commit information" id="574619656">
+            <message_arguments>
+                <message_argument value="CDOBranchPoint"/>
+                <message_argument value="CDOHibernateBranchPointImpl"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.java" type="org.eclipse.emf.cdo.server.internal.hibernate.HibernateRawCommitContext">
+        <filter id="574619656">
+            <message_arguments>
+                <message_argument value="InternalCommitContext"/>
+                <message_argument value="HibernateRawCommitContext"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList">
+        <filter id="574660632">
+            <message_arguments>
+                <message_argument value="InternalCDOList"/>
+                <message_argument value="CDOList"/>
+                <message_argument value="WrappedHibernateList"/>
+            </message_arguments>
+        </filter>
+        <filter id="574668824">
+            <message_arguments>
+                <message_argument value="InternalCDOList"/>
+                <message_argument value="WrappedHibernateList"/>
+                <message_argument value="CDOList"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..23027fc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 13:03:06 CEST 2011
+eclipse.preferences.version=1
+
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..091ddbd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,395 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.launching.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..556ed07
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..222aec0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.api.tools.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..0c17d59
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.core.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..a4b5ed3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Sat Jun 28 11:42:40 CEST 2008
+eclipse.preferences.version=1
+resolve.requirebundle=false
diff --git a/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..c6b96bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..815bcbc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/META-INF/MANIFEST.MF
@@ -0,0 +1,58 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.emf.cdo.server.hibernate;singleton:=true
+Bundle-Version: 4.2.500.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM$Activator
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Eclipse-BuddyPolicy: registered
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.cdo.common;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.net4j.db;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Export-Package: org.eclipse.emf.cdo.server.hibernate;version="4.2.500",
+ org.eclipse.emf.cdo.server.internal.hibernate;version="4.2.500";x-friends:="org.eclipse.emf.cdo.server.hibernate.teneo,org.eclipse.emf.cdo.tests.hibernate",
+ org.eclipse.emf.cdo.server.internal.hibernate.bundle;version="4.2.500";x-internal:=true,
+ org.eclipse.emf.cdo.server.internal.hibernate.info;version="4.2.500";x-friends:="org.eclipse.emf.cdo.server.hibernate.teneo,org.eclipse.emf.cdo.tests.hibernate",
+ org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;version="4.2.500";x-friends:="org.eclipse.emf.cdo.server.hibernate.teneo,org.eclipse.emf.cdo.tests.hibernate"
+Import-Package: org.apache.log4j;version="[1.2.0,2.0.0)",
+ org.eclipse.emf.teneo;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.mapper;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.extension;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.auditing;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.hibernate.mapper;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.util;version="[2.0.1,3.0.0)",
+ org.hibernate;version="[4.0.0,5.0.0)",
+ org.hibernate.cfg;version="[4.0.0,5.0.0)",
+ org.hibernate.collection.internal;version="[4.0.0,5.0.0)",
+ org.hibernate.collection.spi;version="[4.0.0,5.0.0)",
+ org.hibernate.criterion;version="[4.0.0,5.0.0)",
+ org.hibernate.engine;version="[4.0.0,5.0.0)",
+ org.hibernate.engine.spi;version="[4.0.0,5.0.0)",
+ org.hibernate.event.internal;version="[4.0.0,5.0.0)",
+ org.hibernate.event.service.spi;version="[4.0.0,5.0.0)",
+ org.hibernate.event.spi;version="[4.0.0,5.0.0)",
+ org.hibernate.id;version="[4.0.0,5.0.0)",
+ org.hibernate.internal;version="[4.0.0,5.0.0)",
+ org.hibernate.mapping;version="[4.0.0,5.0.0)",
+ org.hibernate.metadata;version="[4.0.0,5.0.0)",
+ org.hibernate.metamodel.binding;version="[4.0.0,5.0.0)",
+ org.hibernate.persister.collection;version="[4.0.0,5.0.0)",
+ org.hibernate.persister.entity;version="[4.0.0,5.0.0)",
+ org.hibernate.property;version="[4.0.0,5.0.0)",
+ org.hibernate.proxy;version="[4.0.0,5.0.0)",
+ org.hibernate.service;version="[4.0.0,5.0.0)",
+ org.hibernate.tool.hbm2ddl;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple.component;version="[4.0.0,5.0.0)",
+ org.hibernate.tuple.entity;version="[4.0.0,5.0.0)",
+ org.hibernate.type;version="[4.0.0,5.0.0)",
+ org.hibernate.usertype;version="[4.0.0,5.0.0)"
+Automatic-Module-Name: org.eclipse.emf.cdo.server.hibernate
diff --git a/org.eclipse.emf.cdo.server.hibernate/about.html b/org.eclipse.emf.cdo.server.hibernate/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.server.hibernate/about.ini b/org.eclipse.emf.cdo.server.hibernate/about.ini
new file mode 100644
index 0000000..b7e87ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/org.eclipse.emf.cdo.server.hibernate/about.mappings b/org.eclipse.emf.cdo.server.hibernate/about.mappings
new file mode 100644
index 0000000..28e3764
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${build.qualifier}
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.hibernate/about.properties b/org.eclipse.emf.cdo.server.hibernate/about.properties
new file mode 100644
index 0000000..287aca4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/about.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2008, 2009, 2011-2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = CDO Model Repository Server Hibernate
+featureText = CDO Model Repository Server Hibernate\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.class
new file mode 100644
index 0000000..5d03646
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider$Factory.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider$Factory.class
new file mode 100644
index 0000000..eef81fa
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider$Factory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.class
new file mode 100644
index 0000000..b5e3409
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.class
new file mode 100644
index 0000000..599b380
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.class
new file mode 100644
index 0000000..1e166f8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.class
new file mode 100644
index 0000000..e151b6b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/package-info.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/package-info.class
new file mode 100644
index 0000000..5ac08af
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/hibernate/package-info.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.class
new file mode 100644
index 0000000..eca348c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.class
new file mode 100644
index 0000000..35fdb55
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.class
new file mode 100644
index 0000000..65885b5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.class
new file mode 100644
index 0000000..d8164c6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.class
new file mode 100644
index 0000000..f486c10
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.class
new file mode 100644
index 0000000..6a7975d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.class
new file mode 100644
index 0000000..f363309
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.class
new file mode 100644
index 0000000..99384d1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.class
new file mode 100644
index 0000000..0058504
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.class
new file mode 100644
index 0000000..68341fd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.class
new file mode 100644
index 0000000..6b5aee6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.class
new file mode 100644
index 0000000..c7c4b71
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.class
new file mode 100644
index 0000000..4dfa450
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDOAuditProcessHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDOAuditProcessHandler.class
new file mode 100644
index 0000000..6fad557
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDOAuditProcessHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDODataStore.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDODataStore.class
new file mode 100644
index 0000000..cc242d9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore$CDODataStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.class
new file mode 100644
index 0000000..2403890
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.class
new file mode 100644
index 0000000..43d4dfa
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.class
new file mode 100644
index 0000000..700ae58
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.class
new file mode 100644
index 0000000..936afa9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.class
new file mode 100644
index 0000000..b1253e0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.class
new file mode 100644
index 0000000..92e2b87
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.class
new file mode 100644
index 0000000..ecc17f6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.class
new file mode 100644
index 0000000..b32ebd2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.class
new file mode 100644
index 0000000..2eb9891
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM$Activator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM$Activator.class
new file mode 100644
index 0000000..df4a6b0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM$Activator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.class
new file mode 100644
index 0000000..16c8ebd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.class
new file mode 100644
index 0000000..3a6319a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.class
new file mode 100644
index 0000000..514378d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.class
new file mode 100644
index 0000000..fa55003
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.class
new file mode 100644
index 0000000..3f450a9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.class
new file mode 100644
index 0000000..3e37481
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.class
new file mode 100644
index 0000000..93f232e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.class
new file mode 100644
index 0000000..126d113
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.class
new file mode 100644
index 0000000..07f6c6e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.class
new file mode 100644
index 0000000..557edf8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.class
new file mode 100644
index 0000000..ca6234e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.class
new file mode 100644
index 0000000..4f3ff2f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.class
new file mode 100644
index 0000000..7e40491
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.class
new file mode 100644
index 0000000..5ce6b78
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.class
new file mode 100644
index 0000000..d565bbf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.class
new file mode 100644
index 0000000..93ffc4a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.class
new file mode 100644
index 0000000..9e8479c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.class
new file mode 100644
index 0000000..e04b0a1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.class
new file mode 100644
index 0000000..18b6a88
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.class
new file mode 100644
index 0000000..8972666
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.class
new file mode 100644
index 0000000..9bae480
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.class
new file mode 100644
index 0000000..cec4e09
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.class
new file mode 100644
index 0000000..7d8c71d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.class
new file mode 100644
index 0000000..672bd10
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.class
new file mode 100644
index 0000000..f8f1c51
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.class
new file mode 100644
index 0000000..ca8495d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.class
new file mode 100644
index 0000000..3aafff6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.class
new file mode 100644
index 0000000..373f947
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.class
new file mode 100644
index 0000000..8e9c6bf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.class
new file mode 100644
index 0000000..0a91ffc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.class
new file mode 100644
index 0000000..100ebf8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.class
new file mode 100644
index 0000000..b6a697c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.class
new file mode 100644
index 0000000..29ef1e5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.class
new file mode 100644
index 0000000..5c99826
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.class
new file mode 100644
index 0000000..03119cb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$BaseAccessor.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$BaseAccessor.class
new file mode 100644
index 0000000..86a74d9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$BaseAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionGetter.class
new file mode 100644
index 0000000..eac0bb5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionSetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionSetter.class
new file mode 100644
index 0000000..35fa709
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor$CDORevisionSetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.class
new file mode 100644
index 0000000..e0921c8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.class
new file mode 100644
index 0000000..9dc4851
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.class
new file mode 100644
index 0000000..238efe9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.class
new file mode 100644
index 0000000..2bc0f03
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.class
new file mode 100644
index 0000000..405bb41
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.class
new file mode 100644
index 0000000..e502c68
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.class
new file mode 100644
index 0000000..94ef433
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.class
new file mode 100644
index 0000000..986eaed
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.class
new file mode 100644
index 0000000..64ec8c3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.class
new file mode 100644
index 0000000..194f690
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.class
new file mode 100644
index 0000000..2574ddf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.class
new file mode 100644
index 0000000..023e335
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.class
new file mode 100644
index 0000000..77a9a30
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.class
new file mode 100644
index 0000000..cf6d0fd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateIterator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateIterator.class
new file mode 100644
index 0000000..1a0996c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateIterator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateListIterator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateListIterator.class
new file mode 100644
index 0000000..e8db148
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper$CDOHibernateListIterator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.class
new file mode 100644
index 0000000..b413ee0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder$Key.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder$Key.class
new file mode 100644
index 0000000..97d9a15
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder$Key.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.class
new file mode 100644
index 0000000..7aebf2c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.class
new file mode 100644
index 0000000..9d88366
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$1.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$1.class
new file mode 100644
index 0000000..3c49cdf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateIterator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateIterator.class
new file mode 100644
index 0000000..c88f5f9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateIterator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateListIterator.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateListIterator.class
new file mode 100644
index 0000000..ac5d1c3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$CDOHibernateListIterator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$UninitializedCollection.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$UninitializedCollection.class
new file mode 100644
index 0000000..5ea3860
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList$UninitializedCollection.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.class
new file mode 100644
index 0000000..3f6dbf8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnySimpleType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnySimpleType.class
new file mode 100644
index 0000000..bd2bde6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnySimpleType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnyURI.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnyURI.class
new file mode 100644
index 0000000..f839a08
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$AnyURI.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Base64Binary.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Base64Binary.class
new file mode 100644
index 0000000..3a61a01
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Base64Binary.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Boolean.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Boolean.class
new file mode 100644
index 0000000..7f7d04c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Boolean.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$BooleanObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$BooleanObject.class
new file mode 100644
index 0000000..9c5f665
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$BooleanObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Byte.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Byte.class
new file mode 100644
index 0000000..7707f07
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Byte.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ByteObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ByteObject.class
new file mode 100644
index 0000000..4d1c8db
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ByteObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Date.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Date.class
new file mode 100644
index 0000000..04b1b11
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Date.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DateTime.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DateTime.class
new file mode 100644
index 0000000..ad7b45f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DateTime.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Decimal.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Decimal.class
new file mode 100644
index 0000000..1c49ecf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Decimal.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Double.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Double.class
new file mode 100644
index 0000000..fca59f8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Double.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DoubleObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DoubleObject.class
new file mode 100644
index 0000000..794da79
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$DoubleObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Duration.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Duration.class
new file mode 100644
index 0000000..17e0e9e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Duration.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIES.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIES.class
new file mode 100644
index 0000000..0220178
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIES.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIESBase.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIESBase.class
new file mode 100644
index 0000000..7afd8f4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITIESBase.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITY.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITY.class
new file mode 100644
index 0000000..aed9b62
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ENTITY.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Float.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Float.class
new file mode 100644
index 0000000..dd7758f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Float.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$FloatObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$FloatObject.class
new file mode 100644
index 0000000..2131128
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$FloatObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GDay.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GDay.class
new file mode 100644
index 0000000..f8e9520
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GDay.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonth.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonth.class
new file mode 100644
index 0000000..ab29229
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonth.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonthDay.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonthDay.class
new file mode 100644
index 0000000..ccd609c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GMonthDay.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYear.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYear.class
new file mode 100644
index 0000000..0f38271
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYear.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYearMonth.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYearMonth.class
new file mode 100644
index 0000000..21a09ab
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$GYearMonth.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$HexBinary.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$HexBinary.class
new file mode 100644
index 0000000..61444c2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$HexBinary.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ID.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ID.class
new file mode 100644
index 0000000..f6fb834
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ID.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREF.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREF.class
new file mode 100644
index 0000000..b158834
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREF.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFS.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFS.class
new file mode 100644
index 0000000..6284a2a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFS.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFSBase.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFSBase.class
new file mode 100644
index 0000000..fad601e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IDREFSBase.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Int.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Int.class
new file mode 100644
index 0000000..4d44620
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Int.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IntObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IntObject.class
new file mode 100644
index 0000000..9e62ef5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$IntObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Integer.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Integer.class
new file mode 100644
index 0000000..b346782
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Integer.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Language.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Language.class
new file mode 100644
index 0000000..b925d51
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Language.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Long.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Long.class
new file mode 100644
index 0000000..92e5a78
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Long.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$LongObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$LongObject.class
new file mode 100644
index 0000000..9236609
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$LongObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NCName.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NCName.class
new file mode 100644
index 0000000..6f54183
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NCName.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKEN.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKEN.class
new file mode 100644
index 0000000..6f8315c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKEN.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENS.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENS.class
new file mode 100644
index 0000000..54d7d09
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENS.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENSBase.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENSBase.class
new file mode 100644
index 0000000..e9304dd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NMTOKENSBase.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NOTATION.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NOTATION.class
new file mode 100644
index 0000000..577c22b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NOTATION.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Name.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Name.class
new file mode 100644
index 0000000..08f9986
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Name.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NegativeInteger.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NegativeInteger.class
new file mode 100644
index 0000000..39316e8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NegativeInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonNegativeInteger.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonNegativeInteger.class
new file mode 100644
index 0000000..523a177
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonNegativeInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonPositiveInteger.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonPositiveInteger.class
new file mode 100644
index 0000000..551eeb2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NonPositiveInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NormalizedString.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NormalizedString.class
new file mode 100644
index 0000000..46fe353
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$NormalizedString.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$PositiveInteger.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$PositiveInteger.class
new file mode 100644
index 0000000..8a97d7f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$PositiveInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$QName.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$QName.class
new file mode 100644
index 0000000..e730524
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$QName.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Short.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Short.class
new file mode 100644
index 0000000..befab2b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Short.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ShortObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ShortObject.class
new file mode 100644
index 0000000..34421dd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$ShortObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$String.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$String.class
new file mode 100644
index 0000000..4f13ee5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$String.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Time.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Time.class
new file mode 100644
index 0000000..49b8bb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Time.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Token.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Token.class
new file mode 100644
index 0000000..461f4b8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$Token.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByte.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByte.class
new file mode 100644
index 0000000..27deb2c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByte.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByteObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByteObject.class
new file mode 100644
index 0000000..2bccd4f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedByteObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedInt.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedInt.class
new file mode 100644
index 0000000..acdc1aa
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedInt.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedIntObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedIntObject.class
new file mode 100644
index 0000000..6ab0d32
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedIntObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedLong.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedLong.class
new file mode 100644
index 0000000..2f7fabf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedLong.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShort.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShort.class
new file mode 100644
index 0000000..ab63574
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShort.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShortObject.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShortObject.class
new file mode 100644
index 0000000..301b1ce
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType$UnsignedShortObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.class b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.class
new file mode 100644
index 0000000..b52c74f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/bin/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/build.properties b/org.eclipse.emf.cdo.server.hibernate/build.properties
new file mode 100644
index 0000000..8a9c08c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/build.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2008-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               .options,\
+               about.html,\
+               plugin.xml,\
+               plugin.properties,\
+               mappings/,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               modeling32.png,\
+               schema/
+src.includes = about.html,\
+               pom.xml
+
+doc.project = org.eclipse.emf.cdo.doc
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml b/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
new file mode 100644
index 0000000..2bbfdc2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/mappings/meta.hbm.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping package="org.eclipse.emf.cdo.internal.common.model">
+
+	<class name="org.eclipse.emf.cdo.server.internal.hibernate.HibernateCDOPackageUnitDTO" table="cdo_package_unit" lazy="false" entity-name="CDOPackageUnit">
+		<id name="nsUri"  access="property"/>
+
+		<property name="originalType" access="field" />
+		<property name="timeStamp" access="field" />
+
+		<!-- Need to set an explicit length for derby:
+		http://opensource.atlassian.com/projects/hibernate/browse/HHH-2614
+		setting it to an arbitrary large value
+		 -->
+		<property name="EPackageBlob" access="property" type="blob" length="65500"/>
+
+		<array name="packageInfos" cascade="all, delete-orphan" access="field">
+			<key column="cdo_package_unit_id"/>
+			<list-index column="idx"/>
+			<one-to-many class="CDOPackageInfoImpl"/>
+		</array>
+
+	</class>
+
+	<class name="CDOPackageInfoImpl" table="cdo_package_info" lazy="false">
+		<id name="packageURI" access="property"/>
+		<property name="parentURI" length="255" access="field" />
+	</class>
+
+	<class name="org.eclipse.emf.cdo.server.internal.hibernate.SystemInformation" table="cdo_system_information" lazy="false">
+		<id column="id" type="int">
+			<generator class="native" />
+		</id>
+		<property name="creationTime"/>
+	</class>
+
+	<class name="org.eclipse.emf.cdo.server.internal.hibernate.SystemProperty" table="cdo_system_property" lazy="false">
+		<id name="name" type="string" length="255"/>
+		<property name="value" type="text" length="2000"/>
+	</class>
+	</hibernate-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml b/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml
new file mode 100644
index 0000000..d43c172
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/mappings/resource.hbm.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping auto-import="false">
+	<typedef name="eresource.ResourceSet" class="org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserType">
+		<param name="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</param>
+		<param name="edatatype">ResourceSet</param>
+	</typedef>
+	<typedef name="eresource.URI" class="org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserType">
+		<param name="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</param>
+		<param name="edatatype">URI</param>
+	</typedef>
+	<typedef name="eresource.Diagnostic" class="org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserType">
+		<param name="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</param>
+		<param name="edatatype">Diagnostic</param>
+	</typedef>
+	<class entity-name="CDOResourceNode" abstract="true" lazy="false" discriminator-value="CDOResourceNode" table="`cdoresourcenode`">
+		<meta attribute="eclassName">CDOResourceNode</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<id type="long" name="e_id" column="`e_id`" access="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOSyntheticIdPropertyHandler">
+			<meta attribute="syntheticId">true</meta>
+			<generator class="native"/>
+		</id>
+		<discriminator column="`dtype`" type="string"/>
+		<version name="e_version" column="`e_version`" type="java.lang.Integer" >
+			<meta attribute="version">true</meta>
+		</version>
+		<property name="resourceID" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType">
+			<column name="`resource_id`"/>
+		</property>
+		<property name="containerID" type="string">
+			<column name="`container_id`" unique-key="c0"/>
+		</property>
+		<many-to-one name="folder" entity-name="CDOResourceFolder" lazy="false" cascade="merge,persist,save-update,lock" foreign-key="cdoresourcenode_folder" insert="false" update="false" not-null="false">
+			<column not-null="false" unique="false" name="`cdoresourcenode_folder_e_id`"/>
+		</many-to-one>
+		<property name="name" lazy="false" insert="true" update="true" not-null="false" unique="false" type="java.lang.String">
+			<column not-null="false" unique="false" name="`name`" unique-key="c0"/>
+		</property>
+	</class>
+	<subclass entity-name="CDOResourceFolder" abstract="false" lazy="false" extends="CDOResourceNode" discriminator-value="CDOResourceFolder">
+		<meta attribute="eclassName">CDOResourceFolder</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<list name="nodes" lazy="true" cascade="all">
+			<key update="true">
+				<column name="`cdoresourcenode_folder_e_id`" not-null="false" unique="false"/>
+			</key>
+			<list-index column="`cdoresourcefolder_nodes_idx`"/>
+			<one-to-many entity-name="CDOResourceNode"/>
+		</list>
+	</subclass>
+	<subclass entity-name="CDOResource" abstract="false" lazy="false" extends="CDOResourceNode" discriminator-value="CDOResource">
+		<meta attribute="eclassName">CDOResource</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<list name="contents" table="`cdoresourcecontents`" lazy="extra">
+			<key update="true" foreign-key="cdoresourcecontents">
+				<column name="`cdoresource_e_id`" not-null="true" unique="false"/>
+			</key>
+			<list-index column="`cdoresourcecontents_idx`"/>
+			<element type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDAnyUserType">
+				<column not-null="false" unique="false" name="`contents_type`"/>
+				<column not-null="false" unique="false" name="`contents_id`"/>
+			</element>
+		</list>
+	</subclass>
+	<subclass entity-name="CDOTextResource" abstract="false" lazy="false" extends="CDOResourceNode" discriminator-value="CDOTextResource">
+		<meta attribute="eclassName">CDOTextResource</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<property name="contents" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOClobUserType"/>
+		<property name="encoding" type="string"/>
+	</subclass>
+	<subclass entity-name="CDOBinaryResource" abstract="false" lazy="false" extends="CDOResourceNode" discriminator-value="CDOBinaryResource">
+		<meta attribute="eclassName">CDOBinaryResource</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<property name="contents" type="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBlobUserType"/>
+	</subclass>
+	<subclass entity-name="CDOFileResource" abstract="false" lazy="false" extends="CDOResourceNode" discriminator-value="CDOFileResource">
+		<meta attribute="eclassName">CDOFileResource</meta>
+		<meta attribute="epackage">http://www.eclipse.org/emf/CDO/Eresource/4.0.0</meta>
+		<tuplizer entity-mode="pojo" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+		<tuplizer entity-mode="dynamic-map" class="org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionTuplizer"/>
+	</subclass>
+		
+	<class name="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreLob" table="`cdo_lob`" lazy="false">
+		<id name="id"/>
+		<property name="clob">
+			<column name="`c_lob`"/>
+		</property>
+		<property name="blob">
+			<column name="`b_lob`"/>
+		</property>
+		<property name="size">
+			<column name="`lobsize`"/>
+		</property>
+	</class>
+
+</hibernate-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.hibernate/modeling32.png b/org.eclipse.emf.cdo.server.hibernate/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/modeling32.png
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.hibernate/plugin.properties b/org.eclipse.emf.cdo.server.hibernate/plugin.properties
new file mode 100644
index 0000000..1c91a10
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/plugin.properties
@@ -0,0 +1,13 @@
+# Copyright (c) 2008-2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Server Hibernate
+providerName = Eclipse Modeling Project
+
+extension-point.name = Hibernate Mapping Provider Factories
diff --git a/org.eclipse.emf.cdo.server.hibernate/plugin.xml b/org.eclipse.emf.cdo.server.hibernate/plugin.xml
new file mode 100644
index 0000000..15c5767
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+	Copyright (c) 2008, 2009, 2012 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+	
+	Contributors:
+	  Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+   <extension-point id="mappingProviderFactories" name="%extension-point.name" schema="schema/mappingProviderFactories.exsd"/>
+
+   <extension
+         point="org.eclipse.emf.cdo.server.storeFactories">
+      <storeFactory
+            class="org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreFactory"
+            storeType="hibernate"/>
+   </extension>
+
+   <extension
+         point="org.eclipse.emf.cdo.server.hibernate.mappingProviderFactories">
+      <mappingProviderFactory
+            class="org.eclipse.emf.cdo.server.internal.hibernate.FileHibernateMappingProviderFactory"
+            type="file"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.server.hibernate/pom.xml b/org.eclipse.emf.cdo.server.hibernate/pom.xml
new file mode 100644
index 0000000..fcee80e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017, 2018 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.hibernate</artifactId>
+  <version>4.2.500-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.hibernate/schema/mappingProviderFactories.exsd b/org.eclipse.emf.cdo.server.hibernate/schema/mappingProviderFactories.exsd
new file mode 100644
index 0000000..961bc6d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/schema/mappingProviderFactories.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.emf.cdo.server.hibernate" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.emf.cdo.server.hibernate" id="mappingProviderFactories" name="Hibernate Mapping Provider Factories"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="mappingProviderFactory" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="mappingProviderFactory">
+      <complexType>
+         <attribute name="type" type="string" use="required">
+            <annotation>
+               <documentation>
+
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider$Factory"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2008, 2012 Eike Stepper (Loehne, Germany) and others.&lt;br&gt;
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.java
new file mode 100644
index 0000000..e9ef5a7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/CDOHibernateUtil.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - added mappingProvider support
+ */
+package org.eclipse.emf.cdo.server.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+/**
+ * Various static methods that may help in setting up and dealing with {@link IHibernateStore Hibernate stores}.
+ *
+ * @author Eike Stepper
+ * @author Martin Taal
+ */
+public final class CDOHibernateUtil
+{
+  private CDOHibernateUtil()
+  {
+  }
+
+  /**
+   * @since 4.1
+   */
+  public static IHibernateMappingProvider.Factory getMappingProviderFactoryInstance()
+  {
+    return HibernateUtil.getMappingProviderFactoryInstance();
+  }
+
+  /**
+   * @since 4.1
+   */
+  public static void setMappingProviderFactoryInstance(IHibernateMappingProvider.Factory theMappingProviderFactoryInstance)
+  {
+    HibernateUtil.setMappingProviderFactoryInstance(theMappingProviderFactoryInstance);
+  }
+
+  public static IHibernateStore createStore(IHibernateMappingProvider mappingProvider)
+  {
+    return new HibernateStore(mappingProvider);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.java
new file mode 100644
index 0000000..30bf63f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateMappingProvider.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.hibernate;
+
+import org.w3c.dom.Element;
+
+/**
+ * A mapping provider adds a hibernate mapping to a hibernate configuration object.
+ *
+ * @author Martin Taal
+ */
+public interface IHibernateMappingProvider
+{
+  /**
+   * @return the mapping as a String.
+   * @since 3.0
+   */
+  public String getMapping();
+
+  /**
+   * Sets the Store in the mapping provider, is called before addMapping.
+   */
+  public void setHibernateStore(IHibernateStore hibernateStore);
+
+  /**
+   * Creates {@link IHibernateMappingProvider mapping provider} instances.
+   *
+   * @author Eike Stepper
+   * @since 2.0
+   */
+  public interface Factory
+  {
+    /**
+     * Returns the type of the mapping providers this factory can create.
+     */
+    public String getType();
+
+    /**
+     * Creates a Hibernate mapping provider from the given element of the <code>cdo-server.xml</code> configuration
+     * file.
+     */
+    public IHibernateMappingProvider create(Element config);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.java
new file mode 100644
index 0000000..4e23af2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStore.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2008, 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - contributions
+ */
+package org.eclipse.emf.cdo.server.hibernate;
+
+import org.eclipse.emf.cdo.server.IStore;
+
+import org.eclipse.net4j.db.IDBConnectionProvider;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * The Hibernate store manages the Hibernate {@link SessionFactory} and the installed
+ * {@link EPackage} instances.
+ *
+ * @author Eike Stepper
+ * @since 4.0
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IHibernateStore extends IStore, IDBConnectionProvider, IStore.CanHandleClientAssignedIDs
+{
+  /**
+   * @since 4.0
+   */
+  public static final String QUERY_LANGUAGE = "hql"; //$NON-NLS-1$
+
+  /**
+   * @since 4.0
+   */
+  public static final String FIRST_RESULT = "firstResult"; //$NON-NLS-1$
+
+  /**
+   * If results should be cached in the query cache, only needed if they are accessed directly as part of the query.
+   *
+   * @since 4.0
+   */
+  public static final String CACHE_RESULTS = "cacheResults"; //$NON-NLS-1$
+
+  public Configuration getHibernateConfiguration();
+
+  public SessionFactory getHibernateSessionFactory();
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.java
new file mode 100644
index 0000000..f10ec6b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreAccessor.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate;
+
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.Session;
+
+/**
+ * The Hibernate store accessor works with Hibernate {@link Session} instances
+ * to persist changes in the database, it obtains the {@link Session} from the
+ * {@link IHibernateStore}.
+ *
+ * @author Eike Stepper
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IHibernateStoreAccessor extends IStoreAccessor.Raw
+{
+  public IHibernateStore getStore();
+
+  /**
+   * @since 2.0
+   */
+  public IHibernateStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature);
+
+  public Session getHibernateSession();
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.java
new file mode 100644
index 0000000..abd5533
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/IHibernateStoreChunkReader.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.hibernate;
+
+import org.eclipse.emf.cdo.server.IStoreChunkReader;
+
+/**
+ * Hibernate specific implementation of the {@link IStoreChunkReader}.
+ *
+ * @author Eike Stepper
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IHibernateStoreChunkReader extends IStoreChunkReader
+{
+  /**
+   * @since 2.0
+   */
+  public IHibernateStoreAccessor getAccessor();
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/package-info.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/package-info.java
new file mode 100644
index 0000000..3fe6aab
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/hibernate/package-info.java
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
+ * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Eike Stepper - initial API
+ * and implementation
+ */
+
+/**
+ * Server concepts for dealing with Hibernate stores and accessors.
+ */
+package org.eclipse.emf.cdo.server.hibernate;
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.java
new file mode 100644
index 0000000..ced2fb4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOAuditHandler.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2012, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - moved cdopackage handler to other class, changed configuration
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+import org.eclipse.emf.teneo.Constants;
+import org.eclipse.emf.teneo.hibernate.auditing.AuditHandler;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditEntry;
+
+import org.hibernate.Session;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+
+/**
+ * Overrides the {@link AuditHandler} to implement CDO
+ * specific audit handling.
+ *
+ * @author Martin Taal
+ */
+public class CDOAuditHandler extends AuditHandler
+{
+
+  @Override
+  public void setContainerInfo(Session session, TeneoAuditEntry teneoAuditEntry, Object object)
+  {
+    final InternalCDORevision cdoRevision = (InternalCDORevision)object;
+
+    teneoAuditEntry.setTeneo_container_feature_id(cdoRevision.getContainingFeatureID());
+    teneoAuditEntry.setTeneo_container_id(HibernateUtil.getInstance().convertCDOIDToString((CDOID)cdoRevision.getContainerID()));
+  }
+
+  @Override
+  public boolean isAudited(Object entity)
+  {
+    if (!(entity instanceof CDORevision))
+    {
+      // TODO: support featuremap entries
+      return false;
+    }
+    if (!getDataStore().isAuditing())
+    {
+      return false;
+    }
+    final CDORevision cdoRevision = (CDORevision)entity;
+    final EClass auditEClass = getAuditingModelElement(cdoRevision.getEClass());
+    return auditEClass != null;
+  }
+
+  public boolean isAudited(CDOID id)
+  {
+    if (!getDataStore().isAuditing())
+    {
+      return false;
+    }
+    if (!(id instanceof CDOClassifierRef.Provider))
+    {
+      return false;
+    }
+    CDOClassifierRef cdoClassifierRef = ((CDOClassifierRef.Provider)id).getClassifierRef();
+    final EClass eClass = HibernateUtil.getInstance().getEClass(cdoClassifierRef);
+    if (eClass == null)
+    {
+      return false;
+    }
+    final EClass auditEClass = getAuditingModelElement(eClass);
+    return auditEClass != null;
+  }
+
+  @Override
+  protected boolean supportCustomType()
+  {
+    return true;
+  }
+
+  @Override
+  public EClass getEClass(Object o)
+  {
+    if (o instanceof EObject)
+    {
+      return ((EObject)o).eClass();
+    }
+    return ((CDORevision)o).getEClass();
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public void copyContentToAuditEntry(Session session, Object object, TeneoAuditEntry auditEntry, boolean copyCollections)
+  {
+    final InternalCDORevision source = (InternalCDORevision)object;
+    final EClass sourceEClass = source.getEClass();
+    final EClass targetEClass = auditEntry.eClass();
+    for (EStructuralFeature targetEFeature : targetEClass.getEAllStructuralFeatures())
+    {
+
+      if (!copyCollections && targetEFeature.isMany())
+      {
+        continue;
+      }
+      // part of a featuremap
+      if (ExtendedMetaData.INSTANCE.getGroup(targetEFeature) != null)
+      {
+        continue;
+      }
+
+      // initialize with new arrays always to prevent hibernate from complaining if the
+      // same array is re-used accross entities
+      if (targetEFeature.getEType().getInstanceClass() != null && targetEFeature.getEType().getInstanceClass().isArray())
+      {
+        auditEntry.eSet(targetEFeature, Array.newInstance(targetEFeature.getEType().getInstanceClass().getComponentType(), 0));
+      }
+
+      final EStructuralFeature sourceEFeature = sourceEClass.getEStructuralFeature(targetEFeature.getName());
+      if (sourceEFeature != null)
+      {
+        if (targetEFeature instanceof EAttribute && sourceEFeature instanceof EReference)
+        {
+          if (sourceEFeature.isMany())
+          {
+            for (Object value : (Collection<?>)source.getOrCreateList(sourceEFeature))
+            {
+              final String idAsString = entityToIdString(session, value);
+              ((Collection<Object>)auditEntry.eGet(targetEFeature)).add(idAsString);
+            }
+          }
+          else
+          {
+            final String idAsString = entityToIdString(session, source.getValue(sourceEFeature));
+            auditEntry.eSet(targetEFeature, idAsString);
+          }
+        }
+        else
+        {
+          if (sourceEFeature.isMany())
+          {
+            if (FeatureMapUtil.isFeatureMap(sourceEFeature))
+            {
+              convertFeatureMap(session, source, sourceEFeature, auditEntry, targetEFeature);
+            }
+            else
+            {
+              for (Object value : (Collection<?>)source.getOrCreateList(sourceEFeature))
+              {
+                ((Collection<Object>)auditEntry.eGet(targetEFeature)).add(convertValue(sourceEFeature, targetEFeature, value));
+              }
+            }
+          }
+          else
+          {
+            // not set
+            if (sourceEFeature.isUnsettable() && source.getValue(sourceEFeature) == null)
+            {
+              auditEntry.eUnset(targetEFeature);
+            }
+            else
+            {
+              auditEntry.eSet(targetEFeature, convertValue(sourceEFeature, targetEFeature, source.getValue(sourceEFeature)));
+            }
+          }
+        }
+      }
+    }
+  }
+
+  @Override
+  protected EStructuralFeature createEMapFeature(EStructuralFeature sourceEFeature, EClass eMapEntryEClass)
+  {
+    return createEReferenceAttribute((EReference)sourceEFeature);
+  }
+
+  protected void convertEMap(Session session, InternalCDORevision source, EReference sourceEReference, TeneoAuditEntry auditEntry, EReference targetEReference)
+  {
+    throw new IllegalStateException("Error case: The system should not use this method when doing auditing in CDO");
+  }
+
+  protected void convertFeatureMap(Session session, InternalCDORevision source, EStructuralFeature sourceEFeature, TeneoAuditEntry auditEntry,
+      EStructuralFeature targetEFeature)
+  {
+    super.convertFeatureMap(session, source.getOrCreateList(sourceEFeature), sourceEFeature, auditEntry, targetEFeature);
+  }
+
+  @Override
+  public String entityToIdString(Session session, Object entity)
+  {
+    if (entity == null || entity == InternalCDORevision.NIL)
+    {
+      return null;
+    }
+
+    CDOID cdoID;
+    if (entity instanceof CDOID)
+    {
+      cdoID = (CDOID)entity;
+    }
+    else
+    {
+      final CDORevision cdoRevision = (CDORevision)entity;
+      cdoID = cdoRevision.getID();
+    }
+    if (cdoID == CDOID.NULL)
+    {
+      return null;
+    }
+
+    // get the correct id
+    if (HibernateThreadContext.isCommitContextSet())
+    {
+      final CommitContext commitContext = HibernateThreadContext.getCommitContext().getCommitContext();
+      CDOID newID = cdoID;
+      int cnt = 0;
+      while (commitContext.getIDMappings().containsKey(newID))
+      {
+        newID = commitContext.getIDMappings().get(newID);
+        cnt++;
+        if (cnt > 1000)
+        {
+          throw new IllegalStateException("Cycle detected in id mappings " + newID + " maps to " + commitContext.getIDMappings().get(newID));
+        }
+      }
+      cdoID = newID;
+    }
+
+    return HibernateUtil.getInstance().convertCDOIDToString(cdoID);
+  }
+
+  @Override
+  public String idToString(EClass eClass, Object id)
+  {
+    return HibernateUtil.getInstance().convertCDOIDToString((CDOID)id);
+  }
+
+  public Object convertValue(EStructuralFeature sourceEFeature, EStructuralFeature eFeature, Object value)
+  {
+    if (value == CDORevisionData.NIL)
+    {
+      return null;
+    }
+    if (value instanceof EEnumLiteral)
+    {
+      return ((EEnumLiteral)value).getLiteral();
+    }
+    if (value instanceof Enumerator)
+    {
+      return ((Enumerator)value).getLiteral();
+    }
+
+    if (sourceEFeature.getEType() instanceof EEnum && value instanceof Integer)
+    {
+      final int ordinal = (Integer)value;
+      final EEnum eeNum = (EEnum)sourceEFeature.getEType();
+      if (eeNum.getInstanceClass() != null && eeNum.getInstanceClass().isEnum())
+      {
+        final Object[] constants = eeNum.getInstanceClass().getEnumConstants();
+        for (Object constant : constants)
+        {
+          if (constant instanceof Enumerator)
+          {
+            final Enumerator enumerator = (Enumerator)constant;
+            if (enumerator.getValue() == ordinal)
+            {
+              return enumerator.getLiteral();
+            }
+          }
+        }
+        return ((Enum<?>)constants[ordinal]).name();
+      }
+      return eeNum.getEEnumLiteral((Integer)value).getLiteral();
+    }
+
+    return super.convertValue(eFeature, value);
+  }
+
+  // map all enums as string
+  @Override
+  protected EStructuralFeature createEAttribute(EAttribute eAttribute)
+  {
+    final EStructuralFeature eFeature = super.createEAttribute(eAttribute);
+    if (eFeature.getEType() instanceof EEnum)
+    {
+      eFeature.setEType(EcorePackage.eINSTANCE.getEString());
+      // add a dummy teneo.jpa to prevent anyone of accidentally mapping
+      // enumerated in a different way
+      // set in the source efeature will be found there
+      if (eAttribute.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING) == null)
+      {
+        final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+        eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING);
+        eAnnotation.getDetails().put(Constants.ANNOTATION_KEY_VALUE, "");
+        eAttribute.getEAnnotations().add(eAnnotation);
+      }
+      return eFeature;
+    }
+
+    if (isCustomType(eAttribute.getEAttributeType()))
+    {
+      if (!isTeneoAnnotated(eAttribute))
+      {
+        eFeature.setEType(EcorePackage.eINSTANCE.getEString());
+      }
+    }
+
+    return eFeature;
+  }
+
+  private boolean isTeneoAnnotated(EAttribute eAttribute)
+  {
+    return eAttribute.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null || eAttribute.getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null
+        || eAttribute.getEAttributeType().getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA_AUDITING) != null
+        || eAttribute.getEAttributeType().getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) != null;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java
new file mode 100644
index 0000000..8c5305f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateBranchPointImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2011, 2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.internal.common.branch.CDOBranchPointImpl;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBranchTimeStampGetter;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOBranchTimeStampSetter;
+
+/**
+ * Used to get the timestamp from the db into the revision branchpoint.
+ *
+ * @see CDOBranchTimeStampGetter
+ * @see CDOBranchTimeStampSetter
+ * @author Martin Taal
+ */
+public class CDOHibernateBranchPointImpl extends CDOBranchPointImpl
+{
+
+  public CDOHibernateBranchPointImpl(long timeStamp)
+  {
+    super(HibernateThreadContext.getCurrentStoreAccessor().getStore().getRepository().getBranchManager().getMainBranch(), timeStamp);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java
new file mode 100644
index 0000000..01bbfe8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/CDOHibernateConstants.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+/**
+ * Maintains constants used in the CDO-Hibernate integration.
+ *
+ * @author Martin Taal
+ */
+public class CDOHibernateConstants
+{
+  public static final String ID_PROPERTY = "id"; //$NON-NLS-1$
+
+  public static final String COMMITTIMESTAMP_PROPERTY = "commit_TimeStamp"; //$NON-NLS-1$
+
+  public static final String RESOURCE_PROPERTY = "resourceID"; //$NON-NLS-1$
+
+  public static final String RESOURCE_PROPERTY_COLUMN = "resource_id"; //$NON-NLS-1$
+
+  public static final String CONTAINER_PROPERTY = "containerID"; //$NON-NLS-1$
+
+  public static final String CONTAINER_PROPERTY_COLUMN = "container_id"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_FEATURE = "fme_feature"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_CDATA = "fme_mixed_cdata"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_COMMENT = "fme_mixed_comment"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_TEXT = "fme_mixed_text"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_ANY_PRIMITIVE = "fme_any_data"; //$NON-NLS-1$
+
+  public static final String FEATUREMAP_PROPERTY_ANY_REFERENCE = "fme_any_reference"; //$NON-NLS-1$
+
+  public static final String PROPERTY_SEPARATOR = "_"; //$NON-NLS-1$
+
+  public static final String NL = "\n"; //$NON-NLS-1$
+
+  public static final String UTF8 = "UTF-8"; //$NON-NLS-1$
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java
new file mode 100644
index 0000000..e08761b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/ContainerInfoConverter.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
+/**
+ * Is responsible for converting container related information from and to a string representation.
+ *
+ * @see InternalCDORevision#getContainerID()
+ * @see InternalCDORevision#getContainingFeatureID()
+ * @see InternalCDORevision#getContainingFeatureID()
+ * @author Martin Taal
+ */
+public class ContainerInfoConverter
+{
+  private static String SEPARATOR = "_:_"; //$NON-NLS-1$
+
+  private static String CONTAINER_PREFIX = "-"; //$NON-NLS-1$
+
+  private static ContainerInfoConverter instance = new ContainerInfoConverter();
+
+  /**
+   * @return the instance
+   */
+  public static ContainerInfoConverter getInstance()
+  {
+    return instance;
+  }
+
+  /**
+   * @param instance
+   *          the instance to set
+   */
+  public static void setInstance(ContainerInfoConverter instance)
+  {
+    ContainerInfoConverter.instance = instance;
+  }
+
+  /**
+   * Converts the container information of a {@link InternalCDORevision} to a String representation. The container
+   * information is the container id ({@link InternalCDORevision#getContainerID()} and the containingFeatureID (
+   * {@link InternalCDORevision#getContainingFeatureID()}).
+   *
+   * @param cdoRevision
+   *          the InternalCDORevision which has the container information
+   * @return a String representation of the container information which can be stored in a single varchar in the
+   *         database.
+   */
+  public String convertContainerRelationToString(InternalCDORevision cdoRevision)
+  {
+    return convertContainerRelationToString(cdoRevision, (CDOID)cdoRevision.getContainerID());
+  }
+
+  /**
+   * Converts the container information of a {@link InternalCDORevision} to a String representation. The container
+   * information is the container id ({@link InternalCDORevision#getContainerID()} and the containingFeatureID (
+   * {@link InternalCDORevision#getContainingFeatureID()}).
+   *
+   * @param cdoRevision
+   *          the InternalCDORevision which has the container information
+   * @param containerID
+   *          the CDOID of the container
+   * @return a String representation of the container information which can be stored in a single varchar in the
+   *         database.
+   */
+  public String convertContainerRelationToString(InternalCDORevision cdoRevision, CDOID containerID)
+  {
+    if (containerID == null || containerID.isNull() || containerID.isTemporary())
+    {
+      return null;
+    }
+
+    final String strCDOID = HibernateUtil.getInstance().convertCDOIDToString(containerID);
+    if (!HibernateUtil.getInstance().isStoreCreatedID(containerID))
+    {
+      // does not support changing models....
+      return strCDOID + SEPARATOR + cdoRevision.getContainingFeatureID();
+    }
+
+    // get the feature name...
+    if (cdoRevision.getContainingFeatureID() < 0)
+    {
+      final String entityName = HibernateUtil.getInstance().getEntityName(containerID);
+      final HibernateStore store = HibernateThreadContext.getCurrentStoreAccessor().getStore();
+      final EClass containerEClass = store.getEClass(entityName);
+      final int featureID = InternalEObject.EOPPOSITE_FEATURE_BASE - cdoRevision.getContainingFeatureID();
+      final EStructuralFeature eFeature = containerEClass.getEStructuralFeature(featureID);
+      return strCDOID + SEPARATOR + "-" + eFeature.getName(); //$NON-NLS-1$
+    }
+
+    final EClass eContainedEClass = cdoRevision.getEClass();
+    final EStructuralFeature eFeature = eContainedEClass.getEStructuralFeature(cdoRevision.getContainingFeatureID());
+    return strCDOID + SEPARATOR + eFeature.getName();
+  }
+
+  /**
+   * Converts the String generated by the method {@link #convertContainerRelationToString(InternalCDORevision)} back to
+   * container information and sets this in the cdoRevision.
+   *
+   * @param cdoRevision
+   *          the InternalCDORevision in which the container info is stored.
+   * @param containerInfo
+   *          the containerInfo coded as a String
+   */
+  public void setContainerRelationFromString(InternalCDORevision cdoRevision, String containerInfo)
+  {
+    if (containerInfo == null)
+    {
+      return;
+    }
+
+    final int index = containerInfo.lastIndexOf(SEPARATOR);
+    if (index == -1)
+    {
+      // TODO: error condition?
+      return;
+    }
+
+    // get/set the container id
+    final CDOID containerID = HibernateUtil.getInstance().convertStringToCDOID(containerInfo.substring(0, index));
+    cdoRevision.setContainerID(containerID);
+
+    final String containerFeatureStr = containerInfo.substring(index + SEPARATOR.length());
+    if (containerID instanceof CDOIDExternal)
+    {
+      cdoRevision.setContainingFeatureID(Integer.parseInt(containerFeatureStr));
+      return;
+    }
+
+    if (containerFeatureStr.startsWith(CONTAINER_PREFIX))
+    {
+      // part of the container eClass
+      final CDOClassifierRef classifierRef = CDOIDUtil.getClassifierRef(containerID);
+      if (classifierRef == null)
+      {
+        throw new IllegalArgumentException("This CDOID type of " + containerID + " is not supported by this store."); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+
+      final EClass containerEClass = HibernateUtil.getInstance().getEClass(classifierRef);
+
+      // substring 1 because the string starts with a minus
+      final EStructuralFeature eFeature = containerEClass.getEStructuralFeature(containerFeatureStr.substring(1));
+      final int containerFeatureID = InternalEObject.EOPPOSITE_FEATURE_BASE - containerEClass.getFeatureID(eFeature);
+      cdoRevision.setContainingFeatureID(containerFeatureID);
+      return;
+    }
+
+    final EClass eContainedEClass = cdoRevision.getEClass();
+    final EStructuralFeature eFeature = eContainedEClass.getEStructuralFeature(containerFeatureStr);
+    cdoRevision.setContainingFeatureID(eContainedEClass.getFeatureID(eFeature));
+    return;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.java
new file mode 100644
index 0000000..727e683
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProvider.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2008-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+/**
+ * Reads the hibernate mapping file from one or more resource locations and adds them to the configuration.
+ *
+ * @author Martin Taal
+ */
+public class FileHibernateMappingProvider extends HibernateMappingProvider
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, FileHibernateMappingProvider.class);
+
+  private final String mappingFileLocation;
+
+  public FileHibernateMappingProvider(String mappingFileLocation)
+  {
+    if (mappingFileLocation == null || mappingFileLocation.length() == 0)
+    {
+      throw new IllegalArgumentException("mappingFileLocation"); //$NON-NLS-1$
+    }
+
+    this.mappingFileLocation = mappingFileLocation;
+  }
+
+  public String getMapping()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Adding hibernate mapping from location(s): " + mappingFileLocation); //$NON-NLS-1$
+    }
+
+    InputStream is = null;
+
+    try
+    {
+      is = getClass().getResourceAsStream(mappingFileLocation);
+
+      if (is == null)
+      {
+        final File file = OMPlatform.INSTANCE.getConfigFile(mappingFileLocation);
+        if (file.exists())
+        {
+          is = new FileInputStream(file);
+        }
+      }
+
+      StringBuilder sb = new StringBuilder();
+      String line;
+      BufferedReader reader = new BufferedReader(new InputStreamReader(is, CDOHibernateConstants.UTF8));
+      while ((line = reader.readLine()) != null)
+      {
+        sb.append(line).append(CDOHibernateConstants.NL);
+      }
+      return sb.toString();
+    }
+    catch (Exception e)
+    {
+      throw WrappedException.wrap(e);
+    }
+    finally
+    {
+      IOUtil.close(is);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.java
new file mode 100644
index 0000000..19b8215
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/FileHibernateMappingProviderFactory.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+
+import org.eclipse.net4j.util.StringUtil;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * Reads the hibernate mapping file from one or more resource locations and adds them to the configuration.
+ *
+ * @author Martin Taal
+ */
+public class FileHibernateMappingProviderFactory implements IHibernateMappingProvider.Factory
+{
+  public static final String TYPE = "file"; //$NON-NLS-1$
+
+  private static final String FILE_ELEMENT_TAG_NAME = "mappingFile"; //$NON-NLS-1$
+
+  private static final String LOCATION_ATTRIBUTE_NAME = "location"; //$NON-NLS-1$
+
+  public FileHibernateMappingProviderFactory()
+  {
+  }
+
+  public String getType()
+  {
+    return TYPE;
+  }
+
+  public FileHibernateMappingProvider create(Element config)
+  {
+    NodeList mappingFileConfigs = config.getElementsByTagName(FILE_ELEMENT_TAG_NAME);
+    if (mappingFileConfigs.getLength() != 1)
+    {
+      throw new IllegalArgumentException("Zero or More than one mapping file location specified, only one location is supported."); //$NON-NLS-1$
+    }
+
+    final Element mappingFile = (Element)mappingFileConfigs.item(0);
+    final String location = mappingFile.getAttribute(LOCATION_ATTRIBUTE_NAME);
+    if (StringUtil.isEmpty(location))
+    {
+      throw new IllegalArgumentException("Mapping file location is empty"); //$NON-NLS-1$
+    }
+
+    return new FileHibernateMappingProvider(location);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.java
new file mode 100644
index 0000000..a115816
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateAuditHandler.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.teneo.hibernate.HbDataStore;
+import org.eclipse.emf.teneo.hibernate.auditing.AuditHandler;
+import org.eclipse.emf.teneo.hibernate.auditing.AuditVersionProvider;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditEntry;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditKind;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Utility methods to support auditing in the hibernate store.
+ * An internal class.
+ *
+ * @author Martin Taal
+ */
+public class HibernateAuditHandler
+{
+  private HibernateStore hibernateStore;
+
+  private HbDataStore cdoDataStore;
+
+  public CDOAuditHandler getCDOAuditHandler()
+  {
+    return (CDOAuditHandler)cdoDataStore.getAuditHandler();
+  }
+
+  public InternalCDORevision readRevisionByVersion(Session session, CDOID id, int version)
+  {
+    final CDOClassifierRef classifierRef = CDOIDUtil.getClassifierRef(id);
+    if (classifierRef == null)
+    {
+      throw new IllegalArgumentException("This CDOID type of " + id + " is not supported by this store."); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+    final EClass eClass = HibernateUtil.getInstance().getEClass(classifierRef);
+    AuditVersionProvider auditVersionProvider = cdoDataStore.getAuditVersionProvider();
+    auditVersionProvider.setSession(session);
+    final TeneoAuditEntry auditEntry = auditVersionProvider.getAuditEntryForVersion(eClass, id, version);
+    return (InternalCDORevision)getCDORevision(session, auditEntry);
+  }
+
+  public InternalCDORevision readRevision(Session session, CDOID id, long timeStamp)
+  {
+    final CDOClassifierRef classifierRef = CDOIDUtil.getClassifierRef(id);
+    if (classifierRef == null)
+    {
+      throw new IllegalArgumentException("This CDOID type of " + id + " is not supported by this store."); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+    final EClass eClass = HibernateUtil.getInstance().getEClass(classifierRef);
+    final CDORevision revision = getCDORevision(session, eClass, id, timeStamp);
+    return (InternalCDORevision)revision;
+  }
+
+  public CDORevision getCDORevision(Session session, EClass eClass, Object id, long timeStamp)
+  {
+    AuditVersionProvider auditVersionProvider = cdoDataStore.getAuditVersionProvider();
+    auditVersionProvider.setSession(session);
+    long useTimeStamp = timeStamp;
+    if (useTimeStamp == 0)
+    {
+      // use the last revision
+      useTimeStamp = Long.MAX_VALUE;
+    }
+    final TeneoAuditEntry auditEntry = auditVersionProvider.getAuditEntry(eClass, id, useTimeStamp);
+    return getCDORevision(session, auditEntry);
+  }
+
+  public CDORevision getCDORevision(Session session, TeneoAuditEntry teneoAuditEntry)
+  {
+    final CDORevision revision = convertAuditEntryToCDORevision(teneoAuditEntry);
+    return revision;
+  }
+
+  protected CDORevision convertAuditEntryToCDORevision(TeneoAuditEntry teneoAuditEntry)
+  {
+    if (teneoAuditEntry == null)
+    {
+      return null;
+    }
+    final HibernateStoreAccessor storeAccessor = HibernateThreadContext.getCurrentStoreAccessor();
+    final EClass domainEClass = getCDOAuditHandler().getModelElement(teneoAuditEntry.eClass());
+    final CDOID cdoID = HibernateUtil.getInstance().convertStringToCDOID(teneoAuditEntry.getTeneo_object_id());
+    final InternalCDORevision revision;
+    if (teneoAuditEntry.getTeneo_audit_kind() == TeneoAuditKind.DELETE)
+    {
+      revision = new DetachedCDORevision(domainEClass, cdoID, hibernateStore.getRepository().getBranchManager().getMainBranch(),
+          new Long(teneoAuditEntry.getTeneo_object_version()).intValue(), teneoAuditEntry.getTeneo_start(), CDOBranchPoint.UNSPECIFIED_DATE);
+      revision.setRevised(CDOBranchPoint.UNSPECIFIED_DATE);
+    }
+    else
+    {
+      revision = hibernateStore.createRevision(domainEClass, cdoID);
+      revision.setVersion(new Long(teneoAuditEntry.getTeneo_object_version()).intValue());
+      revision.setBranchPoint(storeAccessor.getStore().getMainBranchHead().getBranch().getPoint(teneoAuditEntry.getTeneo_start()));
+      if (teneoAuditEntry.getTeneo_end() > 0)
+      {
+        revision.setRevised(teneoAuditEntry.getTeneo_end());
+      }
+      else
+      {
+        revision.setRevised(CDOBranchPoint.UNSPECIFIED_DATE);
+      }
+      convertContent(teneoAuditEntry, revision);
+    }
+    return revision;
+  }
+
+  protected void convertContent(TeneoAuditEntry auditEntry, InternalCDORevision cdoRevision)
+  {
+    final EClass auditingEClass = auditEntry.eClass();
+    for (EStructuralFeature targetEFeature : cdoRevision.getEClass().getEAllStructuralFeatures())
+    {
+      final EStructuralFeature sourceEFeature = auditingEClass.getEStructuralFeature(targetEFeature.getName());
+      if (sourceEFeature == null)
+      {
+        continue;
+      }
+      if (!auditEntry.eIsSet(sourceEFeature) && !sourceEFeature.isMany())
+      {
+        continue;
+      }
+      if (sourceEFeature.isMany())
+      {
+        for (Object value : (Collection<?>)auditEntry.eGet(sourceEFeature))
+        {
+          cdoRevision.getOrCreateList(targetEFeature).add(convertValue(targetEFeature, value));
+        }
+      }
+      else
+      {
+        final Object value = auditEntry.eGet(sourceEFeature);
+        cdoRevision.setValue(targetEFeature, convertValue(targetEFeature, value));
+      }
+    }
+
+    if (auditEntry.getTeneo_container_id() != null)
+    {
+      cdoRevision.setContainerID(HibernateUtil.getInstance().convertStringToCDOID(auditEntry.getTeneo_container_id()));
+      cdoRevision.setContainingFeatureID(auditEntry.getTeneo_container_feature_id());
+    }
+
+    final String resourceID = auditEntry.getTeneo_resourceid();
+    if (resourceID != null)
+    {
+      cdoRevision.setResourceID(HibernateUtil.getInstance().convertStringToCDOID(resourceID));
+    }
+  }
+
+  private Object convertValue(EStructuralFeature targetEFeature, Object value)
+  {
+    if (value == null)
+    {
+      final Object defaultValue = targetEFeature.getDefaultValue();
+      if (defaultValue == null)
+      {
+        return null;
+      }
+      final boolean handleUnsetAsNull = getCdoDataStore().getPersistenceOptions().getHandleUnsetAsNull();
+      if (!handleUnsetAsNull && targetEFeature.isUnsettable())
+      {
+        // there was a default value so was explicitly set to null
+        // otherwise the default value would be in the db
+        return CDORevisionData.NIL;
+      }
+      return null;
+    }
+    if (targetEFeature instanceof EReference)
+    {
+      final CDOID cdoID = value instanceof CDOID ? (CDOID)value : HibernateUtil.getInstance().convertStringToCDOID((String)value);
+      return cdoID;
+    }
+    if (value instanceof Enumerator)
+    {
+      return ((Enumerator)value).getValue();
+    }
+    if (value instanceof EEnumLiteral)
+    {
+      return ((EEnumLiteral)value).getValue();
+    }
+    if (value instanceof String && targetEFeature.getEType() instanceof EEnum)
+    {
+      return ((EEnum)targetEFeature.getEType()).getEEnumLiteralByLiteral((String)value).getValue();
+    }
+    return value;
+  }
+
+  public List<?> getCDOResources(Session session, CDOID folderId, long timeStamp)
+  {
+    final AuditHandler auditHandler = getCDOAuditHandler();
+    final EClass auditEClass = auditHandler.getAuditingModelElement(EresourcePackage.eINSTANCE.getCDOResourceNode());
+    final String entityName = cdoDataStore.toEntityName(auditEClass);
+    return getCDOResources(session, folderId, timeStamp, entityName);
+  }
+
+  public List<?> getCDOResources(Session session, CDOID folderId, long timeStamp, String entityName)
+  {
+    final AuditHandler auditHandler = getCDOAuditHandler();
+    String idStr = null;
+    if (folderId != null)
+    {
+      idStr = auditHandler.idToString(EresourcePackage.eINSTANCE.getCDOResourceFolder(), CDOIDUtil.getLong(folderId));
+    }
+
+    final String qryStr = "select e from " + entityName + " e where e.folder" + (idStr == null ? " is null " : "=:folder")
+        + " and (e.teneo_end=-1 or e.teneo_end>:end) and e.teneo_start<=:start";
+    final Query qry = session.createQuery(qryStr);
+    if (idStr != null)
+    {
+      qry.setParameter("folder", idStr);
+    }
+    qry.setParameter("start", timeStamp);
+    qry.setParameter("end", timeStamp);
+    return qry.list();
+  }
+
+  public void handleRevisionsByEClass(Session session, EClass eClass, CDORevisionHandler handler, long timeStamp)
+  {
+    AuditVersionProvider auditVersionProvider = cdoDataStore.getAuditVersionProvider();
+    auditVersionProvider.setSession(session);
+    final List<TeneoAuditEntry> teneoAuditEntries = auditVersionProvider.getSpecificAuditEntries(eClass, timeStamp);
+    for (TeneoAuditEntry teneoAuditEntry : teneoAuditEntries)
+    {
+      final CDORevision cdoRevision = getCDORevision(session, teneoAuditEntry);
+
+      // if a subclass ignore
+      if (cdoRevision.getEClass() != eClass)
+      {
+        continue;
+      }
+
+      if (!handler.handleRevision(cdoRevision))
+      {
+        return;
+      }
+    }
+  }
+
+  public HbDataStore getCdoDataStore()
+  {
+    return cdoDataStore;
+  }
+
+  public void setCdoDataStore(HbDataStore cdoDataStore)
+  {
+    this.cdoDataStore = cdoDataStore;
+  }
+
+  public HibernateStore getHibernateStore()
+  {
+    return hibernateStore;
+  }
+
+  public void setHibernateStore(HibernateStore hibernateStore)
+  {
+    this.hibernateStore = hibernateStore;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java
new file mode 100644
index 0000000..7d9b2d7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCDOPackageUnitDTO.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.IOUtil;
+
+import org.hibernate.Session;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.sql.Blob;
+
+/**
+ * A DTO for convenience of storing a CDOPackageUnit in the db.
+ *
+ * @author Martin Taal
+ */
+public class HibernateCDOPackageUnitDTO
+{
+  private CDOPackageUnit.Type originalType;
+
+  private long timeStamp;
+
+  private InternalCDOPackageInfo[] packageInfos;
+
+  private byte[] ePackageByteArray;
+
+  private Blob ePackageBlob;
+
+  public HibernateCDOPackageUnitDTO()
+  {
+  }
+
+  public HibernateCDOPackageUnitDTO(CDOPackageUnit cdoPackageUnit)
+  {
+    setPackageInfos((InternalCDOPackageInfo[])cdoPackageUnit.getPackageInfos());
+    setOriginalType(cdoPackageUnit.getOriginalType());
+    setTimeStamp(cdoPackageUnit.getTimeStamp());
+  }
+
+  public CDOPackageUnit.Type getOriginalType()
+  {
+    return originalType;
+  }
+
+  public void setOriginalType(CDOPackageUnit.Type originalType)
+  {
+    this.originalType = originalType;
+  }
+
+  public long getTimeStamp()
+  {
+    return timeStamp;
+  }
+
+  public void setTimeStamp(long timeStamp)
+  {
+    this.timeStamp = timeStamp;
+  }
+
+  public InternalCDOPackageInfo[] getPackageInfos()
+  {
+    return packageInfos;
+  }
+
+  public void setPackageInfos(InternalCDOPackageInfo[] packageInfos)
+  {
+    this.packageInfos = packageInfos;
+  }
+
+  public byte[] getEPackageByteArray()
+  {
+    return ePackageByteArray;
+  }
+
+  public void setEPackageByteArray(Session session, byte[] ePackageByteArray)
+  {
+    this.ePackageByteArray = ePackageByteArray;
+    ePackageBlob = session.getLobHelper().createBlob(ePackageByteArray);
+  }
+
+  public void setEPackageBlob(Blob ePackageBlob)
+  {
+    ePackageByteArray = toByteArray(ePackageBlob);
+  }
+
+  private byte[] toByteArray(Blob blob)
+  {
+    try
+    {
+      final InputStream is = blob.getBinaryStream();
+      final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+      int dataSize;
+      final byte[] buffer = new byte[4000];
+
+      try
+      {
+        while ((dataSize = is.read(buffer)) != -1)
+        {
+          bos.write(buffer, 0, dataSize);
+        }
+      }
+      finally
+      {
+        IOUtil.close(is);
+      }
+
+      return bos.toByteArray();
+    }
+    catch (Exception e)
+    {
+      throw WrappedException.wrap(e);
+    }
+  }
+
+  /**
+   * NOTE: should not be called directly only by Hibernate when persisting
+   * use {@link #setEPackageByteArray(Session, byte[])}
+   */
+  public Blob getEPackageBlob()
+  {
+    return ePackageBlob;
+  }
+
+  public InternalCDOPackageUnit createCDOPackageUnit(InternalCDOPackageRegistry packageRegistry)
+  {
+    InternalCDOPackageUnit packageUnit = (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
+    packageUnit.setOriginalType(originalType);
+    packageUnit.setTimeStamp(timeStamp);
+    packageUnit.setPackageRegistry(packageRegistry);
+    packageUnit.setPackageInfos(packageInfos);
+    for (CDOPackageInfo packageInfo : packageInfos)
+    {
+      ((InternalCDOPackageInfo)packageInfo).setPackageUnit(packageUnit);
+    }
+
+    return packageUnit;
+  }
+
+  public String getNsUri()
+  {
+    return getPackageInfos()[0].getPackageURI();
+  }
+
+  public void setNsUri(String nsUri)
+  {
+    // ignore
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.java
new file mode 100644
index 0000000..ddbdd33
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateCommitContext.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2008-2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+
+import java.util.Map;
+
+/**
+ * A HibernateCommitContext contains the commitcontext as well as support for direct (hashmap) based search for a new or
+ * changed object using the id.
+ *
+ * @author Martin Taal
+ */
+public class HibernateCommitContext
+{
+  private InternalCommitContext commitContext;
+
+  private Map<CDOID, InternalCDORevision> dirtyObjects;
+
+  private Map<CDOID, InternalCDORevision> newObjects;
+
+  private boolean inDoWrite = false;
+
+  public InternalCommitContext getCommitContext()
+  {
+    return commitContext;
+  }
+
+  public void setCommitContext(InternalCommitContext commitContext)
+  {
+    this.commitContext = commitContext;
+  }
+
+  // initialize is not done when the commitContext is set because it appeared
+  // that at that moment the temp id's are not repaired. The initialize method
+  // is called on demand.
+  protected void initialize()
+  {
+    if (dirtyObjects != null)
+    {
+      return;
+    }
+
+    dirtyObjects = CDOIDUtil.createMap();
+    for (InternalCDORevision cdoRevision : commitContext.getDirtyObjects())
+    {
+      dirtyObjects.put(cdoRevision.getID(), cdoRevision);
+    }
+
+    newObjects = CDOIDUtil.createMap();
+    for (InternalCDORevision cdoRevision : commitContext.getNewObjects())
+    {
+      newObjects.put(cdoRevision.getID(), cdoRevision);
+    }
+  }
+
+  public InternalCDORevision getDirtyObject(CDOID id)
+  {
+    initialize();
+    return dirtyObjects.get(id);
+  }
+
+  public InternalCDORevision getNewObject(CDOID id)
+  {
+    initialize();
+    return newObjects.get(id);
+  }
+
+  public void setNewID(CDOID oldId, CDOID newId)
+  {
+    initialize();
+    InternalCDORevision cdoRevision;
+    if ((cdoRevision = dirtyObjects.get(oldId)) != null)
+    {
+      dirtyObjects.remove(oldId);
+      dirtyObjects.put(newId, cdoRevision);
+      return;
+    }
+
+    if ((cdoRevision = newObjects.get(oldId)) != null)
+    {
+      newObjects.remove(oldId);
+      newObjects.put(newId, cdoRevision);
+      return;
+    }
+  }
+
+  public boolean isInDoWrite()
+  {
+    return inDoWrite;
+  }
+
+  public void setInDoWrite(boolean inDoWrite)
+  {
+    this.inDoWrite = inDoWrite;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.java
new file mode 100644
index 0000000..1d6ebb1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateMappingProvider.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class HibernateMappingProvider implements IHibernateMappingProvider
+{
+  private IHibernateStore hibernateStore;
+
+  public HibernateMappingProvider()
+  {
+  }
+
+  /**
+   * @return the hibernate store, never <code>null</code>.
+   * @throws IllegalStateException
+   *           if the hibernate store is <code>null</code>.
+   */
+  public IHibernateStore getHibernateStore()
+  {
+    if (hibernateStore == null)
+    {
+      throw new IllegalStateException("hibernateStore is null"); //$NON-NLS-1$
+    }
+
+    return hibernateStore;
+  }
+
+  public void setHibernateStore(IHibernateStore hibernateStore)
+  {
+    this.hibernateStore = hibernateStore;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
new file mode 100644
index 0000000..d0daf7c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernatePackageHandler.java
@@ -0,0 +1,504 @@
+/*
+ * Copyright (c) 2008-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal  - moved code from HibernateStore to this class
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.tool.hbm2ddl.SchemaExport;
+import org.hibernate.tool.hbm2ddl.SchemaUpdate;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Delegate which stores and retrieves cdo packages.
+ * <p>
+ * TODO extend {@link Lifecycle}. See {@link #doActivate()} and {@link #doDeactivate()}.
+ *
+ * @author Eike Stepper
+ * @author Martin Taal
+ */
+public class HibernatePackageHandler extends Lifecycle
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernatePackageHandler.class);
+
+  private static final boolean ZIP_PACKAGE_BYTES = true;
+
+  private static final String CDO_PACKAGE_UNIT_ENTITY_NAME = "CDOPackageUnit"; //$NON-NLS-1$
+
+  private static final String META_HBM_PATH = "mappings/meta.hbm.xml"; //$NON-NLS-1$
+
+  private static final String HBM2DLL_UPDATE = "update"; //$NON-NLS-1$
+
+  private static final String HBM2DLL_CREATE = "create"; //$NON-NLS-1$
+
+  // made static and synchronized because apparently there can be multiple package handlers
+  // in some test cases: TestExternalReferenceTest.testOneXMIResourceManyViewsOnOneResourceSet
+  private static synchronized boolean writePackageUnits(InternalCDOPackageUnit[] packageUnits, SessionFactory sessionFactory, EPackage.Registry registry)
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Persisting new EPackages"); //$NON-NLS-1$
+    }
+
+    Session session = sessionFactory.openSession();
+    Transaction tx = session.beginTransaction();
+    boolean err = true;
+    boolean updated = false;
+
+    try
+    {
+      // first store and update the packageunits and the epackages
+      for (InternalCDOPackageUnit packageUnit : packageUnits)
+      {
+        final HibernateCDOPackageUnitDTO hbPackageUnitDTO = new HibernateCDOPackageUnitDTO(packageUnit);
+
+        if (packageUnit.getPackageInfos().length > 0)
+        {
+          final String rootNSUri = packageUnit.getTopLevelPackageInfo().getPackageURI();
+          final EPackage rootEPackage = registry.getEPackage(rootNSUri);
+          hbPackageUnitDTO.setEPackageByteArray(session, EMFUtil.getEPackageBytes(rootEPackage, true, registry));
+        }
+
+        session.saveOrUpdate(CDO_PACKAGE_UNIT_ENTITY_NAME, hbPackageUnitDTO);
+
+        updated = true;
+      }
+
+      tx.commit();
+      err = false;
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace(System.err);
+      throw WrappedException.wrap(e);
+    }
+    finally
+    {
+      if (err)
+      {
+        tx.rollback();
+      }
+
+      session.close();
+    }
+
+    return updated;
+  }
+
+  private Configuration configuration;
+
+  private SessionFactory sessionFactory;
+
+  private int nextPackageID;
+
+  private int nextClassID;
+
+  private int nextFeatureID;
+
+  private Collection<InternalCDOPackageUnit> packageUnits;
+
+  private Map<String, byte[]> ePackageBlobsByRootUri = new HashMap<String, byte[]>();
+
+  private Map<String, EPackage[]> ePackagesByRootUri = new HashMap<String, EPackage[]>();
+
+  private HibernateStore hibernateStore;
+
+  private boolean doDropSchema;
+
+  /**
+   * TODO Necessary to pass/store/dump the properties from the store?
+   */
+  public HibernatePackageHandler(HibernateStore store)
+  {
+    hibernateStore = store;
+  }
+
+  /**
+   * @return the full list of EPackages registered in the PackageRegistry of the commit context as well as the EPackages
+   *         registered earlier.
+   * @see CommitContext#getPackageRegistry()
+   * @see InternalRepository#getPackageRegistry()
+   */
+  public List<EPackage> getEPackages()
+  {
+    List<EPackage> ePackages = new ArrayList<EPackage>();
+    final InternalRepository localRepository = hibernateStore.getRepository();
+
+    for (EPackage ePackage : localRepository.getPackageRegistry(false).getEPackages())
+    {
+      ePackages.add(ePackage);
+    }
+
+    for (EPackage ePackage : localRepository.getPackageRegistry(true).getEPackages())
+    {
+      boolean alreadyPresent = false;
+      for (EPackage ePackagePresent : ePackages)
+      {
+        if (ePackagePresent.getNsURI().equals(ePackage.getNsURI()))
+        {
+          alreadyPresent = true;
+          break;
+        }
+      }
+
+      if (!alreadyPresent)
+      {
+        ePackages.add(ePackage);
+      }
+    }
+
+    return ePackages;
+  }
+
+  private InternalCDOPackageRegistry getPackageRegistry()
+  {
+    return hibernateStore.getRepository().getPackageRegistry();
+  }
+
+  public void writePackageUnits(InternalCDOPackageUnit[] packageUnits)
+  {
+    final boolean updated = writePackageUnits(packageUnits, getSessionFactory(), getPackageRegistry());
+    if (updated)
+    {
+      reset();
+      hibernateStore.reInitialize();
+    }
+  }
+
+  public Collection<InternalCDOPackageUnit> getPackageUnits()
+  {
+    readPackageUnits();
+    return packageUnits;
+  }
+
+  public EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)
+  {
+    final String nsUri = packageUnit.getTopLevelPackageInfo().getPackageURI();
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Reading EPackages with root uri " + nsUri + " from db"); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    EPackage[] epacks = ePackagesByRootUri.get(nsUri);
+    if (epacks == null)
+    {
+      final byte[] ePackageBlob = ePackageBlobsByRootUri.get(nsUri);
+      if (ePackageBlob == null)
+      {
+        throw new IllegalArgumentException("EPackages with root uri " + nsUri + " not found"); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+
+      ResourceSet resourceSet = EMFUtil.newEcoreResourceSet(getPackageRegistry());
+      final EPackage rootEPackage = EMFUtil.createEPackage(nsUri, ePackageBlob, ZIP_PACKAGE_BYTES, resourceSet, false);
+      epacks = EMFUtil.getAllPackages(rootEPackage);
+      ePackagesByRootUri.put(nsUri, epacks);
+    }
+
+    return epacks;
+  }
+
+  @SuppressWarnings("unchecked")
+  protected void readPackageUnits()
+  {
+    if (packageUnits == null || packageUnits.size() == 0)
+    {
+      if (TRACER.isEnabled())
+      {
+        TRACER.trace("Reading Package Units from db"); //$NON-NLS-1$
+      }
+
+      Session session = getSessionFactory().openSession();
+
+      try
+      {
+        Criteria criteria = session.createCriteria(CDO_PACKAGE_UNIT_ENTITY_NAME);
+        List<?> list = criteria.list();
+        if (TRACER.isEnabled())
+        {
+          TRACER.trace("Found " + list.size() + " CDOPackageUnits in DB"); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+
+        CDOModelUtil.createPackageUnit();
+
+        packageUnits = new ArrayList<InternalCDOPackageUnit>();
+        for (HibernateCDOPackageUnitDTO dto : (Collection<HibernateCDOPackageUnitDTO>)list)
+        {
+          packageUnits.add(dto.createCDOPackageUnit(getPackageRegistry()));
+          // cache the blob because resolving the epackages right away gives errors
+          ePackageBlobsByRootUri.put(dto.getNsUri(), dto.getEPackageByteArray());
+        }
+      }
+      finally
+      {
+        session.close();
+      }
+    }
+
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Finished reading Package Units"); //$NON-NLS-1$
+    }
+  }
+
+  @SuppressWarnings("deprecation")
+  public synchronized SessionFactory getSessionFactory()
+  {
+    if (sessionFactory == null)
+    {
+      sessionFactory = configuration.buildSessionFactory();
+    }
+
+    return sessionFactory;
+  }
+
+  public synchronized int getNextPackageID()
+  {
+    return nextPackageID++;
+  }
+
+  public synchronized int getNextClassID()
+  {
+    return nextClassID++;
+  }
+
+  public synchronized int getNextFeatureID()
+  {
+    return nextFeatureID++;
+  }
+
+  public void reset()
+  {
+    packageUnits = null;
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    super.doActivate();
+    initConfiguration();
+    initSchema();
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    if (sessionFactory != null)
+    {
+      sessionFactory.close();
+      sessionFactory = null;
+    }
+
+    if (doDropSchema)
+    {
+      final SchemaExport se = new SchemaExport(configuration);
+      se.drop(false, true);
+    }
+
+    configuration = null;
+    super.doDeactivate();
+  }
+
+  protected void initConfiguration()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Initializing configuration for CDO metadata"); //$NON-NLS-1$
+    }
+
+    InputStream in = null;
+
+    try
+    {
+      in = OM.BUNDLE.getInputStream(META_HBM_PATH);
+      configuration = new Configuration();
+      configuration.addInputStream(in);
+
+      // note this store adapts the properties so create a copy from the
+      // one received from the hibernate store
+      final Properties props = new Properties();
+      props.putAll(hibernateStore.getProperties());
+      configuration.setProperties(props);
+
+      // prevent the drop at session factory close...
+      // the drop is done by the de-activate
+      if (configuration.getProperty(Environment.HBM2DDL_AUTO) != null && configuration.getProperty(Environment.HBM2DDL_AUTO).startsWith(HBM2DLL_CREATE))
+      {
+        doDropSchema = true;
+        // note that the value create also re-creates the db and drops the old one
+        configuration.setProperty(Environment.HBM2DDL_AUTO, HBM2DLL_UPDATE);
+      }
+      else
+      {
+        doDropSchema = false;
+      }
+    }
+    catch (Exception ex)
+    {
+      throw WrappedException.wrap(ex);
+    }
+    finally
+    {
+      IOUtil.close(in);
+    }
+  }
+
+  SystemInformation getSystemInformation()
+  {
+    Session session = getSessionFactory().openSession();
+    session.beginTransaction();
+    try
+    {
+      final Criteria c = session.createCriteria(SystemInformation.class);
+      List<?> l = c.list();
+      int records = l.size();
+
+      final SystemInformation systemInformation;
+      if (records == 0)
+      {
+        systemInformation = new SystemInformation();
+        systemInformation.setFirstTime(true);
+        systemInformation.setCreationTime(System.currentTimeMillis());
+        session.save(systemInformation);
+      }
+      else if (records == 1)
+      {
+        systemInformation = (SystemInformation)l.get(0);
+        systemInformation.setFirstTime(false);
+      }
+      else
+      {
+        throw new IllegalStateException("More than one record in the cdo_system_information table");
+      }
+
+      return systemInformation;
+    }
+    finally
+    {
+      session.getTransaction().commit();
+      session.close();
+    }
+  }
+
+  Map<String, String> getSystemProperties()
+  {
+    Session session = getSessionFactory().openSession();
+    session.beginTransaction();
+
+    try
+    {
+      final Map<String, String> result = new HashMap<String, String>();
+      final Criteria c = session.createCriteria(SystemProperty.class);
+      for (Object o : c.list())
+      {
+        final SystemProperty systemProperty = (SystemProperty)o;
+        result.put(systemProperty.getName(), systemProperty.getValue());
+      }
+
+      return result;
+    }
+    finally
+    {
+      session.getTransaction().commit();
+      session.close();
+    }
+  }
+
+  void setSystemProperties(Map<String, String> properties)
+  {
+    Session session = getSessionFactory().openSession();
+    session.beginTransaction();
+
+    try
+    {
+      final Map<String, SystemProperty> currentValues = new HashMap<String, SystemProperty>();
+      final Criteria c = session.createCriteria(SystemProperty.class);
+      for (Object o : c.list())
+      {
+        final SystemProperty systemProperty = (SystemProperty)o;
+        currentValues.put(systemProperty.getName(), systemProperty);
+      }
+
+      // update remove currentones
+      final Map<String, String> newValues = new HashMap<String, String>();
+      for (String key : properties.keySet())
+      {
+        if (currentValues.containsKey(key))
+        {
+          final SystemProperty systemProperty = currentValues.get(key);
+          if (properties.get(key) == null)
+          {
+            session.delete(systemProperty);
+          }
+          else
+          {
+            systemProperty.setValue(properties.get(key));
+            session.update(systemProperty);
+          }
+        }
+        else
+        {
+          newValues.put(key, properties.get(key));
+        }
+      }
+
+      // store the new ones
+      for (String key : newValues.keySet())
+      {
+        final SystemProperty systemProperty = new SystemProperty();
+        systemProperty.setName(key);
+        systemProperty.setValue(newValues.get(key));
+        session.save(systemProperty);
+      }
+    }
+    finally
+    {
+      session.getTransaction().commit();
+      session.close();
+    }
+  }
+
+  protected void initSchema()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Updating db schema for Hibernate PackageHandler"); //$NON-NLS-1$
+    }
+
+    new SchemaUpdate(configuration).execute(true, true);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.java
new file mode 100644
index 0000000..34e1ac5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateQueryHandler.java
@@ -0,0 +1,294 @@
+/*
+ * Copyright (c) 2009-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
+import org.eclipse.emf.cdo.internal.common.branch.CDOBranchVersionImpl;
+import org.eclipse.emf.cdo.server.IQueryContext;
+import org.eclipse.emf.cdo.server.IQueryHandler;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditEntry;
+
+import org.hibernate.Query;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+
+/**
+ * Implements server side HQL query execution..
+ *
+ * @author Martin Taal
+ */
+public class HibernateQueryHandler implements IQueryHandler
+{
+
+  private HibernateStoreAccessor hibernateStoreAccessor;
+
+  private HibernateAuditHandler hibernateAuditHandler;
+
+  /**
+   * Executes hql queries. Gets the session from the {@link HibernateStoreAccessor} creates a hibernate query and sets
+   * the parameters taken from the {@link CDOQueryInfo#getParameters()}. Takes into account the
+   * {@link CDOQueryInfo#getMaxResults()} and the {@link IHibernateStore#FIRST_RESULT} values for paging.
+   *
+   * @param info
+   *          the object containing the query and parameters
+   * @param context
+   *          the query results are placed in the context
+   * @see IQueryHandler#executeQuery(CDOQueryInfo, IQueryContext)
+   */
+  public void executeQuery(CDOQueryInfo info, IQueryContext context)
+  {
+    // get a transaction, the hibernateStoreAccessor is placed in a threadlocal
+    // so all db access uses the same session.
+    final Session session = hibernateStoreAccessor.getHibernateSession();
+    try
+    {
+      // create the query
+      final Query query = session.createQuery(info.getQueryString());
+      query.setReadOnly(true);
+
+      // get the parameters with some parameter conversion
+      int firstResult = -1;
+      boolean cacheResults = true;
+      for (String key : info.getParameters().keySet())
+      {
+        if (key.compareToIgnoreCase(IHibernateStore.CACHE_RESULTS) == 0)
+        {
+          try
+          {
+            cacheResults = (Boolean)info.getParameters().get(key);
+          }
+          catch (ClassCastException e)
+          {
+            throw new IllegalArgumentException("Parameter " + IHibernateStore.CACHE_RESULTS + " must be a boolean. errorMessage " + e.getMessage()); //$NON-NLS-1$
+          }
+        }
+        else if (key.compareToIgnoreCase(IHibernateStore.FIRST_RESULT) == 0)
+        {
+          final Object o = info.getParameters().get(key);
+          if (o != null)
+          {
+            try
+            {
+              firstResult = (Integer)o;
+            }
+            catch (ClassCastException e)
+            {
+              throw new IllegalArgumentException("Parameter firstResult must be an integer but it is a " + o //$NON-NLS-1$
+                  + " class " + o.getClass().getName()); //$NON-NLS-1$
+            }
+          }
+        }
+        else
+        {
+          // in case the parameter is a CDOID get the object from the db
+          final Object param = info.getParameters().get(key);
+          if (param instanceof CDOID && HibernateUtil.getInstance().isStoreCreatedID((CDOID)param))
+          {
+            final CDOID id = (CDOID)param;
+            final String entityName = HibernateUtil.getInstance().getEntityName(id);
+            final Serializable idValue = HibernateUtil.getInstance().getIdValue(id);
+            final CDORevision revision = (CDORevision)session.get(entityName, idValue);
+            query.setEntity(key, revision);
+            if (cacheResults)
+            {
+              addToRevisionCache(revision);
+            }
+          }
+          else
+          {
+            query.setParameter(key, param);
+          }
+        }
+      }
+
+      // set the first result
+      if (firstResult > -1)
+      {
+        query.setFirstResult(firstResult);
+      }
+
+      // the max result
+      if (info.getMaxResults() != CDOQueryInfo.UNLIMITED_RESULTS)
+      {
+        query.setMaxResults(info.getMaxResults());
+      }
+
+      final ScrollableResults scroller = query.scroll(ScrollMode.FORWARD_ONLY);
+
+      // and go for the query
+      // future extension: support iterate, scroll through a parameter
+      int i = 0;
+      try
+      {
+        while (scroller.next())
+        {
+          Object[] os = scroller.get();
+          Object o;
+          if (os.length == 1)
+          {
+            o = handleAuditEntries(os[0]);
+          }
+          else
+          {
+            o = handleAuditEntries(os);
+          }
+
+          final boolean addOneMore = context.addResult(o);
+          if (cacheResults && o instanceof CDORevision)
+          {
+            addToRevisionCache((CDORevision)o);
+          }
+          if (o instanceof InternalCDORevision)
+          {
+            ((InternalCDORevision)o).freeze();
+          }
+
+          // clear the session every 1000 results or so
+          if (i++ % 1000 == 0)
+          {
+            session.clear();
+          }
+
+          if (!addOneMore)
+          {
+            return;
+          }
+        }
+      }
+      finally
+      {
+        scroller.close();
+      }
+    }
+    finally
+    {
+      session.close();
+    }
+  }
+
+  private Object handleAuditEntries(Object o)
+  {
+    if (o.getClass().isArray())
+    {
+      for (int i = 0; i < Array.getLength(o); i++)
+      {
+        Array.set(o, i, handleAuditEntry(Array.get(o, i)));
+      }
+      return o;
+    }
+    return handleAuditEntry(o);
+  }
+
+  private Object handleAuditEntry(Object o)
+  {
+    if (!(o instanceof TeneoAuditEntry))
+    {
+      // repair revision numbers
+      if (o instanceof InternalCDORevision && hibernateStoreAccessor.getStore().isAuditing())
+      {
+        final InternalCDORevision internalCDORevision = (InternalCDORevision)o;
+        // a later revision, get the previous revision
+        if (internalCDORevision.getVersion() > 1)
+        {
+          final CDORevision previousVersion = getPreviousRevision(internalCDORevision);
+          if (previousVersion != null)
+          {
+            internalCDORevision.setBranchPoint(hibernateStoreAccessor.getStore().getMainBranchHead().getBranch().getPoint(1 + previousVersion.getRevised()));
+          }
+        }
+      }
+
+      return o;
+    }
+    return hibernateAuditHandler.convertAuditEntryToCDORevision((TeneoAuditEntry)o);
+  }
+
+  private CDORevision getPreviousRevision(InternalCDORevision internalCDORevision)
+  {
+    final InternalCDORevisionManager cdoRevisionManager = hibernateStoreAccessor.getStore().getRepository().getRevisionManager();
+
+    final CDOBranchVersion cdoBranchVersion = new CDOBranchVersionImpl(hibernateStoreAccessor.getStore().getMainBranchHead().getBranch(),
+        internalCDORevision.getVersion() - 1);
+    if (cdoRevisionManager.containsRevisionByVersion(internalCDORevision.getID(), cdoBranchVersion))
+    {
+      return cdoRevisionManager.getRevisionByVersion(internalCDORevision.getID(), cdoBranchVersion, -1, true);
+    }
+    return hibernateStoreAccessor.readRevisionByVersion(internalCDORevision.getID(), cdoBranchVersion, -1, cdoRevisionManager);
+  }
+
+  private void addToRevisionCache(CDORevision revision)
+  {
+    final InternalCDORevision internalRevision = (InternalCDORevision)revision;
+    for (EStructuralFeature feature : revision.getEClass().getEAllStructuralFeatures())
+    {
+      if (!isMappedFeature(internalRevision, feature))
+      {
+        continue;
+      }
+
+      if (feature.isMany() || feature instanceof EReference)
+      {
+        final Object value = internalRevision.getValue(feature);
+        if (value instanceof WrappedHibernateList)
+        {
+          // force the size to be cached
+          ((WrappedHibernateList)value).size();
+        }
+      }
+    }
+
+    hibernateStoreAccessor.addToRevisionCache(revision);
+  }
+
+  private boolean isMappedFeature(InternalCDORevision revision, EStructuralFeature feature)
+  {
+    try
+    {
+      int featureID = revision.getClassInfo().getEClass().getFeatureID(feature);
+      revision.getClassInfo().getPersistentFeatureIndex(featureID);
+      return true;
+    }
+    catch (IllegalArgumentException ex)
+    {
+      return false;
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      return false;
+    }
+  }
+
+  public HibernateStoreAccessor getHibernateStoreAccessor()
+  {
+    return hibernateStoreAccessor;
+  }
+
+  public void setHibernateStoreAccessor(HibernateStoreAccessor hibernateStoreAccessor)
+  {
+    this.hibernateStoreAccessor = hibernateStoreAccessor;
+    hibernateAuditHandler = hibernateStoreAccessor.getStore().getHibernateAuditHandler();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.java
new file mode 100644
index 0000000..f080e6e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateRawCommitContext.java
@@ -0,0 +1,415 @@
+/*
+ * Copyright (c) 2012, 2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDReference;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.CDOLockState;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+import org.eclipse.emf.cdo.spi.server.InternalTransaction;
+
+import org.eclipse.net4j.util.concurrent.RWOLockManager.LockState;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+
+import org.eclipse.emf.ecore.EClass;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Used during raw import.
+ *
+ * @author Martin Taal
+ */
+public class HibernateRawCommitContext implements InternalCommitContext
+{
+  private Map<CDOID, CDOID> idMappings = CDOIDUtil.createMap();
+
+  private List<InternalCDORevision> dirtyObjects = new ArrayList<InternalCDORevision>();
+
+  private List<InternalCDORevision> newObjects = new ArrayList<InternalCDORevision>();
+
+  private int idCounter = 1;
+
+  private CDOBranchPoint branchPoint;
+
+  private boolean usingEcore;
+
+  private boolean usingEtypes;
+
+  public CDORevision getRevision(CDOID id)
+  {
+    for (CDORevision cdoRevision : newObjects)
+    {
+      if (id.equals(cdoRevision.getID()))
+      {
+        return cdoRevision;
+      }
+    }
+    for (CDORevision cdoRevision : dirtyObjects)
+    {
+      if (id.equals(cdoRevision.getID()))
+      {
+        return cdoRevision;
+      }
+    }
+    return null;
+  }
+
+  public CDOBranchPoint getBranchPoint()
+  {
+    if (branchPoint == null)
+    {
+      branchPoint = new CDOHibernateBranchPointImpl(System.currentTimeMillis());
+    }
+    return branchPoint;
+  }
+
+  public long getPreviousTimeStamp()
+  {
+    return 0;
+  }
+
+  public String getUserID()
+  {
+    return null;
+  }
+
+  public String getCommitComment()
+  {
+    return null;
+  }
+
+  public CDOBranchPoint getCommitMergeSource()
+  {
+    return null;
+  }
+
+  public long getLastUpdateTime()
+  {
+    return 0;
+  }
+
+  public long getTimeStamp()
+  {
+    return 0;
+  }
+
+  public boolean isTreeRestructuring()
+  {
+    return CDORevisionUtil.isTreeRestructuring(getDirtyObjectDeltas());
+  }
+
+  public void setLastTreeRestructuringCommit(long lastTreeRestructuringCommit)
+  {
+  }
+
+  @Deprecated
+  public boolean isAutoReleaseLocksEnabled()
+  {
+    return false;
+  }
+
+  public InternalCDOPackageRegistry getPackageRegistry()
+  {
+    return HibernateThreadContext.getCurrentStoreAccessor().getStore().getRepository().getPackageRegistry();
+  }
+
+  public boolean isClearResourcePathCache()
+  {
+    return false;
+  }
+
+  public boolean isUsingEcore()
+  {
+    return usingEcore;
+  }
+
+  public boolean isUsingEtypes()
+  {
+    return usingEtypes;
+  }
+
+  public InternalCDOPackageUnit[] getNewPackageUnits()
+  {
+    return new InternalCDOPackageUnit[0];
+  }
+
+  public CDOLockState[] getLocksOnNewObjects()
+  {
+    return null;
+  }
+
+  public CDOID[] getIDsToUnlock()
+  {
+    return null;
+  }
+
+  public InternalCDORevision[] getNewObjects()
+  {
+    return newObjects.toArray(new InternalCDORevision[0]);
+  }
+
+  public InternalCDORevision[] getDirtyObjects()
+  {
+    return dirtyObjects.toArray(new InternalCDORevision[0]);
+  }
+
+  public void addNewObject(InternalCDORevision cdoRevision)
+  {
+    cdoRevision.setVersion(1);
+    CDOID newCDOID = CDOIDUtil.createTempObject(idCounter++);
+    addIDMapping(cdoRevision.getID(), newCDOID);
+    cdoRevision.setID(newCDOID);
+    cdoRevision.setBranchPoint(getBranchPoint());
+    newObjects.add(cdoRevision);
+  }
+
+  public void addDirtyObject(InternalCDORevision cdoRevision)
+  {
+    cdoRevision.setBranchPoint(getBranchPoint());
+    dirtyObjects.add(cdoRevision);
+  }
+
+  public InternalCDORevisionDelta[] getDirtyObjectDeltas()
+  {
+    return null;
+  }
+
+  public CDOID[] getDetachedObjects()
+  {
+    return new CDOID[0];
+  }
+
+  public Map<CDOID, EClass> getDetachedObjectTypes()
+  {
+    return Collections.emptyMap();
+  }
+
+  public CDOBranchVersion[] getDetachedObjectVersions()
+  {
+    return new CDOBranchVersion[0];
+  }
+
+  public Map<CDOID, InternalCDORevision> getOldRevisions()
+  {
+    return null;
+  }
+
+  public Map<CDOID, InternalCDORevision> getNewRevisions()
+  {
+    return null;
+  }
+
+  public ExtendedDataInputStream getLobs()
+  {
+    return null;
+  }
+
+  public Map<CDOID, CDOID> getIDMappings()
+  {
+    return idMappings;
+  }
+
+  public CDOCommitInfo createCommitInfo()
+  {
+    return null;
+  }
+
+  public byte getRollbackReason()
+  {
+    return CDOProtocolConstants.ROLLBACK_REASON_UNKNOWN;
+  }
+
+  public String getRollbackMessage()
+  {
+    return null;
+  }
+
+  public List<CDOIDReference> getXRefs()
+  {
+    return null;
+  }
+
+  public List<LockState<Object, IView>> getPostCommmitLockStates()
+  {
+    return null;
+  }
+
+  public void setDirtyObjects(List<InternalCDORevision> dirtyObjects)
+  {
+    this.dirtyObjects = dirtyObjects;
+  }
+
+  public void setNewObjects(List<InternalCDORevision> newObjects)
+  {
+    this.newObjects = newObjects;
+  }
+
+  public IStoreAccessor getAccessor()
+  {
+    return null;
+  }
+
+  public void preWrite()
+  {
+  }
+
+  public void write(OMMonitor monitor)
+  {
+  }
+
+  public void commit(OMMonitor monitor)
+  {
+  }
+
+  public void rollback(String message)
+  {
+  }
+
+  public void postCommit(boolean success)
+  {
+  }
+
+  public InternalCDORevision[] getDetachedRevisions()
+  {
+    return new InternalCDORevision[0];
+  }
+
+  public InternalCDORevision[] getDetachedRevisions(boolean check)
+  {
+    return getDetachedRevisions();
+  }
+
+  public void setClearResourcePathCache(boolean clearResourcePathCache)
+  {
+  }
+
+  public void setUsingEcore(boolean usingEcore)
+  {
+    this.usingEcore = usingEcore;
+  }
+
+  public void setUsingEtypes(boolean usingEtypes)
+  {
+    this.usingEtypes = usingEtypes;
+  }
+
+  public void setNewPackageUnits(InternalCDOPackageUnit[] newPackageUnits)
+  {
+  }
+
+  public void setLocksOnNewObjects(CDOLockState[] locksOnNewObjects)
+  {
+  }
+
+  public void setIDsToUnlock(CDOID[] idsToUnlock)
+  {
+  }
+
+  public void setNewObjects(InternalCDORevision[] newObjects)
+  {
+  }
+
+  public void setDirtyObjectDeltas(InternalCDORevisionDelta[] dirtyObjectDeltas)
+  {
+  }
+
+  public void setDetachedObjects(CDOID[] detachedObjects)
+  {
+  }
+
+  public void setDetachedObjectTypes(Map<CDOID, EClass> detachedObjectTypes)
+  {
+  }
+
+  public void setDetachedObjectVersions(CDOBranchVersion[] detachedObjectVersions)
+  {
+  }
+
+  public void setLastUpdateTime(long lastUpdateTime)
+  {
+  }
+
+  @Deprecated
+  public void setAutoReleaseLocksEnabled(boolean on)
+  {
+  }
+
+  public void setCommitNumber(int commitNumber)
+  {
+  }
+
+  public void setCommitComment(String comment)
+  {
+  }
+
+  public void setCommitMergeSource(CDOBranchPoint mergeSource)
+  {
+  }
+
+  public void setLobs(ExtendedDataInputStream in)
+  {
+  }
+
+  public void addIDMapping(CDOID oldID, CDOID newID)
+  {
+    // this can happen if an id is recreated to itself
+    idMappings.remove(newID);
+    idMappings.put(oldID, newID);
+  }
+
+  public void applyIDMappings(OMMonitor monitor)
+  {
+  }
+
+  public InternalTransaction getTransaction()
+  {
+    return null;
+  }
+
+  public byte getSecurityImpact()
+  {
+    return 0;
+  }
+
+  public <T> T getData(Object key)
+  {
+    return null;
+  }
+
+  public <T> T setData(Object key, T data)
+  {
+    return null;
+  }
+
+  public void setSecurityImpact(byte securityImpact, Set<? extends Object> impactedRules)
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java
new file mode 100644
index 0000000..4d8b853
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStore.java
@@ -0,0 +1,891 @@
+/*
+ * Copyright (c) 2008-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - moved cdopackage handler to other class, changed configuration
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOID.ObjectType;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.etypes.EtypesPackage;
+import org.eclipse.emf.cdo.internal.server.TransactionCommitContext.TransactionPackageRegistry;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOInterceptor;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOMergeEventListener;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.server.Store;
+import org.eclipse.emf.cdo.spi.server.StoreAccessorPool;
+
+import org.eclipse.net4j.db.DBException;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.teneo.Constants;
+import org.eclipse.emf.teneo.PackageRegistryProvider;
+import org.eclipse.emf.teneo.PersistenceOptions;
+import org.eclipse.emf.teneo.annotations.mapper.PersistenceMappingBuilder;
+import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedModel;
+import org.eclipse.emf.teneo.hibernate.EMFInterceptor;
+import org.eclipse.emf.teneo.hibernate.HbDataStore;
+import org.eclipse.emf.teneo.hibernate.HbSessionDataStore;
+import org.eclipse.emf.teneo.hibernate.auditing.AuditHandler;
+import org.eclipse.emf.teneo.hibernate.auditing.AuditProcessHandler;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditEntry;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoauditingPackage;
+import org.eclipse.emf.teneo.hibernate.mapper.HibernateMappingGenerator;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.event.service.spi.EventListenerRegistry;
+import org.hibernate.event.spi.EventType;
+import org.hibernate.internal.SessionFactoryImpl;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.service.ServiceRegistry;
+import org.hibernate.tool.hbm2ddl.SchemaExport;
+import org.hibernate.type.StandardBasicTypes;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ * @author Martin Taal
+ */
+public class HibernateStore extends Store implements IHibernateStore
+{
+  public static final String PERSISTENCE_XML = PersistenceOptions.PERSISTENCE_XML;
+
+  public static final String TYPE = "hibernate"; //$NON-NLS-1$
+
+  public static final String ID_TYPE_EANNOTATION_SOURCE = "teneo.cdo";
+
+  public static final String ID_TYPE_EANNOTATION_KEY = "id_type";
+
+  public static final Set<ObjectType> OBJECT_ID_TYPES = new HashSet<ObjectType>(
+      Arrays.asList(CDOID.ObjectType.STRING_WITH_CLASSIFIER, CDOID.ObjectType.LONG_WITH_CLASSIFIER));
+
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernateStore.class);
+
+  private static final String RESOURCE_HBM_PATH = "mappings/resource.hbm.xml"; //$NON-NLS-1$
+
+  private static final String HBM2DLL_UPDATE = "update"; //$NON-NLS-1$
+
+  private static final String HBM2DLL_CREATE = "create"; //$NON-NLS-1$
+
+  /**
+   * Used to give different extensions of Hibernate a context when initializing
+   */
+  private static ThreadLocal<HibernateStore> currentHibernateStore = new ThreadLocal<HibernateStore>();
+
+  private HbSessionDataStore cdoDataStore;
+
+  private HibernateAuditHandler hibernateAuditHandler;
+
+  private HibernatePackageHandler packageHandler;
+
+  private IHibernateMappingProvider mappingProvider;
+
+  private boolean doDropSchema;
+
+  private SystemInformation systemInformation;
+
+  private List<EPackage> auditEPackages;
+
+  private Map<String, String> identifierPropertyNameByEntity;
+
+  private Properties properties;
+
+  // is initialized on get
+  private CDOBranchPoint mainBranchHead;
+
+  private String mappingXml = null;
+
+  public HibernateStore(IHibernateMappingProvider mappingProvider)
+  {
+    this(mappingProvider, null);
+  }
+
+  public HibernateStore(IHibernateMappingProvider mappingProvider, Properties properties)
+  {
+    super(TYPE, OBJECT_ID_TYPES, set(ChangeFormat.REVISION), set(RevisionTemporality.NONE, RevisionTemporality.AUDITING), set(RevisionParallelism.NONE));
+    this.mappingProvider = mappingProvider;
+    packageHandler = new HibernatePackageHandler(this);
+    this.properties = properties;
+
+    if (TRACER.isEnabled() && mappingProvider != null)
+    {
+      TRACER.trace("HibernateStore with mappingProvider " + mappingProvider.getClass().getName()); //$NON-NLS-1$
+    }
+  }
+
+  public boolean isAuditing()
+  {
+    return getRevisionTemporality() == RevisionTemporality.AUDITING;
+  }
+
+  public CDOBranchPoint getMainBranchHead()
+  {
+    if (mainBranchHead == null)
+    {
+      mainBranchHead = getRepository().getBranchManager().getMainBranch().getHead();
+    }
+
+    return mainBranchHead;
+  }
+
+  public String getIdentifierPropertyName(String entityName)
+  {
+    return identifierPropertyNameByEntity.get(entityName);
+  }
+
+  public boolean isMapped(EClass eClass)
+  {
+    return null != cdoDataStore.toEntityName(eClass);
+  }
+
+  public Properties getProperties()
+  {
+    if (properties == null || properties.isEmpty())
+    {
+      properties = new Properties();
+
+      final Map<String, String> storeProps = getRepository().getProperties();
+      for (String key : storeProps.keySet())
+      {
+        properties.setProperty(key, storeProps.get(key));
+      }
+    }
+
+    return properties;
+  }
+
+  public void addEntityNameEClassMapping(String entityName, EClass eClass)
+  {
+    cdoDataStore.addEntityNameEClassMapping(entityName, eClass);
+  }
+
+  /**
+   * Returns all model epackages, so no audit epackages or system
+   * epackages.
+   */
+  public List<EPackage> getModelEPackages()
+  {
+    final List<EPackage> epacks = getPackageHandler().getEPackages();
+    final ListIterator<EPackage> iterator = epacks.listIterator();
+    while (iterator.hasNext())
+    {
+      final EPackage epack = iterator.next();
+      if (CDOModelUtil.isSystemPackage(epack) && epack != EtypesPackage.eINSTANCE)
+      {
+        iterator.remove();
+      }
+      else if (isAuditEPackage(epack))
+      {
+        // an auditing package
+        iterator.remove();
+      }
+    }
+    return epacks;
+  }
+
+  private boolean isAuditEPackage(EPackage ePackage)
+  {
+    return TeneoauditingPackage.eNS_URI.equals(ePackage.getNsURI()) || ePackage.getEAnnotation(Constants.ANNOTATION_SOURCE_AUDITING) != null;
+  }
+
+  public String getEntityName(EClass eClass)
+  {
+    if (eClass == null)
+    {
+      throw new IllegalArgumentException("EClass argument is null"); //$NON-NLS-1$
+    }
+    final String entityName = cdoDataStore.toEntityName(eClass);
+    if (entityName == null)
+    {
+      throw new IllegalArgumentException("EClass " + eClass.getName() //$NON-NLS-1$
+          + " does not have an entity name, has it been mapped to Hibernate?"); //$NON-NLS-1$
+    }
+
+    return entityName;
+  }
+
+  public String getEntityName(CDOClassifierRef classifierRef)
+  {
+    if (classifierRef == null)
+    {
+      throw new IllegalArgumentException("classifierRef argument is null"); //$NON-NLS-1$
+    }
+
+    EClass eClass = (EClass)classifierRef.resolve(getRepository().getPackageRegistry());
+
+    // initialize everything
+    getHibernateSessionFactory();
+
+    final String entityName = cdoDataStore.toEntityName(eClass);
+    if (entityName == null)
+    {
+      throw new IllegalArgumentException("EClass " + classifierRef //$NON-NLS-1$
+          + " does not have an entity name, has it been mapped to Hibernate?"); //$NON-NLS-1$
+    }
+
+    return entityName;
+  }
+
+  public EClass getEClass(String entityName)
+  {
+    if (entityName == null)
+    {
+      throw new IllegalArgumentException("entityname argument is null"); //$NON-NLS-1$
+    }
+
+    final EClass eClass = cdoDataStore.toEClass(entityName);
+    if (eClass == null)
+    {
+      throw new IllegalArgumentException("entityname " + entityName //$NON-NLS-1$
+          + " does not map to an EClass, has it been mapped to Hibernate?"); //$NON-NLS-1$
+    }
+
+    return eClass;
+  }
+
+  public Configuration getHibernateConfiguration()
+  {
+    return cdoDataStore.getConfiguration();
+  }
+
+  public synchronized SessionFactory getHibernateSessionFactory()
+  {
+    if (cdoDataStore == null)
+    {
+      if (TRACER.isEnabled())
+      {
+        TRACER.trace("Initializing SessionFactory for HibernateStore"); //$NON-NLS-1$
+      }
+
+      currentHibernateStore.set(this);
+
+      identifierPropertyNameByEntity = new HashMap<String, String>();
+
+      try
+      {
+        initDataStore();
+
+        // this has to be done before the classmapping is iterated
+        // otherwise it is not initialized
+        SessionFactory hibernateSessionFactory = cdoDataStore.getSessionFactory();
+        ServiceRegistry serviceRegistry = ((SessionFactoryImpl)hibernateSessionFactory).getServiceRegistry();
+        final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
+        eventListenerRegistry.setListeners(EventType.MERGE, new CDOMergeEventListener());
+
+        final Iterator<?> iterator = cdoDataStore.getConfiguration().getClassMappings();
+        while (iterator.hasNext())
+        {
+          final PersistentClass pc = (PersistentClass)iterator.next();
+          if (pc.getIdentifierProperty() == null)
+          {
+            // happens for featuremaps for now...
+            continue;
+          }
+
+          identifierPropertyNameByEntity.put(pc.getEntityName(), pc.getIdentifierProperty().getName());
+        }
+      }
+      catch (Throwable t)
+      {
+        t.printStackTrace(System.err);
+        if (TRACER.isEnabled())
+        {
+          TRACER.trace(t);
+        }
+        throw new RuntimeException(t);
+      }
+      finally
+      {
+        currentHibernateStore.set(null);
+      }
+    }
+
+    return cdoDataStore.getSessionFactory();
+  }
+
+  public void ensureCorrectPackageRegistry()
+  {
+    if (cdoDataStore == null)
+    {
+      return;
+    }
+    if (cdoDataStore.getPackageRegistry() instanceof TransactionPackageRegistry)
+    {
+      setInternalPackageRegistry();
+    }
+  }
+
+  private synchronized void setInternalPackageRegistry()
+  {
+    cdoDataStore.setPackageRegistry(getRepository().getPackageRegistry(false));
+  }
+
+  public Connection getConnection()
+  {
+    String connectionURL = getProperties().getProperty("hibernate.connection.url");
+    String userName = getProperties().getProperty("hibernate.connection.username");
+    String passWord = getProperties().getProperty("hibernate.connection.password");
+
+    try
+    {
+      Connection connection = DriverManager.getConnection(connectionURL, userName, passWord);
+      if (connection == null)
+      {
+        throw new DBException("No connection from driver manager: " + connectionURL); //$NON-NLS-1$
+      }
+
+      String autoCommit = getProperties().getProperty("hibernate.connection.autocommit");
+      if (autoCommit != null)
+      {
+        connection.setAutoCommit(Boolean.valueOf(autoCommit));
+      }
+
+      return connection;
+    }
+    catch (SQLException ex)
+    {
+      throw new DBException(ex);
+    }
+  }
+
+  @Deprecated
+  public boolean isLocal(CDOID id)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public CDOID createObjectID(String val)
+  {
+    final int index = val.lastIndexOf(CDOClassifierRef.URI_SEPARATOR);
+    if (index == -1)
+    {
+      throw new IllegalArgumentException("Id string " + val + " is not a valid id");
+    }
+
+    final String uriPart = val.substring(0, index);
+    final String idPart = val.substring(index + 1);
+    final CDOClassifierRef classifierRef = new CDOClassifierRef(uriPart);
+    final String entityName = getEntityName(classifierRef);
+    final EClass eClass = getEClass(entityName);
+    final EAnnotation typeEAnnotation = eClass.getEAnnotation(ID_TYPE_EANNOTATION_SOURCE);
+    if (typeEAnnotation == null)
+    {
+      throw new IllegalStateException("EClass " + eClass + " does not have a type annotation");
+    }
+
+    final String idTypeStr = typeEAnnotation.getDetails().get(ID_TYPE_EANNOTATION_KEY);
+    if (StandardBasicTypes.STRING.getName().equals(idTypeStr))
+    {
+      return HibernateUtil.getInstance().createCDOID(classifierRef, idPart);
+    }
+    else if (StandardBasicTypes.LONG.getName().equals(idTypeStr))
+    {
+      return HibernateUtil.getInstance().createCDOID(classifierRef, new Long(idPart));
+    }
+    else
+    {
+      throw new IllegalArgumentException("ID type " + idTypeStr + " not supported ");
+    }
+  }
+
+  @Override
+  public HibernateStoreAccessor createReader(ISession session)
+  {
+    return new HibernateStoreAccessor(this, session);
+  }
+
+  @Override
+  public HibernateStoreAccessor createWriter(ITransaction transaction)
+  {
+    return new HibernateStoreAccessor(this, transaction);
+  }
+
+  public Map<String, String> getPersistentProperties(Set<String> names)
+  {
+    final Map<String, String> result = packageHandler.getSystemProperties();
+    if (names == null || names.isEmpty())
+    {
+      return result;
+    }
+    final Map<String, String> filteredResult = new HashMap<String, String>();
+    for (String name : names)
+    {
+      if (result.containsKey(name))
+      {
+        filteredResult.put(name, result.get(name));
+      }
+    }
+    return filteredResult;
+  }
+
+  public void setPersistentProperties(Map<String, String> properties)
+  {
+    packageHandler.setSystemProperties(properties);
+  }
+
+  public void removePersistentProperties(Set<String> names)
+  {
+    final Map<String, String> props = getPersistentProperties(null);
+    for (String name : names)
+    {
+      props.remove(name);
+    }
+    setPersistentProperties(props);
+  }
+
+  public synchronized int getNextPackageID()
+  {
+    return packageHandler.getNextPackageID();
+  }
+
+  public synchronized int getNextClassID()
+  {
+    return packageHandler.getNextClassID();
+  }
+
+  public synchronized int getNextFeatureID()
+  {
+    return packageHandler.getNextFeatureID();
+  }
+
+  public long getCreationTime()
+  {
+    return getSystemInformation().getCreationTime();
+  }
+
+  public void setCreationTime(long creationTime)
+  {
+    getSystemInformation().setCreationTime(creationTime);
+  }
+
+  public HibernatePackageHandler getPackageHandler()
+  {
+    return packageHandler;
+  }
+
+  // TODO: synchronize??
+  @Override
+  protected void doActivate() throws Exception
+  {
+    super.doActivate();
+    packageHandler.activate();
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    Configuration configuration = null;
+    if (cdoDataStore != null)
+    {
+      configuration = cdoDataStore.getConfiguration();
+      if (TRACER.isEnabled())
+      {
+        TRACER.trace("Closing SessionFactory"); //$NON-NLS-1$
+      }
+      cdoDataStore.close();
+    }
+
+    // and now do the drop action
+    if (configuration != null && doDropSchema)
+    {
+      final SchemaExport se = new SchemaExport(configuration);
+      se.drop(false, true);
+    }
+
+    cdoDataStore = null;
+    hibernateAuditHandler = null;
+    // get rid of the audit epackages
+    if (auditEPackages != null)
+    {
+      for (EPackage ePackage : auditEPackages)
+      {
+        getRepository().getPackageRegistry().remove(ePackage.getNsURI());
+      }
+      auditEPackages = null;
+    }
+    LifecycleUtil.deactivate(packageHandler, OMLogger.Level.WARN);
+    super.doDeactivate();
+  }
+
+  @Override
+  protected StoreAccessorPool getReaderPool(ISession session, boolean forReleasing)
+  {
+    // TODO Consider usings multiple pools for readers (e.g. bound to the session context)
+    return null;
+  }
+
+  @Override
+  protected StoreAccessorPool getWriterPool(IView view, boolean forReleasing)
+  {
+    // TODO Consider usings multiple pools for writers (e.g. bound to the session context)
+    return null;
+  }
+
+  // is called after a new package has been added
+  // TODO: synchronize??
+  // TODO: combine with doActivate/doDeactivate??
+  // TODO: assumes that packageHandler has been reset
+  protected void reInitialize()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Re-Initializing HibernateStore"); //$NON-NLS-1$
+    }
+
+    if (cdoDataStore != null)
+    {
+      if (!cdoDataStore.isClosed())
+      {
+        if (TRACER.isEnabled())
+        {
+          TRACER.trace("Closing SessionFactory"); //$NON-NLS-1$
+        }
+
+        cdoDataStore.close();
+      }
+
+      cdoDataStore = null;
+    }
+  }
+
+  protected void initDataStore()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Initializing Configuration"); //$NON-NLS-1$
+    }
+
+    InputStream in = null;
+
+    try
+    {
+      PackageRegistryProvider.getInstance().setThreadPackageRegistry(getRepository().getPackageRegistry());
+
+      cdoDataStore = new CDODataStore();
+      hibernateAuditHandler = new HibernateAuditHandler();
+      hibernateAuditHandler.setCdoDataStore(cdoDataStore);
+      hibernateAuditHandler.setHibernateStore(this);
+
+      cdoDataStore.setResetConfigurationOnInitialization(false);
+      cdoDataStore.setName("cdo");
+      cdoDataStore.setPackageRegistry(getRepository().getPackageRegistry());
+      cdoDataStore.getExtensionManager().registerExtension(EMFInterceptor.class.getName(), CDOInterceptor.class.getName());
+      cdoDataStore.getExtensionManager().registerExtension(AuditHandler.class.getName(), CDOAuditHandler.class.getName());
+      cdoDataStore.getExtensionManager().registerExtension(AuditProcessHandler.class.getName(), CDOAuditProcessHandler.class.getName());
+
+      // don't do any persistence xml mapping in this datastore
+      // make a local copy as it is adapted in the next if-statement
+      // and we want to keep the original one untouched, if not
+      // subsequent test runs will fail as they use the same
+      // properties object
+      final Properties props = new Properties();
+      props.putAll(getProperties());
+      props.remove(PersistenceOptions.PERSISTENCE_XML);
+
+      if (!props.containsKey(PersistenceOptions.HANDLE_UNSET_AS_NULL))
+      {
+        props.setProperty(PersistenceOptions.HANDLE_UNSET_AS_NULL, "true");
+      }
+
+      cdoDataStore.setDataStoreProperties(props);
+      Configuration hibernateConfiguration = cdoDataStore.getConfiguration();
+
+      if (mappingProvider != null)
+      {
+        mappingProvider.setHibernateStore(this);
+        mappingXml = mappingProvider.getMapping();
+        hibernateConfiguration.addXML(mappingXml);
+      }
+
+      if (TRACER.isEnabled())
+      {
+        TRACER.trace("Adding resource.hbm.xml to configuration"); //$NON-NLS-1$
+      }
+
+      in = OM.BUNDLE.getInputStream(RESOURCE_HBM_PATH);
+      hibernateConfiguration.addInputStream(in);
+      // hibernateConfiguration.setInterceptor(new CDOInterceptor());
+
+      hibernateConfiguration.setProperties(props);
+
+      // prevent the drop on close because the sessionfactory is also closed when
+      // new packages are written to the db, so only do a real drop at deactivate
+      if (hibernateConfiguration.getProperty(Environment.HBM2DDL_AUTO) != null
+          && hibernateConfiguration.getProperty(Environment.HBM2DDL_AUTO).startsWith(HBM2DLL_CREATE))
+      {
+        doDropSchema = true;
+        // note that the value create also re-creates the db and drops the old one
+        hibernateConfiguration.setProperty(Environment.HBM2DDL_AUTO, HBM2DLL_UPDATE);
+        cdoDataStore.getDataStoreProperties().setProperty(Environment.HBM2DDL_AUTO, HBM2DLL_UPDATE);
+      }
+      else
+      {
+        doDropSchema = false;
+      }
+
+      final List<EPackage> ePackages = new ArrayList<EPackage>(packageHandler.getEPackages());
+
+      // get rid of the system packages
+      for (EPackage ePackage : packageHandler.getEPackages())
+      {
+        if (CDOModelUtil.isSystemPackage(ePackage) && ePackage != EtypesPackage.eINSTANCE)
+        {
+          ePackages.remove(ePackage);
+        }
+      }
+      // remove the persistence xml if no epackages as this won't work without
+      // epackages
+      if (ePackages.size() == 0 && props.getProperty(PersistenceOptions.PERSISTENCE_XML) != null)
+      {
+        cdoDataStore.getDataStoreProperties().remove(PersistenceOptions.PERSISTENCE_XML);
+      }
+
+      if (isAuditing())
+      {
+        auditEPackages = createAuditEPackages(cdoDataStore);
+        final String auditMapping = mapAuditingEPackages(cdoDataStore, auditEPackages);
+        // System.err.println(auditMapping);
+        hibernateConfiguration.addXML(auditMapping);
+        cdoDataStore.setAuditing(true);
+      }
+      cdoDataStore.setEPackages(ePackages.toArray(new EPackage[0]));
+    }
+    catch (Exception ex)
+    {
+      throw WrappedException.wrap(ex);
+    }
+    finally
+    {
+      PackageRegistryProvider.getInstance().setThreadPackageRegistry(null);
+      IOUtil.close(in);
+    }
+  }
+
+  public static HibernateStore getCurrentHibernateStore()
+  {
+    return currentHibernateStore.get();
+  }
+
+  public boolean isFirstStart()
+  {
+    return getSystemInformation().isFirstTime();
+  }
+
+  private SystemInformation getSystemInformation()
+  {
+    if (systemInformation == null)
+    {
+      systemInformation = getPackageHandler().getSystemInformation();
+    }
+
+    return systemInformation;
+  }
+
+  public String getMappingXml()
+  {
+    return mappingXml;
+  }
+
+  private List<EPackage> createAuditEPackages(HbDataStore dataStore)
+  {
+    final PersistenceOptions po = dataStore.getPersistenceOptions();
+
+    final List<EPackage> epacks = new ArrayList<EPackage>();
+    for (EPackage ePackage : getModelEPackages())
+    {
+      if (!CDOModelUtil.isSystemPackage(ePackage) && !isAuditEPackage(ePackage))
+      {
+        epacks.add(dataStore.getAuditHandler().createAuditingEPackage(dataStore, ePackage, getRepository().getPackageRegistry(), po));
+      }
+    }
+    epacks.add(dataStore.getAuditHandler().createAuditingEPackage(dataStore, getRepository().getPackageRegistry().getEPackage(EresourcePackage.eNS_URI),
+        getRepository().getPackageRegistry(), po));
+
+    epacks.add(TeneoauditingPackage.eINSTANCE);
+
+    getRepository().getPackageRegistry().put(TeneoauditingPackage.eNS_URI, TeneoauditingPackage.eINSTANCE);
+
+    // also register them all in the non-transaction registry
+    for (EPackage ePackage : epacks)
+    {
+      getRepository().getPackageRegistry(false).put(ePackage.getNsURI(), ePackage);
+    }
+    return epacks;
+  }
+
+  public String mapAuditingEPackages(HbDataStore dataStore, List<EPackage> auditEPackages)
+  {
+    // create a new persistence options to not change the original
+    final Properties props = new Properties();
+    props.putAll(dataStore.getPersistenceOptions().getProperties());
+    props.remove(PersistenceOptions.PERSISTENCE_XML);
+    if (props.containsKey(PersistenceOptions.AUDITING_PERSISTENCE_XML))
+    {
+      props.setProperty(PersistenceOptions.PERSISTENCE_XML, PersistenceOptions.AUDITING_PERSISTENCE_XML);
+    }
+    final PersistenceOptions po = dataStore.getExtensionManager().getExtension(PersistenceOptions.class, new Object[] { props });
+    PAnnotatedModel paModel = dataStore.getExtensionManager().getExtension(PersistenceMappingBuilder.class).buildMapping(auditEPackages, po,
+        dataStore.getExtensionManager(), dataStore.getPackageRegistry());
+    final HibernateMappingGenerator hmg = dataStore.getExtensionManager().getExtension(HibernateMappingGenerator.class);
+    hmg.setPersistenceOptions(po);
+    final String hbm = hmg.generateToString(paModel);
+
+    return hbm;
+  }
+
+  private class CDODataStore extends HbSessionDataStore
+  {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void addContainerMapping(PersistentClass pc)
+    {
+      // prevent container mapping for cdo objects
+      if (pc.getTuplizerMap() != null)
+      {
+        for (Object tuplizerName : pc.getTuplizerMap().values())
+        {
+          if (((String)tuplizerName).contains("org.eclipse.emf.cdo"))
+          {
+            return;
+          }
+        }
+      }
+      super.addContainerMapping(pc);
+    }
+
+    @Override
+    protected void mapModel()
+    {
+      if (getPersistenceOptions().getMappingFilePath() != null || getPersistenceOptions().isUseMappingFile())
+      {
+        super.mapModel();
+      }
+    }
+  }
+
+  public HibernateAuditHandler getHibernateAuditHandler()
+  {
+    ensureCorrectPackageRegistry();
+    return hibernateAuditHandler;
+  }
+
+  public void setHibernateAuditHandler(HibernateAuditHandler hibernateAuditHandler)
+  {
+    this.hibernateAuditHandler = hibernateAuditHandler;
+  }
+
+  public static class CDOAuditProcessHandler extends AuditProcessHandler
+  {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected long getCommitTime()
+    {
+      if (HibernateThreadContext.isCommitContextSet())
+      {
+        return HibernateThreadContext.getCommitContext().getCommitContext().getBranchPoint().getTimeStamp();
+      }
+      return super.getCommitTime();
+    }
+
+    @Override
+    protected void doAuditWorkInSession(Session session, List<AuditWork> auditWorks)
+    {
+      try
+      {
+        PackageRegistryProvider.getInstance().setThreadPackageRegistry(getDataStore().getPackageRegistry());
+
+        if (HibernateThreadContext.isCommitContextSet())
+        {
+          AuditProcessHandler.setCurrentUserName(HibernateThreadContext.getCommitContext().getCommitContext().getUserID());
+          AuditProcessHandler.setCurrentComment(HibernateThreadContext.getCommitContext().getCommitContext().getCommitComment());
+        }
+        super.doAuditWorkInSession(session, auditWorks);
+      }
+      finally
+      {
+        PackageRegistryProvider.getInstance().setThreadPackageRegistry(null);
+        AuditProcessHandler.setCurrentUserName(null);
+        AuditProcessHandler.setCurrentComment(null);
+      }
+    }
+
+    @Override
+    protected void setContainerInfo(Session session, TeneoAuditEntry auditEntry, Object entity)
+    {
+      if (!(entity instanceof InternalCDORevision))
+      {
+        return;
+      }
+      final InternalCDORevision cdoRevision = (InternalCDORevision)entity;
+
+      // set the resource id
+      if (cdoRevision.getResourceID() != null)
+      {
+        auditEntry.setTeneo_resourceid(getAuditHandler().entityToIdString(session, cdoRevision.getResourceID()));
+      }
+
+      if (cdoRevision.getContainerID() == null || cdoRevision.getContainerID() == CDOID.NULL)
+      {
+        return;
+      }
+
+      auditEntry.setTeneo_container_id(getAuditHandler().entityToIdString(session, cdoRevision.getContainerID()));
+      auditEntry.setTeneo_container_feature_id(cdoRevision.getContainingFeatureID());
+    }
+
+    @Override
+    protected boolean performVersionCheck()
+    {
+      return true;
+    }
+  }
+
+  public HbSessionDataStore getCDODataStore()
+  {
+    return cdoDataStore;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
new file mode 100644
index 0000000..8dd6449
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java
@@ -0,0 +1,1438 @@
+/*
+ * Copyright (c) 2008-2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - specific hibernate functionality
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lob.CDOLobHandler;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionCacheAdder;
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
+import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.IQueryHandler;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList;
+import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
+import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil;
+import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+import org.eclipse.emf.cdo.spi.server.Store;
+import org.eclipse.emf.cdo.spi.server.StoreAccessor;
+
+import org.eclipse.net4j.util.HexUtil;
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.collection.Pair;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.IOUtil;
+import org.eclipse.net4j.util.io.LimitedInputStream;
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.teneo.Constants;
+import org.eclipse.emf.teneo.PackageRegistryProvider;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditCommitInfo;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoAuditEntry;
+import org.eclipse.emf.teneo.hibernate.auditing.model.teneoauditing.TeneoauditingPackage;
+
+import org.hibernate.Criteria;
+import org.hibernate.FlushMode;
+import org.hibernate.Query;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.sql.Clob;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Implements the runtime behavior of accessing the hibernate store using queries and doing write and commit. The
+ * HibernateStoreAccessor corresponds roughly to a Hibernate session. It offers methods to create and close them and
+ * implements transaction handling. The main update/create/delete operations are done in the
+ * {@link #write(InternalCommitContext, OMMonitor)} method.
+ *
+ * @see HibernateStore
+ * @see HibernatePackageHandler
+ * @author Eike Stepper
+ * @author Martin Taal
+ */
+public class HibernateStoreAccessor extends StoreAccessor implements IHibernateStoreAccessor
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernateStoreAccessor.class);
+
+  private static final String NAME_EFEATURE_NAME = "name";//$NON-NLS-1$
+
+  // used to tag an ereference
+  private static final String TENEO_MAPPED_SOURCE = "teneo.mapped";
+
+  private static final String TENEO_UNMAPPED_SOURCE = "teneo.unmapped";
+
+  private Session hibernateSession;
+
+  private boolean errorOccured;
+
+  private int currentListChunk = -1;
+
+  private HibernateRawCommitContext rawCommitContext = new HibernateRawCommitContext();
+
+  public void addToRevisionCache(Object object)
+  {
+    if (object instanceof CDORevision)
+    {
+      getStore().getRepository().getRevisionManager().addRevision((CDORevision)object);
+    }
+    else if (object instanceof Object[])
+    {
+      // handle hibernate query result
+      final Object[] objects = (Object[])object;
+      for (Object o : objects)
+      {
+        addToRevisionCache(o);
+      }
+    }
+
+    // also primitive types can get here, ignore those
+  }
+
+  /**
+   * Constructor
+   *
+   * @param store
+   *          the {@link Store} used by the accessor.
+   * @param session
+   *          the client session (not a Hibernate Session)
+   */
+  public HibernateStoreAccessor(HibernateStore store, ISession session)
+  {
+    super(store, session);
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Created " + this.getClass().getName() + " for repository " + store.getRepository().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+  }
+
+  /**
+   * Constructor for a specific transaction
+   *
+   * @param store
+   *          the HibernateStore backing this accessor
+   * @param transaction
+   *          the client transaction (not the a Hibernate transaction)
+   */
+  public HibernateStoreAccessor(HibernateStore store, ITransaction transaction)
+  {
+    super(store, transaction);
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Created " + this.getClass().getName() + " for repository " + store.getRepository().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+  }
+
+  /**
+   * @return the backing store
+   */
+  @Override
+  public HibernateStore getStore()
+  {
+    return (HibernateStore)super.getStore();
+  }
+
+  /**
+   * Starts a hibernate session and begins a transaction.
+   *
+   * @since 2.0
+   */
+  public void beginHibernateSession()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Creating hibernate session and transaction"); //$NON-NLS-1$
+    }
+
+    assert hibernateSession == null;
+    final SessionFactory sessionFactory = getStore().getHibernateSessionFactory();
+    hibernateSession = sessionFactory.openSession();
+    hibernateSession.setDefaultReadOnly(true);
+    hibernateSession.setFlushMode(FlushMode.MANUAL);
+    hibernateSession.beginTransaction();
+  }
+
+  /**
+   * Calls {@link #endHibernateSession()}, commits the transaction and closes the session.
+   *
+   * @since 2.0
+   */
+  public void commitRollbackHibernateSession()
+  {
+    endHibernateSession();
+  }
+
+  /**
+   * Commits/rollbacks and closes the session
+   *
+   * @since 2.0
+   */
+  public void endHibernateSession()
+  {
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Closing hibernate session"); //$NON-NLS-1$
+    }
+
+    if (hibernateSession != null && hibernateSession.isOpen())
+    {
+      try
+      {
+        if (hibernateSession.getTransaction().isActive())
+        {
+          if (TRACER.isEnabled())
+          {
+            TRACER.trace("Commiting hibernate session"); //$NON-NLS-1$
+          }
+
+          if (isErrorOccured())
+          {
+            if (TRACER.isEnabled())
+            {
+              TRACER.trace("Rolling back hb transaction"); //$NON-NLS-1$
+            }
+
+            hibernateSession.getTransaction().rollback();
+          }
+          else
+          {
+            if (TRACER.isEnabled())
+            {
+              TRACER.trace("Committing hb transaction"); //$NON-NLS-1$
+            }
+
+            hibernateSession.getTransaction().commit();
+          }
+        }
+      }
+      finally
+      {
+        hibernateSession.close();
+      }
+    }
+
+    hibernateSession = null;
+  }
+
+  /**
+   * @return the current hibernate session. If there is none then a new one is created and a transaction is started.
+   *
+   * Note the default is a readonly flushmode manual session.
+   */
+  public Session getHibernateSession()
+  {
+    if (hibernateSession == null)
+    {
+      beginHibernateSession();
+    }
+    return hibernateSession;
+  }
+
+  /**
+   * Closes/commits the current hibernate session if there is one, and starts a new one and begins a transaction.
+   *
+   * @return a newly created Hibernate Session
+   */
+  public Session getNewHibernateSession(boolean readOnly)
+  {
+    if (hibernateSession != null)
+    {
+      endHibernateSession();
+    }
+
+    if (hibernateSession != null)
+    {
+      throw new IllegalStateException("Hibernate session should be null"); //$NON-NLS-1$
+    }
+
+    beginHibernateSession();
+    return hibernateSession;
+  }
+
+  /**
+   * @return true if an error occured during database actions. Normally means that the transaction will be rolled back
+   *         and not committed.
+   * @since 2.0
+   */
+  public boolean isErrorOccured()
+  {
+    return errorOccured;
+  }
+
+  /**
+   * @since 2.0
+   */
+  public void setErrorOccured(boolean errorOccured)
+  {
+    this.errorOccured = errorOccured;
+  }
+
+  /**
+   * @return a {@link HibernateStoreChunkReader}
+   */
+  public HibernateStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature)
+  {
+    return new HibernateStoreChunkReader(this, revision, feature);
+  }
+
+  /**
+   * @return the current collection of package units.
+   * @see HibernateStore
+   * @see HibernatePackageHandler
+   */
+  public Collection<InternalCDOPackageUnit> readPackageUnits()
+  {
+    return getStore().getPackageHandler().getPackageUnits();
+  }
+
+  /**
+   * Loads the package units from the database and returns the EPackage instances.
+   *
+   * @return the loaded EPackage instances.
+   * @see HibernatePackageHandler
+   */
+  public EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)
+  {
+    return getStore().getPackageHandler().loadPackageUnit(packageUnit);
+  }
+
+  /**
+   * Reads the revision from the database. using the passed id.
+   *
+   * @param id
+   *          identifies the CDORevision to read
+   * @param branchPoint
+   *          ignored until auditing is supported.
+   * @param listChunk
+   *          not used by Hibernate
+   * @param cache
+   *          the revision cache, the read revision is added to the cache
+   * @return the read revision
+   */
+  public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, CDORevisionCacheAdder cache)
+  {
+    if (!HibernateUtil.getInstance().isStoreCreatedID(id))
+    {
+      return null;
+    }
+    currentListChunk = listChunk;
+    try
+    {
+      if (getStore().isAuditing() && getStore().getHibernateAuditHandler().getCDOAuditHandler().isAudited(id))
+      {
+        InternalCDORevision revision = getStore().getHibernateAuditHandler().readRevision(getHibernateSession(), id, branchPoint.getTimeStamp());
+        // found one, use it
+        if (revision != null)
+        {
+
+          if (cache != null)
+          {
+            cache.addRevision(revision);
+          }
+          revision.freeze();
+
+          return revision;
+        }
+      }
+
+      final InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(id);
+      if (revision == null)
+      {
+        final CDOClassifierRef classifierRef = CDOIDUtil.getClassifierRef(id);
+        if (classifierRef == null)
+        {
+          throw new IllegalArgumentException("This CDOID type of " + id + " is not supported by this store."); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+
+        final EClass eClass = HibernateUtil.getInstance().getEClass(classifierRef);
+        return new DetachedCDORevision(eClass, id, branchPoint.getBranch(), 0, 0);
+      }
+
+      revision.setBranchPoint(getStore().getMainBranchHead());
+      revision.freeze();
+
+      if (cache != null)
+      {
+        cache.addRevision(revision);
+      }
+
+      return revision;
+    }
+    finally
+    {
+      currentListChunk = -1;
+    }
+  }
+
+  public Pair<Integer, Long> createBranch(int branchID, BranchInfo branchInfo)
+  {
+    // TODO: implement HibernateStoreAccessor.createBranch(branchID, branchInfo)
+    throw new UnsupportedOperationException();
+  }
+
+  public BranchInfo loadBranch(int branchID)
+  {
+    // TODO: implement HibernateStoreAccessor.loadBranch(branchID)
+    throw new UnsupportedOperationException();
+  }
+
+  public SubBranchInfo[] loadSubBranches(int branchID)
+  {
+    // TODO: implement HibernateStoreAccessor.loadSubBranches(branchID)
+    throw new UnsupportedOperationException();
+  }
+
+  public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+  {
+    // TODO: implement HibernateStoreAccessor.loadBranches(startID, endID, branchHandler)
+    throw new UnsupportedOperationException();
+  }
+
+  public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
+  {
+    // no commit info support
+    if (!getStore().isAuditing())
+    {
+      return;
+    }
+
+    final Session session = getHibernateSession();
+    final InternalCDOCommitInfoManager commitInfoManager = getStore().getRepository().getCommitInfoManager();
+
+    // only get a specific range of objects
+    String direction = " desc ";
+    int count = 0;
+    if (endTime < CDOBranchPoint.UNSPECIFIED_DATE)
+    {
+      count = CDOCommitInfoUtil.decodeCount(endTime);
+      if (count < 0)
+      {
+        direction = " desc ";
+        count = -1 * count;
+      }
+      else
+      {
+        direction = " asc ";
+      }
+    }
+
+    final String qryStr = "select e from TeneoAuditCommitInfo e where e.commitTime>=:startTime and e.commitTime<=:endTime order by e.commitTime " + direction;
+    final Query qry = session.createQuery(qryStr);
+    if (count > 0)
+    {
+      qry.setMaxResults(count);
+    }
+    qry.setParameter("startTime", startTime);
+    qry.setParameter("endTime", endTime == CDOBranchPoint.UNSPECIFIED_DATE || endTime < 0 ? Long.MAX_VALUE : endTime);
+    for (Object o : qry.list())
+    {
+      final TeneoAuditCommitInfo teneoCommitInfo = (TeneoAuditCommitInfo)o;
+      final CDOCommitInfo cdoCommitInfo = commitInfoManager.createCommitInfo(getStore().getRepository().getBranchManager().getMainBranch(),
+          teneoCommitInfo.getCommitTime(), teneoCommitInfo.getCommitTime() - 1, teneoCommitInfo.getUser(), teneoCommitInfo.getComment(), null, null);
+      handler.handleCommitInfo(cdoCommitInfo);
+    }
+  }
+
+  public Set<CDOID> readChangeSet(OMMonitor monitor, CDOChangeSetSegment... segments)
+  {
+    // TODO: implement HibernateStoreAccessor.readChangeSet(segments)
+    throw new UnsupportedOperationException();
+  }
+
+  // should only return revisions of the eclass itself and not of its subclasses.
+  public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler)
+  {
+
+    if (eClass != null)
+    {
+      if (!getStore().isMapped(eClass))
+      {
+        return;
+      }
+
+      handleRevisionsByEClass(eClass, handler, timeStamp);
+    }
+    else
+    {
+      for (EPackage ePackage : getStore().getPackageHandler().getEPackages())
+      {
+        // an auditing epackage
+        if (ePackage == TeneoauditingPackage.eINSTANCE || ePackage.getEAnnotation(Constants.ANNOTATION_SOURCE_AUDITING) != null)
+        {
+          continue;
+        }
+
+        for (EClassifier eClassifier : ePackage.getEClassifiers())
+        {
+          if (eClassifier instanceof EClass)
+          {
+            final EClass eClazz = (EClass)eClassifier;
+            if (!getStore().isMapped(eClazz))
+            {
+              continue;
+            }
+            handleRevisionsByEClass(eClazz, handler, timeStamp);
+          }
+        }
+      }
+    }
+  }
+
+  private void handleRevisionsByEClass(EClass eClass, CDORevisionHandler handler, long timeStamp)
+  {
+    // get a transaction, the hibernateStoreAccessor is placed in a threadlocal
+    // so all db access uses the same session.
+    final Session session = getHibernateSession();
+    try
+    {
+      if (timeStamp > 0)
+      {
+        getStore().getHibernateAuditHandler().handleRevisionsByEClass(session, eClass, handler, timeStamp);
+        return;
+      }
+
+      // create the query
+      final Query query = session.createQuery("select e from " + getStore().getEntityName(eClass) + " e");
+      for (Object o : query.list())
+      {
+        CDORevision cdoRevision = (CDORevision)o;
+
+        // if a subclass ignore
+        if (cdoRevision.getEClass() != eClass)
+        {
+          continue;
+        }
+
+        if (!handler.handleRevision(cdoRevision))
+        {
+          return;
+        }
+      }
+    }
+    finally
+    {
+      session.clear();
+    }
+  }
+
+  /**
+   * @see #readRevision(CDOID, CDOBranchPoint, int, CDORevisionCacheAdder)
+   */
+  public InternalCDORevision readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk, CDORevisionCacheAdder cache)
+  {
+    InternalCDORevision revision = null;
+    if (getStore().getHibernateAuditHandler().getCDOAuditHandler().isAudited(id))
+    {
+      revision = getStore().getHibernateAuditHandler().readRevisionByVersion(getHibernateSession(), id, branchVersion.getVersion());
+    }
+    else
+    {
+      revision = readRevision(id, branchVersion.getBranch().getPoint(System.currentTimeMillis()), listChunk, cache);
+      if (revision != null)
+      {
+        // otherwise CDO gets confused and we get wrong version numbers later
+        revision.setVersion(branchVersion.getVersion());
+      }
+    }
+
+    if (revision != null && !(revision instanceof DetachedCDORevision))
+    {
+      revision.freeze();
+    }
+
+    if (cache != null)
+    {
+      cache.addRevision(revision);
+    }
+
+    return revision;
+  }
+
+  /**
+   * Queries for resources in a certain folder and returns them in the context object
+   *
+   * @param context
+   *          the context provides input parameters (the folder) and is used to store the results of the query.
+   * @since 2.0
+   */
+  public void queryResources(QueryResourcesContext context)
+  {
+    final Session session = getHibernateSession();
+
+    final CDOID folderID = getHibernateID(context.getFolderID());
+    String name = context.getName();
+    boolean exactMatch = context.exactMatch();
+    final HibernateAuditHandler hibernateAuditHandler = getStore().getHibernateAuditHandler();
+
+    List<?> result = null;
+    if (context.getTimeStamp() == 0 || !getStore().isAuditing())
+    {
+
+      final Criteria criteria = session.createCriteria(EresourcePackage.eINSTANCE.getCDOResourceNode().getName());
+      if (folderID == null)
+      {
+        criteria.add(org.hibernate.criterion.Restrictions.isNull("folder"));
+      }
+      else
+      {
+        criteria.add(org.hibernate.criterion.Restrictions.eq("folder.id", CDOIDUtil.getLong(folderID)));
+      }
+
+      result = criteria.list();
+    }
+    else
+    {
+      result = hibernateAuditHandler.getCDOResources(session, folderID, context.getTimeStamp());
+    }
+
+    for (Object o : result)
+    {
+      final CDORevision revision;
+      if (o instanceof CDORevision)
+      {
+        revision = (CDORevision)o;
+      }
+      else
+      {
+        final TeneoAuditEntry teneoAuditEntry = (TeneoAuditEntry)o;
+        revision = hibernateAuditHandler.getCDORevision(session, teneoAuditEntry);
+      }
+
+      ((InternalCDORevision)revision).freeze();
+
+      final EStructuralFeature feature = revision.getEClass().getEStructuralFeature(NAME_EFEATURE_NAME);
+      if (feature != null)
+      {
+        Object value = revision.data().get(feature, 0);
+        if (value == CDORevisionData.NIL)
+        {
+          value = null;
+        }
+
+        final String revisionName = (String)value;
+        final boolean match = exactMatch || revisionName == null || name == null ? ObjectUtil.equals(revisionName, name) : revisionName.startsWith(name);
+
+        if (match && !context.addResource(HibernateUtil.getInstance().getCDOID(revision)))
+        {
+          // No more results allowed
+          break;
+        }
+      }
+    }
+  }
+
+  public void queryXRefs(QueryXRefsContext context)
+  {
+    final Session session = getHibernateSession();
+    for (CDOID targetCdoId : context.getTargetObjects().keySet())
+    {
+      final CDORevision revision = HibernateUtil.getInstance().getCDORevision(targetCdoId);
+      final EClass targetEClass = context.getTargetObjects().get(targetCdoId);
+
+      if (!getStore().isMapped(targetEClass))
+      {
+        continue;
+      }
+
+      final String targetEntityName = getStore().getEntityName(targetEClass);
+      final Map<EClass, List<EReference>> sourceCandidates = context.getSourceCandidates();
+      for (EClass sourceEClass : sourceCandidates.keySet())
+      {
+
+        if (!getStore().isMapped(sourceEClass))
+        {
+          continue;
+        }
+
+        final String sourceEntityName = getStore().getEntityName(sourceEClass);
+        for (EReference eref : sourceCandidates.get(sourceEClass))
+        {
+          // handle transient ereferences
+          if (!isEReferenceMapped(session, sourceEntityName, eref))
+          {
+            continue;
+          }
+
+          final String hql;
+          if (eref.isMany())
+          {
+            hql = "select ref from " + sourceEntityName + " as ref, " + targetEntityName + " as refTo where refTo = :to and refTo in elements(ref."
+                + eref.getName() + ")";
+          }
+          else
+          {
+            hql = "select ref from " + sourceEntityName + " as ref where :to = ref." + eref.getName();
+          }
+
+          final Query qry = session.createQuery(hql);
+          qry.setEntity("to", revision);
+          ScrollableResults result = qry.scroll(ScrollMode.FORWARD_ONLY);
+          while (result.next())
+          {
+            final InternalCDORevision sourceRevision = (InternalCDORevision)result.get()[0];
+
+            sourceRevision.freeze();
+
+            int sourceIndex = 0;
+            if (eref.isMany())
+            {
+              // note this takes performance for sure as the list is read,
+              // consider not supporting sourceIndex, or doing it differently
+              final WrappedHibernateList cdoList = (WrappedHibernateList)sourceRevision.getOrCreateList(eref);
+              sourceIndex = cdoList.getDelegate().indexOf(revision);
+            }
+
+            boolean more = context.addXRef(targetCdoId, sourceRevision.getID(), eref, sourceIndex);
+            if (!more)
+            {
+              return;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  private boolean isEReferenceMapped(Session session, String entityName, EReference eref)
+  {
+    // mapped
+    if (null != eref.getEAnnotation(TENEO_MAPPED_SOURCE))
+    {
+      return true;
+    }
+    else
+    // not mapped
+    if (null != eref.getEAnnotation(TENEO_UNMAPPED_SOURCE))
+    {
+      return false;
+    }
+
+    // not computed yet
+    for (String propName : session.getSessionFactory().getClassMetadata(entityName).getPropertyNames())
+    {
+      if (propName.equals(eref.getName()))
+      {
+        final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+        eAnnotation.setSource(TENEO_MAPPED_SOURCE);
+        eref.getEAnnotations().add(eAnnotation);
+        return true;
+      }
+    }
+    // not mapped
+    final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource(TENEO_UNMAPPED_SOURCE);
+    eref.getEAnnotations().add(eAnnotation);
+    return false;
+  }
+
+  private CDOID getHibernateID(CDOID id)
+  {
+    if (!CDOIDUtil.isNull(id))
+    {
+      if (HibernateUtil.getInstance().isStoreCreatedID(id))
+      {
+        return id;
+      }
+
+      // TODO Can this happen? When?
+      // the folder id is always a long
+      final Long idValue = CDOIDUtil.getLong(id);
+      return CDOIDUtil.createLongWithClassifier(idValue, new CDOClassifierRef(EresourcePackage.eINSTANCE.getCDOResourceNode()));
+    }
+
+    return null;
+  }
+
+  /**
+   * @param info
+   *          the query information, is not used actively in this method.
+   * @return a new instance of {@link HibernateQueryHandler}
+   */
+  public IQueryHandler getQueryHandler(CDOQueryInfo info)
+  {
+    String queryLanguage = info.getQueryLanguage();
+    if (StringUtil.equalsUpperOrLowerCase(queryLanguage, IHibernateStore.QUERY_LANGUAGE))
+    {
+      final HibernateQueryHandler queryHandler = new HibernateQueryHandler();
+      queryHandler.setHibernateStoreAccessor(this);
+      return queryHandler;
+    }
+
+    return null;
+  }
+
+  /**
+   * Commits the session, see {@link #commitRollbackHibernateSession()}.
+   *
+   * @param monitor
+   *          not used
+   */
+  @Override
+  protected void doCommit(OMMonitor monitor)
+  {
+    commitRollbackHibernateSession();
+    HibernateThreadContext.setCommitContext(null);
+  }
+
+  /**
+   * Performs the main write and update actions. Persists new EPackages, updates changed objects, creates new ones and
+   * removes deleted objects. Updates both container as well as resource associations.
+   *
+   * @param context
+   *          the context contains the changed, new and to-be-removed objects
+   * @param monitor
+   *          not used by this method
+   */
+  @Override
+  public void doWrite(InternalCommitContext context, OMMonitor monitor)
+  {
+    // NOTE: the same flow is also present in the super class (StoreAccessor)
+    // changes in flow can mean that the flow here also has to change
+
+    monitor.begin(3);
+    HibernateThreadContext.setCommitContext(context);
+    if (context.getNewPackageUnits().length > 0)
+    {
+      writePackageUnits(context.getNewPackageUnits(), monitor.fork());
+    }
+
+    // Note: instead of an Async here, we could do much more fine-grained monitoring below. But this
+    // simplistic solution is sufficient to prevent timeout errors.
+    final Async async = monitor.forkAsync();
+    HibernateThreadContext.getCommitContext().setInDoWrite(true);
+    try
+    {
+      // start with fresh hibernate session to prevent side effects
+      final Session session = context instanceof HibernateRawCommitContext ? getHibernateSession() : getNewHibernateSession(false);
+      session.setDefaultReadOnly(false);
+
+      // decrement version, hibernate will increment it
+      decrementVersions(context);
+
+      // order is 1) insert, 2) update and then delete
+      // this order is the most stable! Do not change it without testing
+
+      // System.err.println(getStore().getMappingXml());
+
+      final List<InternalCDORevision> repairContainerIDs = new ArrayList<InternalCDORevision>();
+      final List<InternalCDORevision> repairResourceIDs = new ArrayList<InternalCDORevision>();
+      for (InternalCDORevision revision : context.getNewObjects())
+      {
+        revision.setListPreserving();
+
+        // keep track for which cdoRevisions the container id needs to be repaired afterwards
+        final CDOID containerID = (CDOID)revision.getContainerID();
+        if (containerID instanceof CDOIDTemp && !containerID.isNull())
+        {
+          repairContainerIDs.add(revision);
+        }
+
+        final CDOID resourceID = revision.getResourceID();
+        if (resourceID instanceof CDOIDTemp && !resourceID.isNull())
+        {
+          repairResourceIDs.add(revision);
+        }
+
+        final String entityName = getStore().getEntityName(revision.getEClass());
+        session.saveOrUpdate(entityName, revision);
+      }
+
+      // now apply all the changes
+      if (context.getDirtyObjectDeltas() != null)
+      {
+        for (InternalCDORevisionDelta delta : context.getDirtyObjectDeltas())
+        {
+          final String entityName = HibernateUtil.getInstance().getEntityName(delta.getID());
+          final Serializable idValue = HibernateUtil.getInstance().getIdValue(delta.getID());
+          final InternalCDORevision cdoRevision = (InternalCDORevision)session.get(entityName, idValue);
+          cdoRevision.setListPreserving();
+          delta.applyTo(cdoRevision);
+        }
+      }
+
+      // preserve old behavior for the hibernate raw commit
+      if (context instanceof HibernateRawCommitContext)
+      {
+        // now check the versions and store the hibernate revision to repair
+        // versions later on. The versions can be updated when inserting new objects
+        // this will result in a version difference when the object gets merged
+        // this repair is done just before the merge
+        final Map<CDOID, InternalCDORevision> existingRevisions = CDOIDUtil.createMap();
+        for (InternalCDORevision revision : context.getDirtyObjects())
+        {
+          final String entityName = HibernateUtil.getInstance().getEntityName(revision.getID());
+          final Serializable idValue = HibernateUtil.getInstance().getIdValue(revision.getID());
+          final InternalCDORevision cdoRevision = (InternalCDORevision)session.get(entityName, idValue);
+          if (cdoRevision != null)
+          {
+            if (cdoRevision.getVersion() != revision.getVersion())
+            {
+              throw new IllegalStateException("Revision " + cdoRevision + " was already updated by another transaction");
+            }
+            existingRevisions.put(revision.getID(), cdoRevision);
+          }
+        }
+
+        for (InternalCDORevision revision : context.getDirtyObjects())
+        {
+          final String entityName = HibernateUtil.getInstance().getEntityName(revision.getID());
+          final InternalCDORevision existingRevision = existingRevisions.get(revision.getID());
+          if (existingRevision != null)
+          {
+            revision.setVersion(existingRevision.getVersion());
+          }
+
+          final InternalCDORevision cdoRevision = (InternalCDORevision)session.merge(entityName, revision);
+          if (getStore().isAuditing() && cdoRevision.getVersion() == revision.getVersion())
+          {
+            // do a direct update of the version in the db to get it in sync with
+            // hibernate, a special case, hibernate does not send the change back, do it ourselves
+            // only needs to be done in case of auditing
+            cdoRevision.setVersion(cdoRevision.getVersion() + 1);
+          }
+
+          if (TRACER.isEnabled())
+          {
+            TRACER.trace("Updated Object " + revision.getEClass().getName() + " id: " + revision.getID()); //$NON-NLS-1$ //$NON-NLS-2$
+          }
+        }
+      }
+
+      // and increment the versions stored in the context
+      // note that this is needed because above the cdorevision read from the db
+      // is updated and its version gets incremented, and not the revision currently
+      // in the cache
+      incrementVersions(context);
+
+      session.flush();
+
+      // delete all objects
+      for (CDOID id : context.getDetachedObjects())
+      {
+        try
+        {
+          final CDORevision revision = HibernateUtil.getInstance().getCDORevision(id);
+
+          // maybe deleted in parallell?
+          if (revision != null)
+          {
+            session.delete(revision);
+          }
+        }
+        catch (org.hibernate.ObjectNotFoundException ex)
+        {
+          // ignore these, an object can be removed through cascade deletes
+        }
+      }
+
+      session.flush();
+
+      // now do an update of the container without incrementing the version
+      repairContainerIDs(repairContainerIDs, session);
+      repairResourceIDs(repairResourceIDs, session);
+
+      session.flush();
+
+      // write the blobs
+      ExtendedDataInputStream in = context.getLobs();
+      if (in != null)
+      {
+        try
+        {
+          int count = in.readInt();
+          for (int i = 0; i < count; i++)
+          {
+            byte[] id = in.readByteArray();
+            long size = in.readLong();
+            if (size > 0)
+            {
+              writeBlob(id, size, new LimitedInputStream(in, size));
+            }
+            else
+            {
+              writeClob(id, -size, new InputStreamReader(new LimitedInputStream(in, -size)));
+            }
+          }
+        }
+        catch (IOException ex)
+        {
+          throw WrappedException.wrap(ex);
+        }
+      }
+
+      session.flush();
+
+    }
+    catch (Exception e)
+    {
+      OM.LOG.error(e);
+      throw WrappedException.wrap(e);
+    }
+    finally
+    {
+      HibernateThreadContext.getCommitContext().setInDoWrite(false);
+      async.stop();
+    }
+
+    context.applyIDMappings(monitor.fork());
+    monitor.done();
+  }
+
+  // set the version one back, hibernate will update it
+  private void decrementVersions(CommitContext context)
+  {
+    for (InternalCDORevision revision : context.getNewObjects())
+    {
+      revision.setVersion(revision.getVersion() - 1);
+    }
+    for (InternalCDORevision revision : context.getDirtyObjects())
+    {
+      revision.setVersion(revision.getVersion() - 1);
+    }
+  }
+
+  private void incrementVersions(CommitContext context)
+  {
+    for (InternalCDORevision revision : context.getNewObjects())
+    {
+      revision.setVersion(1);
+    }
+    for (InternalCDORevision revision : context.getDirtyObjects())
+    {
+      revision.setVersion(revision.getVersion() + 1);
+    }
+  }
+
+  private void repairContainerIDs(List<InternalCDORevision> repairContainerIDs, Session session)
+  {
+    for (InternalCDORevision revision : repairContainerIDs)
+    {
+      final CDORevision container = HibernateUtil.getInstance().getCDORevision((CDOID)revision.getContainerID());
+      final String entityName = getStore().getEntityName(revision.getEClass());
+      final CDOID id = revision.getID();
+      final String hqlUpdate = "update " + entityName + " set " + CDOHibernateConstants.CONTAINER_PROPERTY //$NON-NLS-1$ //$NON-NLS-2$
+          + " = :containerInfo where " + getStore().getIdentifierPropertyName(entityName) + " = :id"; //$NON-NLS-1$ //$NON-NLS-2$
+      final Query qry = session.createQuery(hqlUpdate);
+      qry.setParameter("containerInfo", ContainerInfoConverter.getInstance().convertContainerRelationToString(revision, //$NON-NLS-1$
+          container.getID()));
+      qry.setParameter("id", HibernateUtil.getInstance().getIdValue(id)); //$NON-NLS-1$
+      if (qry.executeUpdate() != 1)
+      {
+        // OM.LOG.error("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$
+        // //$NON-NLS-2$
+        throw new IllegalStateException("Not able to update container columns of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+    }
+  }
+
+  private void repairResourceIDs(List<InternalCDORevision> repairResourceIDs, Session session)
+  {
+    for (InternalCDORevision revision : repairResourceIDs)
+    {
+      final CDORevision resource = HibernateUtil.getInstance().getCDORevision(revision.getResourceID());
+      final String entityName = getStore().getEntityName(revision.getEClass());
+      final CDOID id = revision.getID();
+      final String hqlUpdate = "update " + entityName + " set " + CDOHibernateConstants.RESOURCE_PROPERTY //$NON-NLS-1$ //$NON-NLS-2$
+          + " = :resourceInfo where " + getStore().getIdentifierPropertyName(entityName) + " = :id"; //$NON-NLS-1$ //$NON-NLS-2$
+      final Query qry = session.createQuery(hqlUpdate);
+      qry.setParameter("resourceInfo", resource.getID()); //$NON-NLS-1$
+      qry.setParameter("id", HibernateUtil.getInstance().getIdValue(id)); //$NON-NLS-1$
+      if (qry.executeUpdate() != 1)
+      {
+        // OM.LOG.error("Not able to update resource ids of " + entityName + " with id " + id); //$NON-NLS-1$
+        // //$NON-NLS-2$
+        throw new IllegalStateException("Not able to update resource ids of " + entityName + " with id " + id); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+    }
+  }
+
+  @Override
+  protected void detachObjects(CDOID[] detachedObjects, CDOBranch branch, long timeStamp, OMMonitor monitor)
+  {
+    // handled by the write method
+  }
+
+  @Override
+  protected void doRollback(CommitContext context)
+  {
+    setErrorOccured(true);
+    endHibernateSession();
+    HibernateThreadContext.setCommitContext(null);
+  }
+
+  /**
+   * Writes package units to the datbaase.
+   *
+   * @param packageUnits
+   *          the package units to write to the database
+   * @param monitor
+   *          not used by the store
+   * @see HibernatePackageHandler
+   */
+  public void writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    if (packageUnits != null && packageUnits.length != 0)
+    {
+      getStore().getPackageHandler().writePackageUnits(packageUnits);
+    }
+  }
+
+  @SuppressWarnings("deprecation")
+  @Override
+  protected void writeCommitInfo(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    // is done in dowrite
+  }
+
+  @Override
+  protected void writeRevisions(InternalCDORevision[] revisions, CDOBranch branch, OMMonitor monitor)
+  {
+    // Doesn't do anything. It is done in commit().
+  }
+
+  @Override
+  public void addIDMappings(InternalCommitContext commitContext, OMMonitor monitor)
+  {
+    // Do nothing
+  }
+
+  @Override
+  public CDOID getNextCDOID(CDORevision revision)
+  {
+    // Never called
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  protected void writeRevisionDeltas(InternalCDORevisionDelta[] revisionDeltas, CDOBranch branch, long created, OMMonitor monitor)
+  {
+    // TODO: implement HibernateStoreAccessor.writeRevisionDeltas(revisionDeltas, branch, created, monitor)
+    throw new UnsupportedOperationException();
+  }
+
+  public void queryLobs(List<byte[]> ids)
+  {
+    for (Iterator<byte[]> it = ids.iterator(); it.hasNext();)
+    {
+      byte[] id = it.next();
+      final HibernateStoreLob lob = getCreateHibernateStoreLob(id);
+      if (lob.isNew())
+      {
+        it.remove();
+      }
+    }
+  }
+
+  public void handleLobs(long fromTime, long toTime, CDOLobHandler handler) throws IOException
+  {
+    final Session session = getHibernateSession();
+    final Query qry = session.createQuery("select c from " + HibernateStoreLob.class.getName() + " as c");
+
+    try
+    {
+      for (Object o : qry.list())
+      {
+        final HibernateStoreLob lob = (HibernateStoreLob)o;
+        if (lob.getBlob() != null)
+        {
+          final OutputStream out = handler.handleBlob(HexUtil.hexToBytes(lob.getId()), lob.getSize());
+          if (out != null)
+          {
+            final InputStream in = lob.getBlob().getBinaryStream();
+            try
+            {
+              IOUtil.copyBinary(in, out, lob.getSize());
+            }
+            finally
+            {
+              IOUtil.close(out);
+            }
+          }
+        }
+        else
+        {
+          final Clob clob = lob.getClob();
+          Reader in = clob.getCharacterStream();
+          Writer out = handler.handleClob(HexUtil.hexToBytes(lob.getId()), lob.getSize());
+          if (out != null)
+          {
+            try
+            {
+              IOUtil.copyCharacter(in, out, lob.getSize());
+            }
+            finally
+            {
+              IOUtil.close(out);
+            }
+          }
+        }
+      }
+    }
+    catch (SQLException ex)
+    {
+      throw new IllegalStateException(ex);
+    }
+  }
+
+  public void loadLob(byte[] id, OutputStream out) throws IOException
+  {
+    final HibernateStoreLob lob = getCreateHibernateStoreLob(id);
+    // can this ever occur?
+    // TODO: how should non-existence be handled? Currently results in a timeout
+    // on the client.
+    if (lob.isNew())
+    {
+      throw new IllegalStateException("Lob with id " + HexUtil.bytesToHex(id) + " does not exist");
+    }
+
+    final long size = lob.getSize();
+    try
+    {
+      if (lob.getBlob() != null)
+      {
+        InputStream in = lob.getBlob().getBinaryStream();
+        IOUtil.copyBinary(in, out, size);
+      }
+      else
+      {
+        Clob clob = lob.getClob();
+        Reader in = clob.getCharacterStream();
+        IOUtil.copyCharacter(in, new OutputStreamWriter(out), size);
+      }
+    }
+    catch (Exception e)
+    {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  @Override
+  protected void writeBlob(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    final HibernateStoreLob lob = getCreateHibernateStoreLob(id);
+    if ((inputStream == null || size == 0) && !lob.isNew())
+    {
+      getHibernateSession().delete(lob);
+    }
+    else
+    {
+      // deprecated usage, non-deprecated api uses a session
+      // TODO: research which session to use
+      lob.setBlob(getHibernateSession().getLobHelper().createBlob(inputStream, (int)size));
+      lob.setSize((int)size);
+      lob.setClob(null);
+      getHibernateSession().saveOrUpdate(lob);
+    }
+  }
+
+  @Override
+  protected void writeClob(byte[] id, long size, Reader reader) throws IOException
+  {
+    final HibernateStoreLob lob = getCreateHibernateStoreLob(id);
+    if ((reader == null || size == 0) && !lob.isNew())
+    {
+      getHibernateSession().delete(lob);
+    }
+    else
+    {
+      // deprecated usage, non-deprecated api uses a session
+      // TODO: research which session to use
+      lob.setClob(getHibernateSession().getLobHelper().createClob(reader, (int)size));
+      lob.setSize((int)size);
+      lob.setBlob(null);
+      getHibernateSession().saveOrUpdate(lob);
+    }
+  }
+
+  private HibernateStoreLob getCreateHibernateStoreLob(byte[] idBytes)
+  {
+    final String id = HexUtil.bytesToHex(idBytes);
+    final Session session = getHibernateSession();
+    session.setDefaultReadOnly(false);
+    HibernateStoreLob lob = (HibernateStoreLob)session.get(HibernateStoreLob.class, id);
+    if (lob == null)
+    {
+      lob = new HibernateStoreLob();
+      lob.setId(id);
+    }
+
+    return lob;
+  }
+
+  public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) throws IOException
+  {
+    // we won't export any store specific stuff...
+    // throw new UnsupportedOperationException();
+  }
+
+  public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime, OMMonitor monitor) throws IOException
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    if (packageUnits != null && packageUnits.length != 0)
+    {
+      getStore().getPackageHandler().writePackageUnits(packageUnits);
+    }
+    // forces a new hibernate session
+    commit(monitor);
+  }
+
+  public void rawStore(InternalCDORevision revision, OMMonitor monitor)
+  {
+    final String entityName = HibernateUtil.getInstance().getEntityName(revision.getID());
+    final Serializable idValue = HibernateUtil.getInstance().getIdValue(revision.getID());
+    final CDORevision existingRevision = (CDORevision)getHibernateSession().get(entityName, idValue);
+    if (existingRevision == null)
+    {
+      rawCommitContext.addNewObject(revision);
+    }
+    else
+    {
+      revision.setVersion(1 + existingRevision.getVersion());
+      rawCommitContext.addDirtyObject(revision);
+    }
+  }
+
+  public void rawStore(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    writeBlob(id, size, inputStream);
+  }
+
+  public void rawStore(byte[] id, long size, Reader reader) throws IOException
+  {
+    writeClob(id, size, reader);
+  }
+
+  public void rawStore(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    // TODO: support export and import and auditing
+  }
+
+  public void rawCommit(double commitWork, OMMonitor monitor)
+  {
+    doWrite(rawCommitContext, monitor);
+    commit(monitor);
+  }
+
+  public void rawDelete(CDOID id, int version, CDOBranch branch, EClass eClass, OMMonitor monitor)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    // TODO This method is called when this accessor is not needed anymore
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Committing/rollback and closing hibernate session"); //$NON-NLS-1$
+    }
+
+    try
+    {
+      endHibernateSession();
+    }
+    finally
+    {
+      clearThreadState();
+    }
+  }
+
+  @Override
+  public void release()
+  {
+    super.release();
+    getStore().ensureCorrectPackageRegistry();
+  }
+
+  @Override
+  protected void doPassivate() throws Exception
+  {
+    clearThreadState();
+  }
+
+  private void clearThreadState()
+  {
+    PersistableListHolder.getInstance().clearListMapping();
+    HibernateThreadContext.setCommitContext(null);
+    PackageRegistryProvider.getInstance().setThreadPackageRegistry(null);
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    PackageRegistryProvider.getInstance().setThreadPackageRegistry(getStore().getRepository().getPackageRegistry());
+  }
+
+  @Override
+  protected void doUnpassivate() throws Exception
+  {
+  }
+
+  public int getCurrentListChunk()
+  {
+    return currentListChunk;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.java
new file mode 100644
index 0000000..f0b7d4f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreChunkReader.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 2008, 2009, 2011-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - Implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStoreChunkReader;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.server.StoreChunkReader;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.hibernate.engine.spi.CollectionEntry;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.persister.collection.QueryableCollection;
+
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class HibernateStoreChunkReader extends StoreChunkReader implements IHibernateStoreChunkReader
+{
+  public HibernateStoreChunkReader(HibernateStoreAccessor accessor, CDORevision revision, EStructuralFeature feature)
+  {
+    super(accessor, revision, feature);
+  }
+
+  @Override
+  public HibernateStoreAccessor getAccessor()
+  {
+    return (HibernateStoreAccessor)super.getAccessor();
+  }
+
+  public List<Chunk> executeRead()
+  {
+    // get a transaction, the hibernateStoreAccessor is placed in a threadlocal
+    // so all db access uses the same session.
+    final Session session = getAccessor().getHibernateSession();
+
+    // reread the revision as it is probably unreferenced
+    final InternalCDORevision latestRevision = getLatestRevision(session);
+    Object value = latestRevision.getValue(getFeature());
+    if (value instanceof WrappedHibernateList)
+    {
+      value = ((WrappedHibernateList)value).getDelegate();
+    }
+
+    // hibernate details...
+    boolean useExtraLazyMode = false;
+    boolean standardCDOList = false;
+    QueryableCollection persister = null;
+    CollectionEntry entry = null;
+    if (value instanceof PersistentCollection)
+    {
+      final PersistentCollection persistentCollection = (PersistentCollection)value;
+      persister = (QueryableCollection)((SessionFactoryImplementor)session.getSessionFactory()).getCollectionPersister(persistentCollection.getRole());
+      entry = ((SessionImplementor)session).getPersistenceContext().getCollectionEntry(persistentCollection);
+
+      useExtraLazyMode = !persister.getElementType().isEntityType();
+      if (useExtraLazyMode && ((PersistentCollection)value).hasQueuedOperations())
+      {
+        session.flush();
+      }
+    }
+    else
+    {
+      standardCDOList = true;
+    }
+
+    final List<Chunk> chunks = getChunks();
+    for (Chunk chunk : chunks)
+    {
+      final int startIndex = chunk.getStartIndex();
+      final int maxElements = chunk.size();
+      if (standardCDOList)
+      {
+        // for eattributes just read them all, no chunking there...
+        final CDOList list = (CDOList)value;
+        if (startIndex >= list.size())
+        {
+          return chunks;
+        }
+        for (int i = startIndex; i < startIndex + maxElements; i++)
+        {
+          if (i >= list.size())
+          {
+            break;
+          }
+          addToChunk(chunk, i - startIndex, list.get(i));
+        }
+      }
+      else if (useExtraLazyMode)
+      {
+        if (getFeature() instanceof EReference)
+        {
+          for (int i = startIndex; i < startIndex + maxElements; i++)
+          {
+            final Object object = persister.getElementByIndex(entry.getLoadedKey(), i, (SessionImplementor)session, latestRevision);
+            // could happen if the index > size)
+            if (object == null)
+            {
+              continue;
+            }
+            addToChunk(chunk, i - startIndex, object);
+          }
+        }
+        else
+        {
+          // for eattributes just read them all, no chunking there...
+          final List<?> list = (List<?>)value;
+          if (startIndex >= list.size())
+          {
+            return chunks;
+          }
+          for (int i = startIndex; i < startIndex + maxElements; i++)
+          {
+            if (i >= list.size())
+            {
+              break;
+            }
+            addToChunk(chunk, i - startIndex, list.get(i));
+          }
+        }
+      }
+      else
+      {
+        final Query filterQuery = session.createFilter(value, "");
+        filterQuery.setMaxResults(maxElements);
+        filterQuery.setFirstResult(startIndex);
+        int i = 0;
+        for (Object object : filterQuery.list())
+        {
+          addToChunk(chunk, i++, object);
+        }
+      }
+    }
+    return chunks;
+  }
+
+  private InternalCDORevision getLatestRevision(Session session)
+  {
+    final CDOID id = getRevision().getID();
+
+    final HibernateStore store = getAccessor().getStore();
+
+    if (store.isAuditing() && store.getHibernateAuditHandler().getCDOAuditHandler().isAudited(id))
+    {
+      InternalCDORevision revision = store.getHibernateAuditHandler().readRevision(session, id, getRevision().getTimeStamp());
+      // found one, use it
+      if (revision != null)
+      {
+        return revision;
+      }
+    }
+
+    return HibernateUtil.getInstance().getCDORevision(id);
+  }
+
+  private void addToRevisionCache(Object revision)
+  {
+    final InternalCDORevision internalRevision = (InternalCDORevision)revision;
+    for (EStructuralFeature feature : internalRevision.getEClass().getEAllStructuralFeatures())
+    {
+      if (!isMappedFeature(internalRevision, feature))
+      {
+        continue;
+      }
+
+      if (feature.isMany() || feature instanceof EReference)
+      {
+        final Object value = internalRevision.getValue(feature);
+        if (value instanceof WrappedHibernateList)
+        {
+          // force the size to be cached
+          ((WrappedHibernateList)value).size();
+        }
+      }
+    }
+
+    getAccessor().addToRevisionCache(revision);
+  }
+
+  private void addToChunk(Chunk chunk, int i, Object object)
+  {
+    if (object instanceof CDORevision)
+    {
+      addToRevisionCache(object);
+      chunk.add(i, HibernateUtil.getInstance().getCDOID(object));
+    }
+    else
+    {
+      chunk.add(i, object);
+    }
+  }
+
+  private boolean isMappedFeature(InternalCDORevision revision, EStructuralFeature feature)
+  {
+    try
+    {
+      int featureID = revision.getClassInfo().getEClass().getFeatureID(feature);
+      revision.getClassInfo().getPersistentFeatureIndex(featureID);
+      return true;
+    }
+    catch (IllegalArgumentException ex)
+    {
+      return false;
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      return false;
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.java
new file mode 100644
index 0000000..b0f8ca7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreFactory.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2008, 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.IStoreFactory;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @author Eike Stepper
+ */
+public class HibernateStoreFactory implements IStoreFactory
+{
+  private static final String PROPERTY_TAG = "property"; //$NON-NLS-1$
+
+  private static final String MAPPINGPROVIDER_TAG = "mappingProvider"; //$NON-NLS-1$
+
+  private static final String NAME_ATTRIBUTE = "name"; //$NON-NLS-1$
+
+  private static final String VALUE_ATTRIBUTE = "value"; //$NON-NLS-1$
+
+  private static final String TYPE_ATTRIBUTE = "type"; //$NON-NLS-1$
+
+  public HibernateStoreFactory()
+  {
+  }
+
+  public String getStoreType()
+  {
+    return HibernateStore.TYPE;
+  }
+
+  public IStore createStore(String repositoryName, Map<String, String> repositoryProperties, Element storeConfig)
+  {
+    final IHibernateMappingProvider mappingProvider = getMappingProvider(storeConfig);
+
+    final Properties properties = new Properties();
+    final NodeList propertyNodes = storeConfig.getElementsByTagName(PROPERTY_TAG);
+    for (int i = 0; i < propertyNodes.getLength(); i++)
+    {
+      final Element propertyElement = (Element)propertyNodes.item(i);
+      properties.setProperty(propertyElement.getAttribute(NAME_ATTRIBUTE), propertyElement.getAttribute(VALUE_ATTRIBUTE));
+    }
+
+    return HibernateUtil.getInstance().createStore(mappingProvider, properties);
+  }
+
+  private IHibernateMappingProvider getMappingProvider(Element storeConfig)
+  {
+    NodeList mappingProviderConfigs = storeConfig.getElementsByTagName(MAPPINGPROVIDER_TAG);
+    if (mappingProviderConfigs.getLength() != 1)
+    {
+      throw new IllegalStateException("Exactly one mapping provider must be configured for Hibernate store"); //$NON-NLS-1$
+    }
+
+    Element mappingProviderConfig = (Element)mappingProviderConfigs.item(0);
+    String mappingProviderType = mappingProviderConfig.getAttribute(TYPE_ATTRIBUTE);
+    IHibernateMappingProvider.Factory factory = HibernateUtil.getInstance().createMappingProviderFactory(mappingProviderType);
+    if (factory == null)
+    {
+      throw new IllegalArgumentException("Unknown mapping provider type: " + mappingProviderType); //$NON-NLS-1$
+    }
+
+    IHibernateMappingProvider mappingProvider = factory.create(mappingProviderConfig);
+    if (mappingProvider == null)
+    {
+      throw new IllegalArgumentException("No mapping provider created: " + mappingProviderType); //$NON-NLS-1$
+    }
+
+    return mappingProvider;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.java
new file mode 100644
index 0000000..a0b5b95
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreLob.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import java.sql.Blob;
+import java.sql.Clob;
+
+/**
+ * Object used to store clob and lob.
+ *
+ * @author Martin Taal
+ */
+public class HibernateStoreLob
+{
+  // note size -1 is used to flag a new state
+  private static int NEW_FLAG_SIZE = -1;
+
+  private String id;
+
+  private Clob clob;
+
+  private Blob blob;
+
+  private int size = NEW_FLAG_SIZE;
+
+  public boolean isNew()
+  {
+    return size == NEW_FLAG_SIZE;
+  }
+
+  public int getSize()
+  {
+    return size;
+  }
+
+  public void setSize(int size)
+  {
+    this.size = size;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public Clob getClob()
+  {
+    return clob;
+  }
+
+  public void setClob(Clob clob)
+  {
+    this.clob = clob;
+  }
+
+  public Blob getBlob()
+  {
+    return blob;
+  }
+
+  public void setBlob(Blob blob)
+  {
+    this.blob = blob;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java
new file mode 100644
index 0000000..b99bb31
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateThreadContext.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.server.StoreThreadLocal;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateThreadContext
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HibernateThreadContext.class);
+
+  private static ThreadLocal<HibernateCommitContext> commitContext = new ThreadLocal<HibernateCommitContext>();
+
+  public static HibernateStoreAccessor getCurrentStoreAccessor()
+  {
+    return (HibernateStoreAccessor)StoreThreadLocal.getAccessor();
+  }
+
+  public static HibernateCommitContext getCommitContext()
+  {
+    HibernateCommitContext result = commitContext.get();
+    if (result == null)
+    {
+      throw new IllegalStateException("CommitContext not set"); //$NON-NLS-1$
+    }
+
+    return result;
+  }
+
+  public static boolean isCommitContextSet()
+  {
+    return commitContext.get() != null;
+  }
+
+  public static void setCommitContext(InternalCommitContext newCommitContext)
+  {
+    // in case of xa transactions then the commit context is set again
+    // if (newCommitContext != null && commitContext.get() != null)
+    // {
+    // throw new IllegalStateException("CommitContext already set");
+    // }
+
+    if (TRACER.isEnabled())
+    {
+      if (newCommitContext == null)
+      {
+        TRACER.trace("Clearing commitcontext in threadlocal"); //$NON-NLS-1$
+      }
+      else
+      {
+        TRACER.trace("Setting commitcontext in threadlocal"); //$NON-NLS-1$
+      }
+    }
+
+    // reset the context
+    if (newCommitContext == null)
+    {
+      commitContext.set(null);
+    }
+    else
+    {
+      final HibernateCommitContext hcc = new HibernateCommitContext();
+      hcc.setCommitContext(newCommitContext);
+      commitContext.set(hcc);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
new file mode 100644
index 0000000..c9a99c5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateUtil.java
@@ -0,0 +1,763 @@
+/*
+ * Copyright (c) 2008-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDString;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.IStoreAccessor.CommitContext;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.util.CDOUtil;
+
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.WrappedException;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+import org.hibernate.Session;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.proxy.HibernateProxy;
+
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Provides several utility and convenience methods. Mostly related to {@link CDOID} and {@link CDORevision}.
+ *
+ * @author Martin Taal
+ */
+public class HibernateUtil
+{
+  private static final String EXT_POINT = "mappingProviderFactories"; //$NON-NLS-1$
+
+  private static HibernateUtil instance = new HibernateUtil();
+
+  private static final String SEPARATOR = "_;_"; //$NON-NLS-1$
+
+  private static final String MAPPING_PROVIDER_FACTORY_TAG = "mappingProviderFactory"; //$NON-NLS-1$
+
+  private static final String TYPE_ATTRIBUTE = "type"; //$NON-NLS-1$
+
+  private static final String CLASS = "class"; //$NON-NLS-1$
+
+  private static IHibernateMappingProvider.Factory mappingProviderFactoryInstance = null;
+
+  public static IHibernateMappingProvider.Factory getMappingProviderFactoryInstance()
+  {
+    return mappingProviderFactoryInstance;
+  }
+
+  public static void setMappingProviderFactoryInstance(IHibernateMappingProvider.Factory theMappingProviderFactoryInstance)
+  {
+    mappingProviderFactoryInstance = theMappingProviderFactoryInstance;
+  }
+
+  /**
+   * @return the global singleton instance
+   */
+  public static HibernateUtil getInstance()
+  {
+    return instance;
+  }
+
+  /**
+   * Sets the singleton used by the Hibernate store.
+   *
+   * @param instance
+   *          the instance to set
+   */
+  public static void setInstance(HibernateUtil instance)
+  {
+    HibernateUtil.instance = instance;
+  }
+
+  // Local copy of the datatype factory
+  private DatatypeFactory dataTypeFactory;
+
+  public HibernateUtil()
+  {
+    try
+    {
+      dataTypeFactory = DatatypeFactory.newInstance();
+    }
+    catch (DatatypeConfigurationException ex)
+    {
+      throw new IllegalStateException("Exception ", ex);
+    }
+  }
+
+  public DatatypeFactory getDataTypeFactory()
+  {
+    return dataTypeFactory;
+  }
+
+  public void setDataTypeFactory(DatatypeFactory dataTypeFactory)
+  {
+    this.dataTypeFactory = dataTypeFactory;
+  }
+
+  /**
+   * @return true if the efeature is {@link CDOResource#getContents()} efeature.
+   */
+  public boolean isCDOResourceContents(EStructuralFeature eFeature)
+  {
+    if (!eFeature.getEContainingClass().getEPackage().getNsURI().equals(EresourcePackage.eNS_URI))
+    {
+      return false;
+    }
+    if (!eFeature.getEContainingClass().getName().equals(EresourcePackage.eINSTANCE.getCDOResource().getName()))
+    {
+      return false;
+    }
+    if (!eFeature.getName().equals(EresourcePackage.eINSTANCE.getCDOResource_Contents().getName()))
+    {
+      return false;
+    }
+    return true;
+  }
+
+  /**
+   * Uses the repository package repository to find the EClass of the identified by the CDOClassifierRef.
+   *
+   * @param classifierRef
+   *          {@link CDOClassifierRef} which identifies an EClass
+   * @return the EClass instance identified by the EPackage nsuri and classifier name in the CDOClassifierRef
+   * @throws IllegalArgumentException
+   *           if the EClass can not be found
+   * @see IRepository#getPackageRegistry()
+   */
+  public EClass getEClass(CDOClassifierRef classifierRef)
+  {
+    final CDOPackageRegistry registry = getPackageRegistry();
+    final EPackage ePackage = registry.getEPackage(classifierRef.getPackageURI());
+    if (ePackage == null)
+    {
+      throw new IllegalArgumentException("No EPackage found with nsuri " + classifierRef.getPackageURI()); //$NON-NLS-1$
+    }
+
+    final EClass eClass = (EClass)ePackage.getEClassifier(classifierRef.getClassifierName());
+    if (eClass == null)
+    {
+      throw new IllegalArgumentException("No EClass " + classifierRef.getClassifierName() + " in EPackage " //$NON-NLS-1$ //$NON-NLS-2$
+          + ePackage.getNsURI());
+    }
+
+    return eClass;
+  }
+
+  /**
+   * @return the package registry as present in the repository
+   * @see HibernateStore#getRepository()
+   * @see IRepository#getPackageRegistry()
+   */
+  public CDOPackageRegistry getPackageRegistry()
+  {
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    return accessor.getStore().getRepository().getPackageRegistry();
+  }
+
+  /**
+   * Creates an instance of {@link IHibernateStore}.
+   *
+   * @param mappingProvider
+   *          the provider which generates a mapping.
+   * @param properties
+   *          hibernate and teneo properties combined
+   * @return the created HibernateStore
+   * @see HibernateStore
+   * @since 2.0
+   */
+  public IHibernateStore createStore(IHibernateMappingProvider mappingProvider, Properties properties)
+  {
+    HibernateStore store = new HibernateStore(mappingProvider, properties);
+    mappingProvider.setHibernateStore(store);
+    return store;
+  }
+
+  /**
+   * Can only be used when Eclipse is running. In standalone scenarios create the mapping strategy instance by directly
+   * calling the constructor of the mapping strategy class.
+   *
+   * @see #createFileMappingProvider(String)
+   * @since 2.0
+   */
+  public IHibernateMappingProvider.Factory createMappingProviderFactory(String type)
+  {
+    IExtensionRegistry registry = Platform.getExtensionRegistry();
+    if (registry == null)
+    {
+      return getMappingProviderFactoryInstance();
+    }
+    IConfigurationElement[] elements = registry.getConfigurationElementsFor(OM.BUNDLE_ID, EXT_POINT);
+    for (final IConfigurationElement element : elements)
+    {
+      if (MAPPING_PROVIDER_FACTORY_TAG.equals(element.getName()))
+      {
+        String typeAttr = element.getAttribute(TYPE_ATTRIBUTE);
+        if (ObjectUtil.equals(typeAttr, type))
+        {
+          try
+          {
+            return (IHibernateMappingProvider.Factory)element.createExecutableExtension(CLASS);
+          }
+          catch (CoreException ex)
+          {
+            throw WrappedException.wrap(ex);
+          }
+        }
+      }
+    }
+
+    return getMappingProviderFactoryInstance();
+  }
+
+  /**
+   * Creates a FileMappingProvider using the passed locations.
+   *
+   * @param location
+   *          the locations to load the mappings from
+   * @return a {@link FileHibernateMappingProvider}
+   * @since 3.0
+   */
+  public IHibernateMappingProvider createFileMappingProvider(String location)
+  {
+    return new FileHibernateMappingProvider(location);
+  }
+
+  /**
+   * Retrieves the Hibernate Session from the current {@link HibernateStoreAccessor}. The current HibernateStoreAccessor
+   * is maintained in the {@link HibernateThreadContext}.
+   *
+   * @return the current hibernate session, if none is there a new one is created and a transaction is started.
+   * @since 2.0
+   */
+  public Session getHibernateSession()
+  {
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    return accessor.getHibernateSession();
+  }
+
+  /**
+   * Convenience method to convert the properties of the {@link IStore#getRepository()} to a real java Properties
+   * object.
+   *
+   * @param store
+   *          the properties of this store are converted to a real Properties object
+   * @return a Properties object with the store properties
+   */
+  public Properties getPropertiesFromStore(IHibernateStore store)
+  {
+    final Properties props = new Properties();
+
+    final Map<String, String> storeProps = store.getRepository().getProperties();
+    for (String key : storeProps.keySet())
+    {
+      props.setProperty(key, storeProps.get(key));
+    }
+
+    return props;
+  }
+
+  /**
+   * Checks if the object is a HibernateProxy. If so creates the CDOID without resolving the hibernate proxy. If it not
+   * a proxy then the id is retrieved from the object itself. It is assumed to be a CDORevision then.
+   */
+  public CDOID getCDOID(Object o)
+  {
+    if (o instanceof HibernateProxy)
+    {
+      final Object idValue = ((HibernateProxy)o).getHibernateLazyInitializer().getIdentifier();
+      final String entityName = ((HibernateProxy)o).getHibernateLazyInitializer().getEntityName();
+      final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+      EClass eClass = accessor.getStore().getEClass(entityName);
+      if (eClass.isInterface() || eClass.isAbstract())
+      {
+        // load the object to get the real eClass
+        // cdo can't handle cdoids with the interface/abstract references
+        // need the concrete implementation
+        ((HibernateProxy)o).getHibernateLazyInitializer().initialize();
+        final CDORevision loadedRevision = (CDORevision)((HibernateProxy)o).getHibernateLazyInitializer()
+            .getImplementation((SessionImplementor)accessor.getHibernateSession());
+        return loadedRevision.getID();
+      }
+
+      return HibernateUtil.getInstance().createCDOID(new CDOClassifierRef(eClass), idValue);
+    }
+
+    return ((CDORevision)o).getID();
+  }
+
+  /**
+   * Reads the entity name while taking account the fact that the object maybe a Hibernate proxy.
+   */
+  public String getEntityName(Object o)
+  {
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    if (o instanceof HibernateProxy)
+    {
+      final String entityName = ((HibernateProxy)o).getHibernateLazyInitializer().getEntityName();
+      final EClass eClass = accessor.getStore().getEClass(entityName);
+      if (eClass.isInterface() || eClass.isAbstract())
+      {
+        // load the object to get the real eClass
+        // cdo can't handle cdoids with the interface/abstract references
+        // need the concrete implementation
+        ((HibernateProxy)o).getHibernateLazyInitializer().initialize();
+        final CDORevision loadedRevision = (CDORevision)((HibernateProxy)o).getHibernateLazyInitializer()
+            .getImplementation((SessionImplementor)accessor.getHibernateSession());
+        return accessor.getStore().getEntityName(loadedRevision.getEClass());
+      }
+      return entityName;
+    }
+
+    final EClass eClass = ((CDORevision)o).getEClass();
+    return accessor.getStore().getEntityName(eClass);
+  }
+
+  /**
+   * Deprecated method use: {@link HibernateStore#getEntityName(EClass)}.
+   */
+  @Deprecated
+  public String getEntityName(CDORevision revision)
+  {
+    return getEntityName((Object)revision);
+  }
+
+  /**
+   * Converts a CDOID to an unique String representations. Null, {@link CDOIDTemp} and null CDOID's are returned as null
+   * value. Supports {@link CDOID} and {@link CDOIDExternal}.
+   *
+   * @param id
+   *          the id to convert
+   * @return a unique String
+   */
+  public String convertCDOIDToString(CDOID id)
+  {
+    if (id == null || id.isNull() || id.isTemporary())
+    {
+      return null;
+    }
+
+    final StringBuilder sb = new StringBuilder();
+    CDOIDUtil.write(sb, id);
+    return sb.toString();
+  }
+
+  /**
+   * Converts a String back to its CDOID representation. The same types as in the {@link #convertCDOIDToString(CDOID)}
+   * method are supported.
+   *
+   * @param strID
+   *          the String representation of the CDOID
+   * @return a valid CDOID, can be null
+   */
+  public CDOID convertStringToCDOID(String strID)
+  {
+    if (strID == null)
+    {
+      return null;
+    }
+
+    return CDOIDUtil.read(strID);
+  }
+
+  /**
+   * Translates a temporary {@link CDOID} into a hibernate ID, by finding the object it refers to in the
+   * {@link CommitContext} and then returning or by persisting the object. Note assumes that the hibernate session and
+   * CommitContext are set in HibernateThreadContext.
+   *
+   * @param id
+   *          the CDOID to translate to a valid id, if the id is already valid then it is returned.
+   * @return the passed id or an instance of CDOID which is valid.
+   */
+  public CDOID getCDOIDHibernate(CDOID id)
+  {
+    if (isStoreCreatedID(id))
+    {
+      return id;
+    }
+
+    final CDORevision revision = getCDORevision(id);
+    if (isStoreCreatedID(revision.getID()))
+    {
+      return revision.getID();
+    }
+
+    return getCDOIDHibernate(revision);
+  }
+
+  /**
+   * Retrieves a {@link CDOID} from the passed CDORevision. If the revision has a non-supported CDOID then the revision
+   * is saved to the database.
+   *
+   * @param revision
+   *          the revision to get the id from
+   * @return a CDOID supported by this store
+   */
+  public CDOID getCDOIDHibernate(final CDORevision revision)
+  {
+    final Session session = getHibernateSession();
+    if (!isStoreCreatedID(revision.getID()))
+    {
+      session.saveOrUpdate(revision);
+    }
+
+    checkIsSupportedID(revision.getID());
+
+    return revision.getID();
+  }
+
+  /**
+   * Retrieves the {@link InternalCDORevision} if the target is a {@link CDOObject} then the CDORevision is retrieved
+   * using: {@link CDOObject#cdoRevision()}.
+   *
+   * @param target
+   *          the object which can be a CDOObject or an InternalCDORevision
+   * @return the found {@link InternalCDORevision}
+   */
+  public InternalCDORevision getCDORevision(Object target)
+  {
+    if (target instanceof CDOObject)
+    {
+      return (InternalCDORevision)CDOUtil.getCDOObject((EObject)target).cdoRevision();
+    }
+    return (InternalCDORevision)target;
+  }
+
+  /**
+   * Gets a current object, first checks the new and dirty objects from the {@link CommitContext}. Otherwise reads it
+   * from the session.
+   *
+   * @param id
+   *          the {@link CDOID}, the {@link CDOIDTemp} is resolved against the CommitContext.
+   * @return the retrieved {@link CDORevision} or null if the id is a null ({@link CDOIDUtil#isNull(CDOID)})
+   */
+  public InternalCDORevision getCDORevision(CDOID id)
+  {
+    if (CDOIDUtil.isNull(id))
+    {
+      return null;
+    }
+
+    if (HibernateThreadContext.isCommitContextSet())
+    {
+      final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+      InternalCDORevision revision;
+      // if ((revision = commitContext.getDirtyObject(id)) != null)
+      // {
+      // return revision;
+      // }
+
+      if ((revision = commitContext.getNewObject(id)) != null)
+      {
+        return revision;
+      }
+
+      // maybe the temp was already translated
+      final CDOID newID = commitContext.getCommitContext().getIDMappings().get(id);
+      if (newID != null)
+      {
+        return getCDORevision(newID);
+      }
+    }
+
+    checkIsSupportedID(id);
+
+    final String entityName = getEntityName(id);
+    final Serializable idValue = getIdValue(id);
+    return (InternalCDORevision)getHibernateSession().get(entityName, idValue);
+  }
+
+  /**
+   * Retrieves a {@link InternalCDORevision} from the {@link CommitContext} or from the database/hibernate session.
+   * Resolves temporary id's: {@link CDOIDTemp}.
+   *
+   * @param id
+   *          the {@link CDOID} identifying the object,
+   * @return the retrieved CDORevision or null if the revision is not found
+   */
+  public InternalCDORevision getCDORevisionNullable(CDOID id)
+  {
+    if (CDOIDUtil.isNull(id))
+    {
+      return null;
+    }
+
+    if (HibernateThreadContext.isCommitContextSet())
+    {
+      final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+      InternalCDORevision revision;
+      if ((revision = commitContext.getDirtyObject(id)) != null)
+      {
+        return revision;
+      }
+
+      if ((revision = commitContext.getNewObject(id)) != null)
+      {
+        return revision;
+      }
+
+      // maybe the temp was already translated
+      if (id instanceof CDOIDTemp)
+      {
+        final CDOID newID = commitContext.getCommitContext().getIDMappings().get(id);
+        if (newID != null)
+        {
+          return getCDORevision(newID);
+        }
+      }
+    }
+
+    if (!isStoreCreatedID(id))
+    {
+      return null;
+    }
+
+    final String entityName = getEntityName(id);
+    final Serializable idValue = getIdValue(id);
+    return (InternalCDORevision)getHibernateSession().get(entityName, idValue);
+  }
+
+  /**
+   * Converts a String to a containing feature id. Note this is not the same as the feature id. The feature is the
+   * containing feature of the passed EObject.
+   *
+   * @param contained
+   *          the object which is contained
+   * @param value
+   *          the value to convert
+   * @return the containing feature id.
+   * @see #getContainerFeatureId(EClass, EObject, EStructuralFeature)
+   */
+  public int convertStringToFeatureID(EObject contained, String value)
+  {
+    final String[] values = value.split(SEPARATOR);
+    final String nsuri = values[0];
+    final EPackage eContainerPackage = getPackageRegistry().getEPackage(nsuri);
+    final String eContainerEClassName = values[1];
+    final EClass eContainingClass = (EClass)eContainerPackage.getEClassifier(eContainerEClassName);
+
+    final EPackage eFeaturePackage = getPackageRegistry().getEPackage(values[2]);
+
+    final String eClassifierName = values[3];
+    final EClassifier eClassifier = eFeaturePackage.getEClassifier(eClassifierName);
+    final EClass eFeatureClass = (EClass)eClassifier;
+    final String eFeatureName = values[4];
+    final EStructuralFeature eFeature = eFeatureClass.getEStructuralFeature(eFeatureName);
+    return getContainerFeatureId(eContainingClass, contained, eFeature);
+  }
+
+  /**
+   * Computes a valid containing feature id for a passed containing EClass, the contained object and the
+   * EStructuralFeature which can be the container or the containment feature.
+   *
+   * @param containingEClass
+   *          the EClass representing the container
+   * @param contained
+   *          the EObject which is contained
+   * @param eFeature
+   *          the EStructuralFeature, can be the efeature of the containingEClass or of the contained.
+   */
+  public int getContainerFeatureId(EClass containingEClass, EObject contained, EStructuralFeature eFeature)
+  {
+    if (eFeature instanceof EAttribute)
+    {
+      // featuremap??
+      return InternalEObject.EOPPOSITE_FEATURE_BASE - containingEClass.getFeatureID(eFeature);
+    }
+
+    final EReference eReference = (EReference)eFeature;
+    if (eReference.getEOpposite() != null)
+    {
+      final EReference containerEReference = eReference.getEOpposite();
+      return contained.eClass().getFeatureID(containerEReference);
+    }
+    return InternalEObject.EOPPOSITE_FEATURE_BASE - containingEClass.getFeatureID(eReference);
+  }
+
+  /**
+   * Creates the correct subclass of {@link CDOID} for the passed EClass and hibernate id object.
+   *
+   * @param classifierRef
+   *          the EClass to set in the CDOID
+   * @param idValue
+   *          the real id value
+   * @return a supported instance of CDOID.
+   * @see CDOIDUtil
+   */
+  public CDOID createCDOID(CDOClassifierRef classifierRef, Object idValue)
+  {
+    if (idValue instanceof String)
+    {
+      return CDOIDUtil.createStringWithClassifier((String)idValue, classifierRef);
+    }
+
+    if (idValue instanceof Long)
+    {
+      return CDOIDUtil.createLongWithClassifier((Long)idValue, classifierRef);
+    }
+
+    throw new IllegalArgumentException("The ID value type " + idValue.getClass() //$NON-NLS-1$
+        + " is not supported by this store. Method called with " + classifierRef); //$NON-NLS-1$
+  }
+
+  /**
+   * Checks if the passed id is created/used by this store.
+   *
+   * @param id
+   *          the {@link CDOID} to check
+   * @return true if this is a CDOID which is used/created by this store.
+   */
+  public boolean isStoreCreatedID(CDOID id)
+  {
+    // TODO: not the nicest check but we know that only these are supported
+    // by the hibernatestore
+    return id instanceof CDOClassifierRef.Provider || id instanceof CDOIDExternal;
+  }
+
+  /**
+   * Checks if the passed {@link CDOID} is a type supported by this store.
+   *
+   * @param id
+   *          the CDOID instance to check
+   * @throws IllegalArgumentException
+   *           if the passed type is not supported.
+   */
+  public void checkIsSupportedID(CDOID id)
+  {
+    if (!isStoreCreatedID(id))
+    {
+      throw new IllegalArgumentException("This CDOID type " + id + " is not supported by this store. " //$NON-NLS-1$ //$NON-NLS-2$
+          + id.getClass().getName());
+    }
+  }
+
+  /**
+   * @param id
+   *          CDOID to get the internal id from
+   * @return the id used by Hibernate, the String or Long value in the CDOID object.
+   */
+  public Serializable getIdValue(CDOID id)
+  {
+    if (id instanceof CDOIDString)
+    {
+      return ((CDOIDString)id).getStringValue();
+    }
+    return CDOIDUtil.getLong(id);
+  }
+
+  /**
+   * Retrieves the entity name for the EClass present in the CDOID.
+   *
+   * @param id
+   *          the {@link CDOID} to get the EClass from
+   * @return the entity name for the EClass of the CDOID.
+   * @see HibernateStore#getEntityName(EClass)
+   */
+  public String getEntityName(CDOID id)
+  {
+    final CDOID localId = resolvePossibleTempId(id);
+    final CDOClassifierRef classifierRef = CDOIDUtil.getClassifierRef(localId);
+    if (classifierRef == null)
+    {
+      throw new IllegalArgumentException("This CDOID type of " + id + " is not supported by this store."); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    return accessor.getStore().getEntityName(classifierRef);
+  }
+
+  /**
+   * If the passed in id is a temp id, resolve it against the {@link HibernateThreadContext#getCommitContext()}
+   */
+  public CDOID resolvePossibleTempId(CDOID cdoId)
+  {
+    if (!(cdoId instanceof CDOIDTemp))
+    {
+      return cdoId;
+    }
+    if (HibernateThreadContext.isCommitContextSet())
+    {
+      final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+
+      final CDOID newID = commitContext.getCommitContext().getIDMappings().get(cdoId);
+      if (newID != null)
+      {
+        return newID;
+      }
+
+      InternalCDORevision revision;
+      if ((revision = commitContext.getNewObject(cdoId)) != null)
+      {
+        return revision.getID();
+      }
+    }
+    return cdoId;
+  }
+
+  /**
+   * Create a {@link XMLGregorianCalendar} from a {@link Date} instance.
+   */
+  public XMLGregorianCalendar getXMLGregorianCalendarDate(Date date, boolean dateTime)
+  {
+    final XMLGregorianCalendar gregCalendar = dataTypeFactory.newXMLGregorianCalendar();
+    final Calendar calendar = Calendar.getInstance();
+    calendar.setTime(date);
+
+    gregCalendar.setYear(calendar.get(Calendar.YEAR));
+    gregCalendar.setMonth(calendar.get(Calendar.MONTH) + 1); // correct with 1 on purpose
+    gregCalendar.setDay(calendar.get(Calendar.DAY_OF_MONTH));
+
+    if (dateTime)
+    {
+      gregCalendar.setHour(calendar.get(Calendar.HOUR_OF_DAY));
+      gregCalendar.setMinute(calendar.get(Calendar.MINUTE));
+      gregCalendar.setSecond(calendar.get(Calendar.SECOND));
+      gregCalendar.setMillisecond(calendar.get(Calendar.MILLISECOND));
+    }
+
+    return gregCalendar;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.java
new file mode 100644
index 0000000..80ebc89
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemInformation.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+/**
+ * Stores system related information, is used to keep track that CDO is started for the first time. There should only be
+ * one SystemInformation object in the database.
+ *
+ * @author Martin Taal
+ */
+public class SystemInformation
+{
+  private long id = 1;
+
+  private long creationTime;
+
+  private boolean firstTime;
+
+  public boolean isFirstTime()
+  {
+    return firstTime;
+  }
+
+  public void setFirstTime(boolean firstTime)
+  {
+    this.firstTime = firstTime;
+  }
+
+  public long getId()
+  {
+    return id;
+  }
+
+  public void setId(long id)
+  {
+    // on purposely not changing the id
+    // this.id = id;
+  }
+
+  public long getCreationTime()
+  {
+    return creationTime;
+  }
+
+  public void setCreationTime(long creationTime)
+  {
+    this.creationTime = creationTime;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.java
new file mode 100644
index 0000000..ebc462c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/SystemProperty.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate;
+
+/**
+ * Is used to store and retrieve properties in the database.
+ *
+ * @author Martin Taal
+ */
+public class SystemProperty
+{
+  private String name;
+
+  private String value;
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public void setName(String name)
+  {
+    this.name = name;
+  }
+
+  public String getValue()
+  {
+    return value;
+  }
+
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.java
new file mode 100644
index 0000000..279bc82
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/bundle/OM.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Eike Stepper
+ */
+public abstract class OM
+{
+  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.hibernate"; //$NON-NLS-1$
+
+  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+  public static final OMLogger LOG = BUNDLE.logger();
+
+  /**
+   * @author Eike Stepper
+   */
+  public static final class Activator extends OSGiActivator
+  {
+    public Activator()
+    {
+      super(BUNDLE);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.java
new file mode 100644
index 0000000..ac228e7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ClassServerInfo.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.info;
+
+/**
+ * @author Eike Stepper
+ */
+public final class ClassServerInfo extends ServerInfo
+{
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.java
new file mode 100644
index 0000000..f14df2d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/FeatureServerInfo.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.info;
+
+/**
+ * @author Eike Stepper
+ */
+public final class FeatureServerInfo extends ServerInfo
+{
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.java
new file mode 100644
index 0000000..f46e1a0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/PackageServerInfo.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.info;
+
+/**
+ * @author Eike Stepper
+ */
+public final class PackageServerInfo extends ServerInfo
+{
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.java
new file mode 100644
index 0000000..ca15a45
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/info/ServerInfo.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.info;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class ServerInfo
+{
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.java
new file mode 100644
index 0000000..90fdadf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBlobUserType.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.lob.CDOBlob;
+import org.eclipse.emf.cdo.common.lob.CDOLobUtil;
+
+/**
+ * Persists a {@link CDOBlob} in the DB.
+ */
+public class CDOBlobUserType extends CDOLobUserType
+{
+  public Class<?> returnedClass()
+  {
+    return CDOBlob.class;
+  }
+
+  @Override
+  protected Object createLob(byte[] id, long size)
+  {
+    return CDOLobUtil.createBlob(id, size);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java
new file mode 100644
index 0000000..f16b63a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampGetter.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * Gets the time stamp value to store in the database.
+ *
+ * @see CDOHibernateBranchPointImpl
+ * @author Martin Taal
+ */
+public class CDOBranchTimeStampGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOBranchTimeStampGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    final Object value = revision.getTimeStamp();
+    return value;
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java
new file mode 100644
index 0000000..760c10b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOBranchTimeStampSetter.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateBranchPointImpl;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+/**
+ * Sets the time stamp information in the revision.
+ *
+ * @see CDOHibernateBranchPointImpl
+ * @author Martin Taal
+ */
+public class CDOBranchTimeStampSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOBranchTimeStampSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    final long timeStamp;
+    if (value == null)
+    {
+      timeStamp = 0;
+    }
+    else
+    {
+      timeStamp = (Long)value;
+    }
+    final CDOHibernateBranchPointImpl branchPoint = new CDOHibernateBranchPointImpl(timeStamp);
+    revision.setBranchPoint(branchPoint);
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.java
new file mode 100644
index 0000000..eb7854d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOClobUserType.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.lob.CDOClob;
+import org.eclipse.emf.cdo.common.lob.CDOLobUtil;
+
+/**
+ * Persists a {@link CDOClob} in the DB.
+ */
+public class CDOClobUserType extends CDOLobUserType
+{
+  public Class<?> returnedClass()
+  {
+    return CDOClob.class;
+  }
+
+  @Override
+  protected Object createLob(byte[] id, long size)
+  {
+    return CDOLobUtil.createClob(id, size);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.java
new file mode 100644
index 0000000..5f4c9de
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerGetter.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.server.internal.hibernate.ContainerInfoConverter;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * gets the container information as a String (to-be-stored in the db) from the CDORevision.
+ *
+ * @see ContainerInfoConverter
+ * @author Martin Taal
+ */
+public class CDOContainerGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOContainerGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    if (target instanceof CDOID)
+    {
+      return target;
+    }
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    return ContainerInfoConverter.getInstance().convertContainerRelationToString(revision);
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.java
new file mode 100644
index 0000000..6eb7115
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOContainerSetter.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.ContainerInfoConverter;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+/**
+ * Sets the container information from the String (stored in the db) back into the CDORevision.
+ *
+ * @see ContainerInfoConverter
+ * @author Martin Taal
+ */
+public class CDOContainerSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOContainerSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    ContainerInfoConverter.getInstance().setContainerRelationFromString(revision, (String)value);
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java
new file mode 100644
index 0000000..abb0d2f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOCustomTypeUserType.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.type.StandardBasicTypes;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Properties;
+
+/**
+ * Standard user type used for all custom types.
+ */
+public class CDOCustomTypeUserType implements UserType, ParameterizedType
+{
+  private static final int[] SQL_TYPES = { Types.VARCHAR };
+
+  public void setParameterValues(Properties arg0)
+  {
+  }
+
+  public Class<?> returnedClass()
+  {
+    return Object.class;
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    try
+    {
+      final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0], sessionImplementor);
+      if (rs.wasNull())
+      {
+        return null;
+      }
+
+      return value;
+    }
+    catch (Exception e)
+    {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    try
+    {
+      if (value == null)
+      {
+        statement.setNull(index, Types.VARCHAR);
+        return;
+      }
+      statement.setString(index, value.toString());
+    }
+    catch (Exception e)
+    {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java
new file mode 100644
index 0000000..46198c5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumIntegerType.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2009-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+
+/**
+ * Implements the EMF UserType for an Enum in a dynamic model, for an integer field.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class CDOENumIntegerType extends CDOENumStringType
+{
+  /** The sql types used for enums */
+  private static final int[] SQL_TYPES = new int[] { Types.INTEGER };
+
+  /** Hashmap with string to enum mappings */
+  private final HashMap<Integer, Enumerator> localCache = new HashMap<Integer, Enumerator>();
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object)
+   */
+  @Override
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws HibernateException, SQLException
+  {
+    final int value = rs.getInt(names[0]);
+    if (rs.wasNull())
+    {
+      return null;
+    }
+
+    Integer objValue = new Integer(value);
+    Enumerator enumValue = localCache.get(objValue);
+    if (enumValue != null)
+    {
+      return enumValue;
+    }
+
+    enumValue = getEEnum().getEEnumLiteral(objValue.intValue());
+    localCache.put(objValue, enumValue);
+    return enumValue;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)
+   */
+  @Override
+  public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor sessionImplementor) throws HibernateException, SQLException
+  {
+    if (value == null)
+    {
+      st.setNull(index, Types.INTEGER);
+    }
+    else if (value instanceof Integer)
+    {
+      st.setInt(index, (Integer)value);
+    }
+    else
+    {
+      st.setInt(index, ((Enumerator)value).getValue());
+    }
+  }
+
+  /** An enum is stored in one varchar */
+  @Override
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java
new file mode 100644
index 0000000..b65c0d6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOENumStringType.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2009-2012, 2014-2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Properties;
+
+/**
+ * Implements the EMF UserType for an Enum
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class CDOENumStringType implements UserType, ParameterizedType
+{
+  private static final String EPACKAGE_META = "epackage"; //$NON-NLS-1$
+
+  private static final String ECLASSIFIER_META = "eclassifier"; //$NON-NLS-1$
+
+  /** The sql types used for enums */
+  private static final int[] SQL_TYPES = new int[] { Types.VARCHAR };
+
+  /** The enum type we are handling here */
+  protected EEnum eEnum;
+
+  private String ePackageNsUri;
+
+  private String eClassifierName;
+
+  /** Hashmap with string to enum mappings */
+  private final HashMap<String, Enumerator> localCache = new HashMap<String, Enumerator>();
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#assemble(java.io.Serializable, java.lang.Object)
+   */
+  public Object assemble(Serializable cached, Object owner) throws HibernateException
+  {
+    if (cached instanceof String)
+    {
+      return getEEnum().getEEnumLiteralByLiteral((String)cached);
+    }
+    return cached;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#deepCopy(java.lang.Object)
+   */
+  public Object deepCopy(Object value) throws HibernateException
+  {
+    return value;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#disassemble(java.lang.Object)
+   */
+  public Serializable disassemble(Object value) throws HibernateException
+  {
+    if (value instanceof EEnumLiteral)
+    {
+      return ((EEnumLiteral)value).getLiteral();
+    }
+
+    return (Serializable)value;
+  }
+
+  /** Compares the int values of the enumerates */
+  public boolean equals(Object x, Object y) throws HibernateException
+  {
+    // todo: check compare on null values
+    if (x == null && y == null)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    if (x.getClass() != y.getClass())
+    {
+      return false;
+    }
+
+    if (x instanceof Integer && y instanceof Integer)
+    {
+      return ((Integer)x).intValue() == ((Integer)y).intValue();
+    }
+
+    if (x instanceof String && y instanceof String)
+    {
+      return ((String)x).equals(y);
+    }
+
+    return ((Enumerator)x).getValue() == ((Enumerator)y).getValue();
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#hashCode(java.lang.Object)
+   */
+  public int hashCode(Object x) throws HibernateException
+  {
+    return x.hashCode();
+  }
+
+  /** Not mutable */
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object)
+   */
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws HibernateException, SQLException
+  {
+    final String literal = rs.getString(names[0]);
+    if (rs.wasNull())
+    {
+      return null;
+    }
+
+    Enumerator enumValue = localCache.get(literal);
+    if (enumValue != null)
+    {
+      return enumValue;
+    }
+
+    enumValue = getEEnum().getEEnumLiteralByLiteral(literal.trim());
+    if (enumValue == null)
+    {
+      throw new IllegalStateException("The enum value " + literal + " is invalid for enumerator: " //$NON-NLS-1$ //$NON-NLS-2$
+          + getEEnum().getName());
+    }
+
+    localCache.put(literal, enumValue);
+    return enumValue;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)
+   */
+  public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor sessionImplementor) throws HibernateException, SQLException
+  {
+    if (value == null)
+    {
+      // st.setString(index, ((Enumerator)getEEnum().getDefaultValue()).getLiteral());
+      st.setNull(index, Types.VARCHAR);
+    }
+    else
+    {
+      if (value instanceof Integer)
+      {
+        final EEnumLiteral literal = getEEnum().getEEnumLiteral((Integer)value);
+        st.setString(index, literal.getLiteral());
+      }
+      else if (value instanceof String)
+      {
+        final EEnumLiteral literal = getEEnum().getEEnumLiteral((String)value);
+        st.setString(index, literal.getLiteral());
+      }
+      else
+      {
+        st.setString(index, ((Enumerator)value).getLiteral());
+      }
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.usertype.UserType#replace(java.lang.Object, java.lang.Object, java.lang.Object)
+   */
+  public Object replace(Object original, Object target, Object owner) throws HibernateException
+  {
+    return original;
+  }
+
+  /** Returns the parameterizezd enumType */
+  public Class<?> returnedClass()
+  {
+    return getEEnum().getClass();
+  }
+
+  /** An enum is stored in one varchar */
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  protected EEnum getEEnum()
+  {
+    if (eEnum == null)
+    {
+      final CDOPackageRegistry packageRegistry = HibernateUtil.getInstance().getPackageRegistry();
+      final EPackage ePackage = packageRegistry.getEPackage(ePackageNsUri);
+      if (ePackage == null)
+      {
+        throw new IllegalStateException("EPackage with nsuri " + ePackageNsUri + " not found"); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+
+      final EClassifier eClassifier = ePackage.getEClassifier(eClassifierName);
+      if (eClassifier == null || !(eClassifier instanceof EEnum))
+      {
+        throw new IllegalStateException("EPackage " + ePackage.getName() + " does not have an EEnum with name " //$NON-NLS-1$ //$NON-NLS-2$
+            + eClassifierName);
+      }
+
+      eEnum = (EEnum)eClassifier;
+    }
+
+    return eEnum;
+  }
+
+  /** Sets the enumclass */
+  public void setParameterValues(Properties parameters)
+  {
+    ePackageNsUri = parameters.getProperty(EPACKAGE_META);
+    eClassifierName = parameters.getProperty(ECLASSIFIER_META);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java
new file mode 100644
index 0000000..4e7a328
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDAnyUserType.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2009-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.eclipse.net4j.util.WrappedException;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.type.StandardBasicTypes;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+
+/**
+ * Persists a CDOID in the DB in the contents of a resource, a many-to-any mapping.
+ */
+public class CDOIDAnyUserType implements UserType
+{
+  private static final int[] SQL_TYPES = { Types.VARCHAR, Types.VARCHAR };
+
+  private static final String SEPARATOR = "__;__"; //$NON-NLS-1$
+
+  private static final String EXTERNAL = "EXTERNAL"; //$NON-NLS-1$
+
+  /** Constructor by id */
+  private final HashMap<String, Constructor<?>> constructors = new HashMap<String, Constructor<?>>();
+
+  public CDOIDAnyUserType()
+  {
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public Class<?> returnedClass()
+  {
+    return CDOID.class;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[1], sessionImplementor);
+    if (rs.wasNull())
+    {
+      return null;
+    }
+    final String entityName = StandardBasicTypes.STRING.nullSafeGet(rs, names[0], sessionImplementor);
+    return deserializeId(entityName, value);
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    final String entityName;
+    final CDOID localValue;
+    if (value instanceof CDORevision)
+    {
+      final CDORevision cdoRevision = (CDORevision)value;
+      localValue = cdoRevision.getID();
+      // cast to object to use correct method from hibernate util
+      entityName = HibernateUtil.getInstance().getEntityName((Object)cdoRevision);
+    }
+    else if (value instanceof CDOID)
+    {
+      localValue = (CDOID)value;
+      entityName = HibernateUtil.getInstance().getEntityName(localValue);
+    }
+    else
+    {
+      throw new IllegalArgumentException("Type " + value + " not supported here");
+    }
+
+    // the first column is there for backward compatibility, fill it with nulls..
+    final String strValue = serializeId(localValue);
+    if (strValue == null)
+    {
+      statement.setNull(index, Types.VARCHAR);
+      statement.setNull(index + 1, Types.VARCHAR);
+    }
+    else
+    {
+      statement.setString(index, entityName);
+      statement.setString(index + 1, strValue);
+    }
+  }
+
+  protected String serializeId(CDOID id)
+  {
+    final CDOID cdoID = HibernateUtil.getInstance().resolvePossibleTempId(id);
+    if (cdoID == null || cdoID.isNull())
+    {
+      return null;
+    }
+    if (cdoID.getType() == CDOID.Type.EXTERNAL_OBJECT)
+    {
+      return EXTERNAL + SEPARATOR + ((CDOIDExternal)cdoID).getURI();
+    }
+    final Serializable idValue = HibernateUtil.getInstance().getIdValue(cdoID);
+    return idValue + SEPARATOR + idValue.getClass().getName();
+  }
+
+  protected CDOID deserializeId(String entityName, String value)
+  {
+    final int end1 = value.indexOf(SEPARATOR);
+    final int start2 = end1 + SEPARATOR.length();
+
+    final String idStr = value.substring(0, end1);
+    final String idClassName = value.substring(start2);
+
+    if (EXTERNAL.equals(entityName))
+    {
+      return CDOIDUtil.createExternal(idStr);
+    }
+
+    final Serializable idValue = getId(idStr, idClassName);
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    final EClass eClass = accessor.getStore().getEClass(entityName);
+    return HibernateUtil.getInstance().createCDOID(new CDOClassifierRef(eClass), idValue);
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+
+  /** Creates an id object of the correct type */
+  private Serializable getId(String idStr, String idType)
+  {
+    try
+    {
+      Constructor<?> constructor = constructors.get(idType);
+      if (constructor == null)
+      {
+        final Class<?> idClass = Thread.currentThread().getContextClassLoader().loadClass(idType);
+        constructor = idClass.getConstructor(new Class[] { String.class });
+        constructors.put(idType, constructor);
+      }
+
+      return (Serializable)constructor.newInstance(new Object[] { idStr });
+    }
+    catch (Exception e)
+    {
+      throw WrappedException.wrap(e);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java
new file mode 100644
index 0000000..63e6ff2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDExternalUserType.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2009-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Properties;
+
+/**
+ * A user type which can handle {@link CDOIDExternal}. It's stored in a single varchar field.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class CDOIDExternalUserType implements UserType, ParameterizedType
+{
+  private static final int[] SQL_TYPES = { Types.VARCHAR };
+
+  public CDOIDExternalUserType()
+  {
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public Class<?> returnedClass()
+  {
+    return CDOID.class;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet resultSet, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    final String data = resultSet.getString(names[0]);
+    if (data == null)
+    {
+      return null;
+    }
+
+    return CDOIDUtil.createExternal(data);
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    if (value == null)
+    {
+      statement.setNull(index, Types.VARCHAR);
+      return;
+    }
+
+    final Object localValue;
+    if (value instanceof CDORevision)
+    {
+      localValue = HibernateUtil.getInstance().getCDOID(value);
+    }
+    else
+    {
+      localValue = value;
+    }
+
+    if (localValue instanceof CDOIDExternal)
+    {
+      statement.setString(index, ((CDOIDExternal)localValue).getURI());
+    }
+    else
+    {
+      statement.setString(index, "#" + ((CDOID)localValue).toURIFragment());
+    }
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+
+  public void setParameterValues(Properties parameters)
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java
new file mode 100644
index 0000000..da202f8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertyGetter.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDObject;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOIDPropertyGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOIDPropertyGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    if (target instanceof CDOID)
+    {
+      return target;
+    }
+    InternalCDORevision revision = (InternalCDORevision)target;
+    if (!(HibernateUtil.getInstance().getCDOID(revision) instanceof CDOIDObject))
+    {
+      if (!isVirtualProperty())
+      {
+        final Object value = super.get(target);
+        // todo: value can be null for generated values?
+        if (value != null)
+        {
+          setCDOID(revision, value);
+        }
+
+        return value;
+      }
+
+      return null;
+    }
+
+    if (isVirtualProperty())
+    {
+      return HibernateUtil.getInstance().getIdValue(revision.getID());
+    }
+
+    Object id = super.get(target);
+    setCDOID(revision, id);
+
+    // TODO: does this make sense?
+    // if (id.getId() == null)
+    // {
+    // id.setId((Serializable)id);
+    // }
+    return id;
+  }
+
+  private void setCDOID(CDORevision target, Object value)
+  {
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    final CDOID id = HibernateUtil.getInstance().getCDOID(revision);
+    if (id == null || id instanceof CDOIDTemp)
+    {
+      final CDOID newCDOID = HibernateUtil.getInstance().createCDOID(new CDOClassifierRef(revision.getEClass()), value);
+      revision.setID(newCDOID);
+      if (HibernateThreadContext.isCommitContextSet())
+      {
+        final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+        commitContext.setNewID(id, newCDOID);
+        if (id instanceof CDOIDTemp)
+        {
+          commitContext.getCommitContext().addIDMapping(id, newCDOID);
+        }
+      }
+    }
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java
new file mode 100644
index 0000000..a83680f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDPropertySetter.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+import java.io.Serializable;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOIDPropertySetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOIDPropertySetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    if (value == null)
+    {
+      if (getEStructuralFeature().isUnsettable())
+      {
+        revision.unset(getEStructuralFeature());
+      }
+
+      return;
+    }
+
+    final CDOID revisionID = HibernateUtil.getInstance().getCDOID(revision);
+    if (revisionID == null || revisionID instanceof CDOIDTemp)
+    {
+      final CDOID newCDOID = HibernateUtil.getInstance().createCDOID(new CDOClassifierRef(revision.getEClass()), value);
+      revision.setID(newCDOID);
+      if (HibernateThreadContext.isCommitContextSet())
+      {
+        final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+        commitContext.setNewID(revisionID, newCDOID);
+        if (revisionID instanceof CDOIDTemp)
+        {
+          commitContext.getCommitContext().addIDMapping(revisionID, newCDOID);
+        }
+      }
+    }
+    else
+    {
+      final Serializable idValue = HibernateUtil.getInstance().getIdValue(revisionID);
+      if (idValue == null)
+      {
+        throw new IllegalStateException("ID value is null for revision " + revision); //$NON-NLS-1$
+      }
+
+      if (!idValue.equals(value))
+      {
+        throw new IllegalStateException("Current id and new id are different " + value + "/" + idValue); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+    }
+
+    if (!isVirtualProperty())
+    {
+      super.set(target, value, factory);
+    }
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
new file mode 100644
index 0000000..6f47c6b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOIDUserType.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.type.StandardBasicTypes;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+/**
+ * Persists a CDOID in the DB. Currently {@link CDOIDExternal} is supported.
+ */
+public class CDOIDUserType implements UserType
+{
+  private static final int[] SQL_TYPES = { Types.VARCHAR };
+
+  public CDOIDUserType()
+  {
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public Class<?> returnedClass()
+  {
+    return CDOID.class;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0], sessionImplementor);
+    if (rs.wasNull())
+    {
+      return null;
+    }
+
+    return HibernateUtil.getInstance().convertStringToCDOID(value);
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    if (value == null || value instanceof CDOID && ((CDOID)value).isNull())
+    {
+      statement.setNull(index, Types.VARCHAR);
+      return;
+    }
+    else if (value instanceof CDOIDTemp)
+    {
+      // try to resolve the temp id
+      final CDORevision revision = HibernateUtil.getInstance().getCDORevisionNullable((CDOID)value);
+      if (revision != null)
+      {
+        value = HibernateUtil.getInstance().getCDOID(revision);
+      }
+    }
+    else if (value instanceof CDORevision)
+    {
+      value = HibernateUtil.getInstance().getCDOIDHibernate((CDORevision)value);
+    }
+
+    final String strValue = value instanceof String ? (String)value : HibernateUtil.getInstance().convertCDOIDToString((CDOID)value);
+    if (strValue == null)
+    {
+      statement.setNull(index, Types.VARCHAR);
+      return;
+    }
+
+    statement.setString(index, strValue);
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java
new file mode 100644
index 0000000..32fcb21
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOInterceptor.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.eclipse.emf.teneo.hibernate.EMFInterceptor;
+
+import org.hibernate.type.Type;
+
+import java.io.Serializable;
+
+/**
+ * Resolves entitynames, todo: use entityname strategy!
+ *
+ * @author Martin Taal
+ */
+public class CDOInterceptor extends EMFInterceptor
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOInterceptor()
+  {
+  }
+
+  @Override
+  public Boolean isTransient(Object entity)
+  {
+    if (!(entity instanceof CDORevision))
+    {
+      return super.isTransient(entity);
+    }
+
+    final CDORevision revision = (CDORevision)entity;
+    final CDOID id = HibernateUtil.getInstance().getCDOID(revision);
+    if (id.isNull() || id.isTemporary())
+    {
+      return true;
+    }
+
+    return null;
+  }
+
+  @Override
+  public String getEntityName(Object object)
+  {
+    if (!(object instanceof CDORevision))
+    {
+      return super.getEntityName(object);
+    }
+
+    return HibernateUtil.getInstance().getEntityName(object);
+  }
+
+  @Override
+  public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)
+  {
+    return false;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java
new file mode 100644
index 0000000..461bba9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOLobUserType.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.lob.CDOBlob;
+import org.eclipse.emf.cdo.common.lob.CDOClob;
+import org.eclipse.emf.cdo.common.lob.CDOLob;
+
+import org.eclipse.net4j.util.HexUtil;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.type.StandardBasicTypes;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Properties;
+
+/**
+ * Base class for persisting {@link CDOBlob} and {@link CDOClob}.
+ */
+public abstract class CDOLobUserType implements UserType, ParameterizedType
+{
+  private static final String SEPARATOR = " - ";
+
+  private static final int[] SQL_TYPES = { Types.CLOB };
+
+  public CDOLobUserType()
+  {
+  }
+
+  public void setParameterValues(Properties arg0)
+  {
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    try
+    {
+      final String value = StandardBasicTypes.STRING.nullSafeGet(rs, names[0], sessionImplementor);
+      if (rs.wasNull())
+      {
+        return null;
+      }
+
+      return convertStringToLob(value);
+    }
+    catch (Exception e)
+    {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    try
+    {
+      final CDOLob<?> cdoLob = (CDOLob<?>)value;
+
+      if (value == null || cdoLob.getSize() == 0)
+      {
+        statement.setNull(index, Types.VARCHAR);
+        return;
+      }
+      statement.setString(index, convertLobToString(cdoLob));
+    }
+    catch (Exception e)
+    {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  private String convertLobToString(CDOLob<?> lob)
+  {
+    return HexUtil.bytesToHex(lob.getID()) + SEPARATOR + lob.getSize();
+  }
+
+  private Object convertStringToLob(String lobId)
+  {
+    int pos = lobId.indexOf(SEPARATOR);
+
+    byte[] id = HexUtil.hexToBytes(lobId.substring(0, pos));
+    long size = Long.parseLong(lobId.substring(pos + SEPARATOR.length()));
+    return createLob(id, size);
+  }
+
+  protected abstract Object createLob(byte[] id, long size);
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.java
new file mode 100644
index 0000000..f247f5d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeGetter.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2009-2013, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.hibernate.type.CollectionType;
+
+/**
+ * @author Martin Taal
+ */
+// Howto handle hibernate lists:
+// - a new owner: the owner is persisted and its lists are replaced with hibernate
+// persistentlist, the hibernate persitentlist will have a delegate (internally) which is the list which was previously
+// present in the owner.
+// - an existing owner: the owner is read from the db and hibernate will set a persistentlist
+// directly
+//
+// The solution also needs to handle the following:
+// - cdo does not have direct java references but stores cdoids in the list while hibernate expects real java object
+// references.
+// - cdo uses a moveablearraylist and not the standard arraylist
+//
+// The solution:
+// - never return null when hibernate asks for the current value of the manyreference, always
+// return a MoveableArrayList so that hibernate uses that as the delegate, set the MoveableArrayList
+public class CDOManyAttributeGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOManyAttributeGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    // Check if there is already a persistentcollection
+    PersistentCollection collection = PersistableListHolder.getInstance().getListMapping(target, getEStructuralFeature());
+    if (collection != null)
+    {
+      return collection;
+    }
+
+    InternalCDORevision revision = (InternalCDORevision)target;
+    CDOList list = revision.getOrCreateList(getEStructuralFeature(), 10);
+
+    if (list instanceof WrappedHibernateList)
+    {
+      final WrappedHibernateList wrappedHibernateList = (WrappedHibernateList)list;
+      if (((WrappedHibernateList)list).isUninitializedCollection())
+      {
+        return CollectionType.UNFETCHED_COLLECTION;
+      }
+      final Object delegate = wrappedHibernateList.getDelegate();
+      if (delegate instanceof PersistentCollection)
+      {
+        return delegate;
+      }
+    }
+
+    // Wrap the moveablearraylist
+    HibernateMoveableListWrapper wrapper = new HibernateMoveableListWrapper();
+    wrapper.setEFeature(getEStructuralFeature());
+    wrapper.setDelegate(list);
+
+    // And return it
+    return wrapper;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.java
new file mode 100644
index 0000000..17be39a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyAttributeSetter.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009-2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+import java.util.List;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOManyAttributeSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOManyAttributeSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    // Do some checking
+    if (value instanceof HibernateMoveableListWrapper)
+    {
+      super.set(target, ((HibernateMoveableListWrapper)value).getDelegate(), factory);
+      return;
+    }
+
+    if (!(value instanceof PersistentCollection))
+    {
+      throw new IllegalArgumentException("Value is not a PersistentCollection but a " + value.getClass().getName()); //$NON-NLS-1$
+    }
+
+    if (!(value instanceof List<?>))
+    {
+      throw new IllegalArgumentException("Value is not a list but a " + value.getClass().getName()); //$NON-NLS-1$
+    }
+
+    // Only set it in the listholder
+    PersistableListHolder.getInstance().putListMapping(target, getEStructuralFeature(), (PersistentCollection)value);
+
+    // check if deep inside the persistentlist there is not already a delegate which is a hibernatemoveable list
+    // which contains the list which should really be set in the cdorevision
+    // persistentlist, hibernatemoveablelistwrapper, real list, if so then the real list should be set
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    final Object currentValue = revision.getValue(getEStructuralFeature());
+    if (currentValue == null || !(currentValue instanceof List<?>))
+    {
+      @SuppressWarnings("unchecked")
+      List<Object> valueList = (List<Object>)value;
+
+      final WrappedHibernateList whl = new WrappedHibernateList(revision, getEStructuralFeature());
+      whl.setDelegate(valueList);
+      super.set(target, whl, factory);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
new file mode 100644
index 0000000..fc533fb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2008-2013, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.hibernate.type.CollectionType;
+
+/**
+ * @author Martin Taal
+ */
+// Howto handle hibernate lists:
+// - a new owner: the owner is persisted and its lists are replaced with hibernate
+// persistentlist, the hibernate persitentlist will have a delegate (internally) which is the list which was previously
+// present in the owner.
+// - an existing owner: the owner is read from the db and hibernate will set a persistentlist
+// directly
+//
+// The solution also needs to handle the following:
+// - cdo does not have direct java references but stores cdoids in the list while hibernate expects real java object
+// references.
+// - cdo uses a moveablearraylist and not the standard arraylist
+//
+// The solution:
+// - never return null when hibernate asks for the current value of the manyreference, always
+// return a MoveableArrayList so that hibernate uses that as the delegate, set the MoveableArrayList
+public class CDOManyReferenceGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOManyReferenceGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    // Check if there is already a persistentcollection
+    PersistentCollection collection = PersistableListHolder.getInstance().getListMapping(target, getEStructuralFeature());
+    if (collection != null)
+    {
+      return collection;
+    }
+
+    InternalCDORevision revision = (InternalCDORevision)target;
+    CDOList list = revision.getOrCreateList(getEStructuralFeature(), 10);
+
+    if (list instanceof WrappedHibernateList)
+    {
+      final WrappedHibernateList wrappedHibernateList = (WrappedHibernateList)list;
+      if (wrappedHibernateList.isUninitializedCollection())
+      {
+        return CollectionType.UNFETCHED_COLLECTION;
+      }
+      final Object delegate = wrappedHibernateList.getDelegate();
+      if (delegate instanceof PersistentCollection)
+      {
+        return delegate;
+      }
+    }
+
+    // Wrap the moveablearraylist
+    HibernateMoveableListWrapper wrapper = new HibernateMoveableListWrapper();
+    wrapper.setEFeature(getEStructuralFeature());
+    wrapper.setDelegate(list);
+
+    // And return it
+    return wrapper;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
new file mode 100644
index 0000000..25d7aa7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceSetter.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2008-2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+import java.util.List;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOManyReferenceSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOManyReferenceSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    // Do some checking
+    if (value instanceof HibernateMoveableListWrapper)
+    {
+      super.set(target, ((HibernateMoveableListWrapper)value).getDelegate(), factory);
+      return;
+    }
+
+    if (!(value instanceof PersistentCollection))
+    {
+      throw new IllegalArgumentException("Value is not a PersistentCollection but a " + value.getClass().getName()); //$NON-NLS-1$
+    }
+
+    if (!(value instanceof List<?>))
+    {
+      throw new IllegalArgumentException("Value is not a list but a " + value.getClass().getName()); //$NON-NLS-1$
+    }
+
+    // Only set it in the listholder
+    PersistableListHolder.getInstance().putListMapping(target, getEStructuralFeature(), (PersistentCollection)value);
+
+    // check if deep inside the persistentlist there is not already a delegate which is a hibernatemoveable list
+    // which contains the list which should really be set in the cdorevision
+    // persistentlist, hibernatemoveablelistwrapper, real list, if so then the real list should be set
+    final InternalCDORevision revision = (InternalCDORevision)target;
+    final Object currentValue = revision.getValue(getEStructuralFeature());
+    if (currentValue == null)
+    {
+      @SuppressWarnings("unchecked")
+      List<Object> valueList = (List<Object>)value;
+
+      final WrappedHibernateList whl = new WrappedHibernateList(revision, getEStructuralFeature());
+      whl.setDelegate(valueList);
+      super.set(target, whl, factory);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.java
new file mode 100644
index 0000000..cc000c0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOMergeEventListener.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2011, 2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.event.internal.DefaultMergeEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+import java.util.Map;
+
+/**
+ * The CDOMergeEventListener prevents copying of values of an existing entity to itself.
+ */
+public class CDOMergeEventListener extends DefaultMergeEventListener
+{
+  private static final long serialVersionUID = 1L;
+
+  @SuppressWarnings("rawtypes")
+  @Override
+  protected void copyValues(final EntityPersister persister, final Object entity, final Object target, final SessionImplementor source, final Map copyCache)
+  {
+    if (entity != target)
+    {
+      super.copyValues(persister, entity, target, source, copyCache);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java
new file mode 100644
index 0000000..898f527
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyGetter.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2008-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor.CDORevisionSetter;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * TODO How does this differ from {@link CDORevisionSetter}? Both needed?
+ *
+ * @author Martin Taal
+ */
+public class CDOPropertyGetter extends CDOPropertyHandler implements Getter
+{
+  private static final long serialVersionUID = 1L;
+
+  private final boolean isEEnum;
+
+  private final EEnum eEnum;
+
+  private boolean handleUnsetAsNull = false;
+
+  public CDOPropertyGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+    if (getEStructuralFeature() != null)
+    {
+      isEEnum = getEStructuralFeature().getEType() instanceof EEnum;
+      if (isEEnum)
+      {
+        eEnum = (EEnum)getEStructuralFeature().getEType();
+      }
+      else
+      {
+        eEnum = null;
+      }
+    }
+    else
+    {
+      isEEnum = false;
+      eEnum = null;
+    }
+  }
+
+  public Object get(Object target) throws HibernateException
+  {
+    InternalCDORevision revision = (InternalCDORevision)target;
+    Object value = revision.getValue(getEStructuralFeature());
+    if (value == CDORevisionData.NIL)
+    {
+      // explicitly set to null
+      return null;
+    }
+
+    final EStructuralFeature eFeature = getEStructuralFeature();
+    if (value == null)
+    {
+      if (eFeature.getDefaultValue() == null)
+      {
+        return null;
+      }
+
+      // this happens when you don't set a value explicitly in CDO
+      // then null is passed while the user may expect the default
+      // value to be set.
+      if (useDefaultValue())
+      {
+        value = eFeature.getDefaultValue();
+      }
+    }
+
+    // hibernate sees eenums, CDO sees int
+    if (isEEnum && value != null)
+    {
+      if (value instanceof Enumerator)
+      {
+        return value;
+      }
+
+      return eEnum.getEEnumLiteral((Integer)value);
+    }
+
+    return value;
+  }
+
+  // see CDOPropertyGetter#useDefaultValue
+  private boolean useDefaultValue()
+  {
+    final EStructuralFeature eFeature = getEStructuralFeature();
+    return eFeature.isRequired() || !handleUnsetAsNull && eFeature.isUnsettable();
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object target, Map mergeMap, SessionImplementor session) throws HibernateException
+  {
+    return get(target);
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  public Member getMember()
+  {
+    return null;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getReturnType()
+  {
+    return Object.class;
+  }
+
+  @Override
+  public void setPersistenceOptions(PersistenceOptions persistenceOptions)
+  {
+    super.setPersistenceOptions(persistenceOptions);
+    handleUnsetAsNull = persistenceOptions.getHandleUnsetAsNull();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.java
new file mode 100644
index 0000000..9f88a81
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertyHandler.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+/**
+ * @author Martin Taal
+ */
+public abstract class CDOPropertyHandler
+{
+  private final ContextTracer tracer = new ContextTracer(OM.DEBUG, this.getClass());
+
+  private CDORevisionTuplizer tuplizer;
+
+  private EStructuralFeature feature;
+
+  private boolean virtualProperty;
+
+  private PersistenceOptions persistenceOptions;
+
+  public CDOPropertyHandler(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    this.tuplizer = tuplizer;
+    feature = tuplizer.getEClass().getEStructuralFeature(propertyName);
+    if (getTracer().isEnabled())
+    {
+      getTracer().trace("Created " + this.getClass().getName() + " for eClass/feature: " + tuplizer.getEClass().getName() + "." //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+          + propertyName);
+    }
+
+    if (feature == null)
+    {
+      if (isVirtualPropertyAllowed())
+      {
+        virtualProperty = true;
+        if (getTracer().isEnabled())
+        {
+          getTracer().trace("This is a virtual property"); //$NON-NLS-1$
+        }
+      }
+      else
+      {
+        throw new IllegalStateException("Feature not found: " + propertyName); //$NON-NLS-1$
+      }
+    }
+  }
+
+  protected ContextTracer getTracer()
+  {
+    return tracer;
+  }
+
+  public CDORevisionTuplizer getTuplizer()
+  {
+    return tuplizer;
+  }
+
+  public EStructuralFeature getEStructuralFeature()
+  {
+    return feature;
+  }
+
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return false;
+  }
+
+  /**
+   * @return the virtualProperty
+   */
+  public boolean isVirtualProperty()
+  {
+    return virtualProperty;
+  }
+
+  public PersistenceOptions getPersistenceOptions()
+  {
+    return persistenceOptions;
+  }
+
+  public void setPersistenceOptions(PersistenceOptions persistenceOptions)
+  {
+    this.persistenceOptions = persistenceOptions;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java
new file mode 100644
index 0000000..d68c23b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOPropertySetter.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2008-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDORevisionPropertyAccessor.CDORevisionSetter;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Method;
+
+/**
+ * TODO How does this differ from {@link CDORevisionSetter}? Both needed?
+ *
+ * @author Martin Taal
+ */
+public class CDOPropertySetter extends CDOPropertyHandler implements Setter
+{
+  private static final long serialVersionUID = 1L;
+
+  private final boolean convertByteArray;
+
+  private boolean handleUnsetAsNull = false;
+
+  public CDOPropertySetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+
+    // handle a special case CDO/EMF expect a byte[] but Hibernate
+    // will return a Byte[]
+    final EStructuralFeature eFeature = getEStructuralFeature();
+    if (eFeature instanceof EAttribute)
+    {
+      final EAttribute eAttribute = (EAttribute)eFeature;
+      if (eAttribute.getEAttributeType().getInstanceClass() != null && byte[].class.isAssignableFrom(eAttribute.getEAttributeType().getInstanceClass()))
+      {
+        convertByteArray = true;
+      }
+      else
+      {
+        convertByteArray = false;
+      }
+    }
+    else
+    {
+      convertByteArray = false;
+    }
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    InternalCDORevision revision = (InternalCDORevision)target;
+
+    final EStructuralFeature eFeature = getEStructuralFeature();
+    final Object defaultValue = eFeature.getDefaultValue();
+
+    // handle a special case: the byte array.
+    // hibernate will pass a Byte[] while CDO wants a byte[] (object vs. primitive array)
+    final Object newValue;
+    if (value instanceof Byte[] && convertByteArray)
+    {
+      final Byte[] objectArray = (Byte[])value;
+      final byte[] newByteValue = new byte[objectArray.length];
+      int i = 0;
+      for (byte b : objectArray)
+      {
+        newByteValue[i++] = b;
+      }
+      newValue = newByteValue;
+    }
+    else
+    {
+      // hibernate sees enums, cdo sees int's
+      if (value instanceof Enumerator)
+      {
+        newValue = ((Enumerator)value).getValue();
+      }
+      else if (value instanceof EEnumLiteral)
+      {
+        newValue = ((EEnumLiteral)value).getValue();
+      }
+      else if (value == null)
+      {
+        if (defaultValue == null)
+        {
+          newValue = null;
+        }
+        else if (!handleUnsetAsNull && eFeature.isUnsettable())
+        {
+          // there was a default value so was explicitly set to null
+          // otherwise the default value would be in the db
+          newValue = CDORevisionData.NIL;
+        }
+        else
+        {
+          newValue = null;
+        }
+      }
+      else
+      {
+        newValue = value;
+      }
+    }
+    final Object currentValue = revision.getValue(eFeature);
+    // do a simpler change check for ismany
+    if (eFeature.isMany())
+    {
+      if (currentValue != newValue)
+      {
+        revision.setValue(eFeature, newValue);
+      }
+    }
+    else
+    {
+      boolean overwriteNilOrNull = currentValue == CDORevisionData.NIL && newValue == null
+          || currentValue == null && newValue != null && newValue.equals(defaultValue);
+      if (!revision.isFrozen() && !overwriteNilOrNull)
+      {
+        revision.setValue(getEStructuralFeature(), newValue);
+      }
+    }
+  }
+
+  @Override
+  public void setPersistenceOptions(PersistenceOptions persistenceOptions)
+  {
+    super.setPersistenceOptions(persistenceOptions);
+    handleUnsetAsNull = persistenceOptions.getHandleUnsetAsNull();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java
new file mode 100644
index 0000000..53f262e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceGetter.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOReferenceGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOReferenceGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    final Object o = super.get(target);
+    if (o instanceof CDOID && CDOIDUtil.isNull((CDOID)o))
+    {
+      return null;
+    }
+    else if (o instanceof CDOIDExternal)
+    {
+      return o;
+    }
+    else if (o instanceof CDOID)
+    {
+      return HibernateUtil.getInstance().getCDORevision((CDOID)o);
+    }
+
+    return o;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java
new file mode 100644
index 0000000..1e14f91
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOReferenceSetter.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOReferenceSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOReferenceSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    if (value == null)
+    {
+      super.set(target, null, factory);
+    }
+    else if (value instanceof CDOIDExternal)
+    {
+      super.set(target, value, factory);
+    }
+    else
+    {
+      super.set(target, HibernateUtil.getInstance().getCDOID(value), factory);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java
new file mode 100644
index 0000000..603fe95
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDGetter.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOResourceIDGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOResourceIDGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    if (target instanceof CDOID)
+    {
+      return target;
+    }
+    return ((InternalCDORevision)target).getResourceID();
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java
new file mode 100644
index 0000000..146358e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOResourceIDSetter.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOResourceIDSetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOResourceIDSetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    InternalCDORevision revision = (InternalCDORevision)target;
+    revision.setResourceID((CDOID)value);
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java
new file mode 100644
index 0000000..70b8822
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionInstantiator.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.tuple.Instantiator;
+
+import java.io.Serializable;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionInstantiator implements Instantiator
+{
+  private static final long serialVersionUID = 1L;
+
+  private final EClass eClass;
+
+  private final CDOClassifierRef classifierRef;
+
+  public CDORevisionInstantiator(CDORevisionTuplizer tuplizer, PersistentClass mappingInfo)
+  {
+    eClass = tuplizer.getEClass();
+    classifierRef = new CDOClassifierRef(eClass);
+  }
+
+  public Object instantiate()
+  {
+    // TODO CDO can't create a revision w/o CDOID
+    return instantiate(null);
+  }
+
+  public Object instantiate(Serializable key)
+  {
+    final HibernateStoreAccessor storeAccessor = HibernateThreadContext.getCurrentStoreAccessor();
+    HibernateStore store = storeAccessor.getStore();
+    final CDOID id = HibernateUtil.getInstance().createCDOID(classifierRef, key);
+    final InternalCDORevision revision = store.createRevision(eClass, id);
+    revision.setBranchPoint(storeAccessor.getStore().getMainBranchHead());
+    return revision;
+  }
+
+  public boolean isInstance(Object object)
+  {
+    return object instanceof InternalCDORevision;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java
new file mode 100644
index 0000000..510123c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionLazyInitializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.proxy.AbstractLazyInitializer;
+
+import java.io.Serializable;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionLazyInitializer extends AbstractLazyInitializer implements Serializable
+{
+  private static final long serialVersionUID = 1L;
+
+  CDORevisionLazyInitializer(String entityName, Serializable id, SessionImplementor session)
+  {
+    super(entityName, id, session);
+  }
+
+  public InternalCDORevision getRevision()
+  {
+    return (InternalCDORevision)getImplementation();
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getPersistentClass()
+  {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java
new file mode 100644
index 0000000..f86180e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2008-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.HibernateException;
+import org.hibernate.PropertyNotFoundException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionPropertyAccessor implements PropertyAccessor
+{
+  private CDORevisionTuplizer tuplizer;
+
+  public CDORevisionPropertyAccessor(CDORevisionTuplizer tuplizer)
+  {
+    this.tuplizer = tuplizer;
+  }
+
+  public CDORevisionTuplizer getTuplizer()
+  {
+    return tuplizer;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return new CDORevisionGetter(this, propertyName);
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return new CDORevisionSetter(this, propertyName);
+  }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static class BaseAccessor
+  {
+    private CDORevisionPropertyAccessor propertyAccessor;
+
+    private EStructuralFeature feature;
+
+    public BaseAccessor(CDORevisionPropertyAccessor propertyAccessor, String propertyName)
+    {
+      this.propertyAccessor = propertyAccessor;
+      feature = propertyAccessor.getTuplizer().getEClass().getEStructuralFeature(propertyName);
+      if (feature == null)
+      {
+        throw new IllegalStateException("Feature not found: " + propertyName); //$NON-NLS-1$
+      }
+    }
+
+    public CDORevisionPropertyAccessor getPropertyAccessor()
+    {
+      return propertyAccessor;
+    }
+
+    public EStructuralFeature getEStructuralFeature()
+    {
+      return feature;
+    }
+  }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static class CDORevisionGetter extends BaseAccessor implements Getter
+  {
+    private static final long serialVersionUID = 1L;
+
+    public CDORevisionGetter(CDORevisionPropertyAccessor propertyAccessor, String propertyName)
+    {
+      super(propertyAccessor, propertyName);
+    }
+
+    public Object get(Object target) throws HibernateException
+    {
+      InternalCDORevision revision = (InternalCDORevision)target;
+      return revision.getValue(getEStructuralFeature());
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Object getForInsert(Object target, Map mergeMap, SessionImplementor session) throws HibernateException
+    {
+      return get(target);
+    }
+
+    public Method getMethod()
+    {
+      return null;
+    }
+
+    public String getMethodName()
+    {
+      return null;
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Class getReturnType()
+    {
+      return Object.class;
+    }
+
+    public Member getMember()
+    {
+      return null;
+    }
+  }
+
+  /**
+   * @author Eike Stepper
+   */
+  public static class CDORevisionSetter extends BaseAccessor implements Setter
+  {
+    private static final long serialVersionUID = 1L;
+
+    public CDORevisionSetter(CDORevisionPropertyAccessor propertyAccessor, String propertyName)
+    {
+      super(propertyAccessor, propertyName);
+    }
+
+    public Method getMethod()
+    {
+      return null;
+    }
+
+    public String getMethodName()
+    {
+      return null;
+    }
+
+    public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+    {
+      InternalCDORevision revision = (InternalCDORevision)target;
+      revision.setValue(getEStructuralFeature(), value);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java
new file mode 100644
index 0000000..200149e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyFactory.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2008-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.type.CompositeType;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionProxyFactory implements ProxyFactory
+{
+  private String entityName;
+
+  public CDORevisionProxyFactory()
+  {
+  }
+
+  @SuppressWarnings("rawtypes")
+  public void postInstantiate(String entityName, Class persistentClass, Set interfaces, Method getIdentifierMethod, Method setIdentifierMethod,
+      CompositeType componentIdType) throws HibernateException
+  {
+    this.entityName = entityName;
+  }
+
+  public HibernateProxy getProxy(Serializable id, SessionImplementor session) throws HibernateException
+  {
+    return new CDORevisionProxyHibernate(new CDORevisionLazyInitializer(entityName, id, session));
+  }
+
+  public String getEntityName()
+  {
+    return entityName;
+  }
+
+  public void setEntityName(String entityName)
+  {
+    this.entityName = entityName;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.java
new file mode 100644
index 0000000..084887d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionProxyHibernate.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.DelegatingCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.proxy.LazyInitializer;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionProxyHibernate extends DelegatingCDORevision implements HibernateProxy
+{
+  private static final long serialVersionUID = 1L;
+
+  private CDORevisionLazyInitializer li;
+
+  CDORevisionProxyHibernate(CDORevisionLazyInitializer li)
+  {
+    this.li = li;
+  }
+
+  @Override
+  public InternalCDORevision copy()
+  {
+    return new CDORevisionProxyHibernate(li);
+  }
+
+  @Override
+  public InternalCDORevision getDelegate()
+  {
+    return li.getRevision();
+  }
+
+  public LazyInitializer getHibernateLazyInitializer()
+  {
+    return li;
+  }
+
+  public Object writeReplace()
+  {
+    return this;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
new file mode 100644
index 0000000..1b8fb12
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionTuplizer.java
@@ -0,0 +1,412 @@
+/*
+ * Copyright (c) 2008-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - changed handling of propertygetters/setters
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateConstants;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+import org.hibernate.EntityMode;
+import org.hibernate.EntityNameResolver;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.metamodel.binding.AttributeBinding;
+import org.hibernate.metamodel.binding.EntityBinding;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.tuple.entity.AbstractEntityTuplizer;
+import org.hibernate.tuple.entity.EntityMetamodel;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDORevisionTuplizer extends AbstractEntityTuplizer
+{
+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, CDORevisionTuplizer.class);
+
+  private static final String EPACKAGE_META = "epackage"; //$NON-NLS-1$
+
+  private static final String ECLASSNAME_META = "eclassName"; //$NON-NLS-1$
+
+  private EClass eClass;
+
+  public CDORevisionTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappingInfo)
+  {
+    super(entityMetamodel, mappingInfo);
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Created CDORevisionTuplizer for entity " + mappingInfo.getEntityName()); //$NON-NLS-1$
+    }
+
+    initEClass(mappingInfo);
+  }
+
+  private void initEClass(PersistentClass mappingInfo)
+  {
+    if (eClass != null)
+    {
+      return;
+    }
+
+    HibernateStore hbStore = HibernateStore.getCurrentHibernateStore();
+
+    // find the EClass/Package
+    String entityName = mappingInfo.getEntityName();
+    String ePackageURI = mappingInfo.getMetaAttribute(EPACKAGE_META).getValue();
+    String eClassName = mappingInfo.getMetaAttribute(ECLASSNAME_META).getValue();
+
+    if (ePackageURI == null || eClassName == null)
+    {
+      throw new IllegalArgumentException("The mapping for the persistentclass " + mappingInfo.getEntityName() //$NON-NLS-1$
+          + " is incorrect, there should be meta data tags for both epackage and " //$NON-NLS-1$
+          + "eclassname, one or both are missing."); //$NON-NLS-1$
+    }
+
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("EntityName/eclassname/packageURI " + entityName + "/" + eClassName + "/" + ePackageURI); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    }
+
+    for (EPackage ePackage : hbStore.getPackageHandler().getEPackages())
+    {
+      if (ePackage.getNsURI().compareTo(ePackageURI) != 0)
+      {
+        continue;
+      }
+
+      for (EClass localCdoClass : EMFUtil.getPersistentClasses(ePackage))
+      {
+        if (localCdoClass.getName().compareTo(eClassName) == 0)
+        {
+          eClass = localCdoClass;
+          break;
+        }
+      }
+    }
+
+    if (eClass == null && ePackageURI.compareTo(EresourcePackage.eINSTANCE.getNsURI()) == 0)
+    {
+      for (EClass localCdoClass : EMFUtil.getPersistentClasses(EresourcePackage.eINSTANCE))
+      {
+        if (localCdoClass.getName().compareTo(eClassName) == 0)
+        {
+          eClass = localCdoClass;
+          if (TRACER.isEnabled())
+          {
+            TRACER.trace("Class is CDOResource class"); //$NON-NLS-1$
+          }
+
+          break;
+        }
+      }
+    }
+
+    // add the entityName <--> EClass mapping
+    HibernateStore.getCurrentHibernateStore().addEntityNameEClassMapping(entityName, eClass);
+
+    if (eClass == null)
+    {
+      throw new IllegalArgumentException("The mapped class " + mappingInfo.getEntityName() //$NON-NLS-1$
+          + " does not have a eClass equivalent"); //$NON-NLS-1$
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.hibernate.tuple.entity.EntityTuplizer#determineConcreteSubclassEntityName(java.lang.Object,
+   * org.hibernate.engine.SessionFactoryImplementor)
+   */
+  public String determineConcreteSubclassEntityName(Object entityInstance, SessionFactoryImplementor factory)
+  {
+    final Class<?> concreteEntityClass = entityInstance.getClass();
+    if (concreteEntityClass == getMappedClass())
+    {
+      return getEntityName();
+    }
+
+    String entityName = getEntityMetamodel().findEntityNameByEntityClass(concreteEntityClass);
+    if (entityName == null)
+    {
+      throw new HibernateException("Unable to resolve entity name from Class [" + concreteEntityClass.getName() + "]" //$NON-NLS-1$ //$NON-NLS-2$
+          + " expected instance/subclass of [" + getEntityName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    return entityName;
+  }
+
+  public EntityMode getEntityMode()
+  {
+    return EntityMode.MAP;
+  }
+
+  public EntityNameResolver[] getEntityNameResolvers()
+  {
+    return new EntityNameResolver[0];
+    // return new EntityNameResolver[] { new CDOEntityNameResolver() };
+  }
+
+  // private class CDOEntityNameResolver implements EntityNameResolver
+  // {
+  // public String resolveEntityName(Object object)
+  // {
+  // return getEntityName();
+  // }
+  // }
+
+  public EClass getEClass()
+  {
+    return eClass;
+  }
+
+  @Override
+  protected Getter buildPropertyGetter(Property mappedProperty, PersistentClass mappedEntity)
+  {
+    initEClass(mappedEntity);
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Building property getter for " + eClass.getName() + "." + mappedProperty.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    if (mappedProperty.isBackRef())
+    {
+      return mappedProperty.getGetter(mappedEntity.getMappedClass());
+    }
+    final CDOPropertyGetter getter;
+    if (mappedProperty == mappedEntity.getIdentifierProperty())
+    {
+      getter = new CDOIDPropertyGetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getMetaAttribute("version") != null)
+    {
+      getter = new CDOVersionPropertyGetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.RESOURCE_PROPERTY) == 0)
+    {
+      getter = new CDOResourceIDGetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.CONTAINER_PROPERTY) == 0)
+    {
+      getter = new CDOContainerGetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY) == 0)
+    {
+      getter = new CDOBranchTimeStampGetter(this, mappedProperty.getName());
+    }
+    else
+    {
+      EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
+      if (feature instanceof EReference && feature.isMany() && HibernateUtil.getInstance().isCDOResourceContents(feature))
+      {
+        getter = new CDOManyAttributeGetter(this, mappedProperty.getName());
+      }
+      else if (feature instanceof EReference && feature.isMany())
+      {
+        getter = new CDOManyReferenceGetter(this, mappedProperty.getName());
+      }
+      else if (feature instanceof EReference)
+      {
+        getter = new CDOReferenceGetter(this, mappedProperty.getName());
+      }
+      else if (feature instanceof EAttribute && feature.isMany())
+      {
+        getter = new CDOManyAttributeGetter(this, mappedProperty.getName());
+      }
+      else
+      {
+        getter = new CDOPropertyGetter(this, mappedProperty.getName());
+      }
+    }
+
+    HibernateStore hbStore = HibernateStore.getCurrentHibernateStore();
+    getter.setPersistenceOptions(hbStore.getCDODataStore().getPersistenceOptions());
+    return getter;
+  }
+
+  @Override
+  protected Setter buildPropertySetter(Property mappedProperty, PersistentClass mappedEntity)
+  {
+    initEClass(mappedEntity);
+    if (TRACER.isEnabled())
+    {
+      TRACER.trace("Building property setter for " + eClass.getName() + "." + mappedProperty.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    if (mappedProperty.isBackRef())
+    {
+      return mappedProperty.getSetter(mappedEntity.getMappedClass());
+    }
+
+    final CDOPropertySetter setter;
+    if (mappedProperty == mappedEntity.getIdentifierProperty())
+    {
+      setIdentifierTypeAsAnnotation(mappedProperty);
+      setter = new CDOIDPropertySetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getMetaAttribute("version") != null)
+    {
+      setter = new CDOVersionPropertySetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.RESOURCE_PROPERTY) == 0)
+    {
+      setter = new CDOResourceIDSetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.CONTAINER_PROPERTY) == 0)
+    {
+      setter = new CDOContainerSetter(this, mappedProperty.getName());
+    }
+    else if (mappedProperty.getName().compareTo(CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY) == 0)
+    {
+      setter = new CDOBranchTimeStampSetter(this, mappedProperty.getName());
+    }
+    else
+    {
+      EStructuralFeature feature = getEClass().getEStructuralFeature(mappedProperty.getName());
+      if (feature instanceof EReference && feature.isMany() && HibernateUtil.getInstance().isCDOResourceContents(feature))
+      {
+        setter = new CDOManyAttributeSetter(this, mappedProperty.getName());
+      }
+      else if (feature instanceof EReference && feature.isMany())
+      {
+        setter = new CDOManyReferenceSetter(this, mappedProperty.getName());
+      }
+      else if (feature instanceof EAttribute && feature.isMany())
+      {
+        setter = new CDOManyAttributeSetter(this, mappedProperty.getName());
+      }
+      else
+
+      if (feature instanceof EReference)
+      {
+        setter = new CDOReferenceSetter(this, mappedProperty.getName());
+      }
+      else
+      {
+        setter = new CDOPropertySetter(this, mappedProperty.getName());
+      }
+    }
+
+    HibernateStore hbStore = HibernateStore.getCurrentHibernateStore();
+    setter.setPersistenceOptions(hbStore.getCDODataStore().getPersistenceOptions());
+    return setter;
+  }
+
+  @Override
+  protected Instantiator buildInstantiator(PersistentClass mappingInfo)
+  {
+    return new CDORevisionInstantiator(this, mappingInfo);
+  }
+
+  @Override
+  protected ProxyFactory buildProxyFactory(PersistentClass mappingInfo, Getter idGetter, Setter idSetter)
+  {
+    CDORevisionProxyFactory pf = new CDORevisionProxyFactory();
+    pf.setEntityName(getEntityName());
+
+    try
+    {
+      pf.postInstantiate(getEntityName(), null, null, null, null, null);
+    }
+    catch (HibernateException ex)
+    {
+      OM.LOG.error("Could not create proxy factory for " + getEntityName(), ex); //$NON-NLS-1$
+      pf = null;
+    }
+
+    return pf;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getMappedClass()
+  {
+    return InternalCDORevision.class;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getConcreteProxyClass()
+  {
+    return InternalCDORevision.class;
+  }
+
+  public boolean isInstrumented()
+  {
+    return false;
+  }
+
+  private void setIdentifierTypeAsAnnotation(Property prop)
+  {
+    EAnnotation eAnnotation = getEClass().getEAnnotation(HibernateStore.ID_TYPE_EANNOTATION_SOURCE);
+    if (eAnnotation == null)
+    {
+      eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+      eAnnotation.setSource(HibernateStore.ID_TYPE_EANNOTATION_SOURCE);
+      eAnnotation.getDetails().put(HibernateStore.ID_TYPE_EANNOTATION_KEY, prop.getType().getName());
+      getEClass().getEAnnotations().add(eAnnotation);
+    }
+    else if (!eAnnotation.getDetails().containsKey(HibernateStore.ID_TYPE_EANNOTATION_KEY))
+    {
+      eAnnotation.getDetails().put(HibernateStore.ID_TYPE_EANNOTATION_KEY, prop.getType().getName());
+    }
+  }
+
+  @Override
+  protected Instantiator buildInstantiator(EntityBinding arg0)
+  {
+    return null;
+  }
+
+  @Override
+  protected Getter buildPropertyGetter(AttributeBinding arg0)
+  {
+    return null;
+  }
+
+  @Override
+  protected Setter buildPropertySetter(AttributeBinding arg0)
+  {
+    return null;
+  }
+
+  @Override
+  protected ProxyFactory buildProxyFactory(EntityBinding arg0, Getter arg1, Setter arg2)
+  {
+    return null;
+  }
+
+  @Override
+  public Object getVersion(Object entity) throws HibernateException
+  {
+    if (entity instanceof CDORevision)
+    {
+      return ((CDORevision)entity).getVersion();
+    }
+    return super.getVersion(entity);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java
new file mode 100644
index 0000000..a4f4d83
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticIdPropertyHandler.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2008-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDTemp;
+import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.PropertyNotFoundException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+
+import java.io.Serializable;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Is only used for synthetic id's.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class CDOSyntheticIdPropertyHandler implements Getter, Setter, PropertyAccessor
+{
+  private static final long serialVersionUID = 1L;
+
+  @SuppressWarnings("rawtypes")
+  public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  public Member getMember()
+  {
+    return null;
+  }
+
+  public Object get(Object owner) throws HibernateException
+  {
+    InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(owner);
+    if (revision == null)
+    {
+      return null;
+    }
+
+    if (!HibernateUtil.getInstance().isStoreCreatedID(HibernateUtil.getInstance().getCDOID(revision)))
+    {
+      return null;
+    }
+
+    return HibernateUtil.getInstance().getIdValue(HibernateUtil.getInstance().getCDOID(revision));
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object arg0, Map arg1, SessionImplementor arg2) throws HibernateException
+  {
+    return get(arg0);
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getReturnType()
+  {
+    return null;
+  }
+
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    if (value == null)
+    {
+      return;
+    }
+
+    final InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(target);
+    final CDOID id = HibernateUtil.getInstance().getCDOID(revision);
+    if (id == null || id instanceof CDOIDTemp)
+    {
+      final CDOID newCDOID = HibernateUtil.getInstance().createCDOID(new CDOClassifierRef(revision.getEClass()), value);
+      revision.setID(newCDOID);
+      if (HibernateThreadContext.isCommitContextSet())
+      {
+        final HibernateCommitContext commitContext = HibernateThreadContext.getCommitContext();
+        commitContext.setNewID(id, newCDOID);
+        if (id instanceof CDOIDTemp)
+        {
+          commitContext.getCommitContext().addIDMapping(id, newCDOID);
+        }
+      }
+    }
+    else
+    {
+      final Serializable idValue = HibernateUtil.getInstance().getIdValue(id);
+      if (!idValue.equals(value))
+      {
+        throw new IllegalStateException("Current id and new id are different " + value + "/" + idValue); //$NON-NLS-1$ //$NON-NLS-2$
+      }
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java
new file mode 100644
index 0000000..fc9737b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOSyntheticVersionPropertyHandler.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.PropertyNotFoundException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Reads the version from the internal version cache.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class CDOSyntheticVersionPropertyHandler implements Getter, Setter, PropertyAccessor
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOSyntheticVersionPropertyHandler()
+  {
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  public Object get(Object owner) throws HibernateException
+  {
+    InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(owner);
+    if (revision == null)
+    {
+      return null;
+    }
+
+    return revision.getVersion();
+  }
+
+  /**
+   * Reads the version from the versioncache
+   */
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object owner, Map mergeMap, SessionImplementor session) throws HibernateException
+  {
+    return get(owner);
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public Member getMember()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  /** Returns Integer.class */
+  @SuppressWarnings("rawtypes")
+  public Class getReturnType()
+  {
+    return Integer.class;
+  }
+
+  /** Sets the version in the internal version cache */
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    InternalCDORevision revision = HibernateUtil.getInstance().getCDORevision(target);
+    revision.setVersion(((Number)value).intValue());
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java
new file mode 100644
index 0000000..5006634
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOTypeUserType.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.CDOType;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.type.StandardBasicTypes;
+import org.hibernate.usertype.UserType;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOTypeUserType implements UserType
+{
+  private static final int[] SQL_TYPES = { Types.INTEGER };
+
+  public CDOTypeUserType()
+  {
+  }
+
+  public int[] sqlTypes()
+  {
+    return SQL_TYPES;
+  }
+
+  public Class<?> returnedClass()
+  {
+    return CDOType.class;
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  public Object deepCopy(Object value)
+  {
+    return value;
+  }
+
+  public boolean equals(Object x, Object y)
+  {
+    if (x == y)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) throws SQLException
+  {
+    Integer value = StandardBasicTypes.INTEGER.nullSafeGet(rs, names[0], sessionImplementor);
+    if (rs.wasNull())
+    {
+      return null;
+    }
+
+    if (value == null)
+    {
+      return null;
+    }
+
+    return CDOModelUtil.getType((byte)(int)value);
+  }
+
+  public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor sessionImplementor) throws SQLException
+  {
+    if (value != null)
+    {
+      statement.setInt(index, ((CDOType)value).getTypeID());
+    }
+    else
+    {
+      statement.setNull(index, Types.INTEGER);
+    }
+  }
+
+  public Serializable disassemble(Object value)
+  {
+    return (Serializable)value;
+  }
+
+  public Object assemble(Serializable cachedValue, Object owner)
+  {
+    return cachedValue;
+  }
+
+  public Object replace(Object original, Object target, Object owner)
+  {
+    return original;
+  }
+
+  public int hashCode(Object x)
+  {
+    return x.hashCode();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java
new file mode 100644
index 0000000..01f32ab
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOUUIDHexGenerator.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.id.UUIDHexGenerator;
+import org.hibernate.persister.entity.EntityPersister;
+
+import java.io.Serializable;
+
+/**
+ * An example of overriding the standard UUID generator of Hibernate to prevent it overwriting an already existing id in
+ * an object.
+ *
+ * @author mtaal
+ */
+
+public class CDOUUIDHexGenerator extends UUIDHexGenerator
+{
+  @Override
+  public Serializable generate(SessionImplementor session, Object obj)
+  {
+    if (!(obj instanceof CDORevision))
+    {
+      return super.generate(session, obj);
+    }
+
+    final EntityPersister entityPersister = session.getEntityPersister(null, obj);
+    final Serializable id = entityPersister.getIdentifier(obj, session);
+    if (id != null)
+    {
+      return id;
+    }
+
+    return super.generate(session, obj);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java
new file mode 100644
index 0000000..f54b8ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertyGetter.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOVersionPropertyGetter extends CDOPropertyGetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOVersionPropertyGetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public Object get(Object target) throws HibernateException
+  {
+    InternalCDORevision revision = (InternalCDORevision)target;
+    if (isVirtualProperty())
+    {
+      return revision.getVersion();
+    }
+
+    Object version = super.get(target);
+    // TODO: does this make sense?
+    // revision.setVersion(((Number)value).intValue());
+    return version;
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java
new file mode 100644
index 0000000..e3415f4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOVersionPropertySetter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+/**
+ * @author Martin Taal
+ */
+public class CDOVersionPropertySetter extends CDOPropertySetter
+{
+  private static final long serialVersionUID = 1L;
+
+  public CDOVersionPropertySetter(CDORevisionTuplizer tuplizer, String propertyName)
+  {
+    super(tuplizer, propertyName);
+  }
+
+  @Override
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    InternalCDORevision revision = (InternalCDORevision)target;
+    revision.setVersion(((Number)value).intValue());
+    if (!isVirtualProperty())
+    {
+      super.set(target, value, factory);
+    }
+  }
+
+  @Override
+  protected boolean isVirtualPropertyAllowed()
+  {
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java
new file mode 100644
index 0000000..d07b702
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryFeatureURIPropertyHandler.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2009-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateCommitContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.HibernateException;
+import org.hibernate.PropertyNotFoundException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Handles the string representation of the feature of the feature map entry in the database.
+ *
+ * @see CDOFeatureMapEntry#setEStructuralFeature(EStructuralFeature)
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class FeatureMapEntryFeatureURIPropertyHandler implements PropertyAccessor, Getter, Setter
+{
+  private static final String EFEATURE_SEPARATOR = "#"; //$NON-NLS-1$
+
+  private static final long serialVersionUID = 1L;
+
+  @SuppressWarnings("rawtypes")
+  public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  public Member getMember()
+  {
+    return null;
+  }
+
+  public Object get(Object owner) throws HibernateException
+  {
+    final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)owner;
+    if (cdoFeatureMapEntry.getEStructuralFeature() == null)
+    {
+      return null;
+    }
+    return getEStructuralFeatureAsString(cdoFeatureMapEntry);
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object owner, Map mergeMap, SessionImplementor session) throws HibernateException
+  {
+    return get(owner);
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getReturnType()
+  {
+    return String.class;
+  }
+
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)target;
+    setEStructuralFeatureFromString(cdoFeatureMapEntry, (String)value);
+  }
+
+  /**
+   * Set the EStructuralFeature (see {@link #setEStructuralFeature(EStructuralFeature)}) from its String representation.
+   *
+   * @param eFeatureURI
+   *          a String representation, must be created by the {@link #getEStructuralFeatureAsString()} method
+   * @see #getEStructuralFeatureAsString()
+   */
+  private void setEStructuralFeatureFromString(CDOFeatureMapEntry fmEntry, String eFeatureURI)
+  {
+    final int firstSeparator = eFeatureURI.indexOf(EFEATURE_SEPARATOR);
+    final int lastSeparator = eFeatureURI.lastIndexOf(EFEATURE_SEPARATOR);
+    if (firstSeparator == -1 || lastSeparator == -1 || firstSeparator == lastSeparator)
+    {
+      throw new IllegalArgumentException("EFeature URI " + eFeatureURI + " has an illegal format"); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    final String ePackageURI = eFeatureURI.substring(0, firstSeparator);
+    final String eClassName = eFeatureURI.substring(1 + firstSeparator, lastSeparator);
+    final String eFeatureName = eFeatureURI.substring(1 + lastSeparator);
+
+    final EPackage ePackage;
+    if (HibernateThreadContext.isCommitContextSet())
+    {
+      final HibernateCommitContext hbCommitContext = HibernateThreadContext.getCommitContext();
+      ePackage = hbCommitContext.getCommitContext().getPackageRegistry().getEPackage(ePackageURI);
+    }
+    else
+    {
+      ePackage = HibernateUtil.getInstance().getPackageRegistry().getEPackage(ePackageURI);
+    }
+    if (ePackage == null)
+    {
+      throw new IllegalArgumentException("EPackage not found using " + eFeatureURI + " and EPackageURI: " + ePackageURI); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    final EClass eClass = (EClass)ePackage.getEClassifier(eClassName);
+    if (eClass == null)
+    {
+      throw new IllegalArgumentException("EClass not found using " + eFeatureURI + " and EClass name " + eClassName); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    final EStructuralFeature eFeature = eClass.getEStructuralFeature(eFeatureName);
+    if (eFeature == null)
+    {
+      throw new IllegalArgumentException("EClass not found using " + eFeatureURI + ", EClass name " + eClassName //$NON-NLS-1$ //$NON-NLS-2$
+          + " and EFeature name " + eFeatureName); //$NON-NLS-1$
+    }
+
+    fmEntry.setEStructuralFeature(eFeature);
+  }
+
+  /**
+   * @return a unique String version for an EStructuralFeature
+   */
+  private String getEStructuralFeatureAsString(CDOFeatureMapEntry fmEntry)
+  {
+    final EStructuralFeature eFeature = fmEntry.getEStructuralFeature();
+    final EClass eClass = eFeature.getEContainingClass();
+    return eClass.getEPackage().getNsURI() + EFEATURE_SEPARATOR + eClass.getName() + EFEATURE_SEPARATOR + eFeature.getName();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.java
new file mode 100644
index 0000000..eec977f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryInstantiator.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+
+import org.hibernate.mapping.Component;
+import org.hibernate.tuple.Instantiator;
+
+import java.io.Serializable;
+
+/**
+ * Instantiates {@link CDOFeatureMapEntry}.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+
+public class FeatureMapEntryInstantiator implements Instantiator
+{
+  private static final long serialVersionUID = -1219767393020090471L;
+
+  public FeatureMapEntryInstantiator(Component component)
+  {
+  }
+
+  public Object instantiate()
+  {
+    final CDOFeatureMapEntry fme = CDORevisionUtil.createCDOFeatureMapEntry();
+    return fme;
+  }
+
+  public Object instantiate(Serializable id)
+  {
+    return instantiate();
+  }
+
+  public boolean isInstance(Object object)
+  {
+    return CDOFeatureMapEntry.class.isInstance(object);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java
new file mode 100644
index 0000000..11abacb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryPropertyHandler.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+
+import org.eclipse.emf.ecore.EReference;
+
+import org.hibernate.HibernateException;
+import org.hibernate.PropertyNotFoundException;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * Implements the Hibernate accessor for mapped feature map properties. The owner object is always an instance of the
+ * {@link CDOFeatureMapEntry}. Returns null if the mapped property has a different name then the current feature of the
+ * owner (the CDOFeatureMapEntry), calls {@link CDOFeatureMapEntry#getValue()} in all other cases.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class FeatureMapEntryPropertyHandler implements PropertyAccessor, Getter, Setter
+{
+  private static final long serialVersionUID = 1L;
+
+  private String propertyName;
+
+  @SuppressWarnings("rawtypes")
+  public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException
+  {
+    return this;
+  }
+
+  public Member getMember()
+  {
+    return null;
+  }
+
+  public String getPropertyName()
+  {
+    return propertyName;
+  }
+
+  public void setPropertyName(String propertyName)
+  {
+    this.propertyName = propertyName;
+  }
+
+  public Object get(Object owner) throws HibernateException
+  {
+    final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)owner;
+    if (!isApplicable(cdoFeatureMapEntry))
+    {
+      return null;
+    }
+
+    final Object value = cdoFeatureMapEntry.getValue();
+    if (cdoFeatureMapEntry.getEStructuralFeature() instanceof EReference)
+    {
+      if (value instanceof CDOID && CDOIDUtil.isNull((CDOID)value))
+      {
+        return null;
+      }
+      else if (value instanceof CDOIDExternal)
+      {
+        return value;
+      }
+      else if (value instanceof CDOID)
+      {
+        return HibernateUtil.getInstance().getCDORevision((CDOID)value);
+      }
+    }
+    return value;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object owner, Map mergeMap, SessionImplementor session) throws HibernateException
+  {
+    return get(owner);
+  }
+
+  public Method getMethod()
+  {
+    return null;
+  }
+
+  public String getMethodName()
+  {
+    return null;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getReturnType()
+  {
+    return CDOFeatureMapEntry.class;
+  }
+
+  public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException
+  {
+    final CDOFeatureMapEntry cdoFeatureMapEntry = (CDOFeatureMapEntry)target;
+    Object localValue;
+    if (cdoFeatureMapEntry.getEStructuralFeature() instanceof EReference)
+    {
+      if (value == null)
+      {
+        localValue = value;
+      }
+      else if (value instanceof CDOIDExternal)
+      {
+        localValue = value;
+      }
+      else
+      {
+        localValue = HibernateUtil.getInstance().getCDOID(value);
+      }
+    }
+    else
+    {
+      localValue = value;
+    }
+    if (localValue != null)
+    {
+      cdoFeatureMapEntry.setValue(localValue);
+    }
+  }
+
+  private boolean isApplicable(CDOFeatureMapEntry cdoFeatureMapEntry)
+  {
+    if (cdoFeatureMapEntry.getEStructuralFeature() == null)
+    {
+      return false;
+    }
+    return cdoFeatureMapEntry.getEStructuralFeature().getName().equals(getPropertyName());
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.java
new file mode 100644
index 0000000..cdcdfd6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/FeatureMapEntryTuplizer.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateConstants;
+import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.Property;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.Setter;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.tuple.component.AbstractComponentTuplizer;
+
+/**
+ * Tuplizer for feature map entries. These types are mapped using the dynamic capabilities of Hibernate.
+ *
+ * @see CDOFeatureMapEntry
+ * @see FeatureMapEntryPropertyHandler
+ * @see FeatureMapEntryFeatureURIPropertyHandler
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+
+public class FeatureMapEntryTuplizer extends AbstractComponentTuplizer
+{
+  private static final long serialVersionUID = 1L;
+
+  private static final EStructuralFeature TEXT = XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot_Text();
+
+  private static final EStructuralFeature CDATA = XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot_CDATA();
+
+  private static final EStructuralFeature COMMENT = XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot_Comment();
+
+  public FeatureMapEntryTuplizer(Component component)
+  {
+    super(component);
+  }
+
+  @Override
+  protected Instantiator buildInstantiator(Component component)
+  {
+    return new FeatureMapEntryInstantiator(component);
+  }
+
+  @Override
+  protected Getter buildGetter(Component component, Property prop)
+  {
+    return getPropertyAccessor(prop, component).getGetter(component.getComponentClass(), prop.getName());
+  }
+
+  @Override
+  protected Setter buildSetter(Component component, Property prop)
+  {
+    return getPropertyAccessor(prop, component).getSetter(component.getComponentClass(), prop.getName());
+  }
+
+  protected PropertyAccessor getPropertyAccessor(Property mappedProperty, Component component)
+  {
+    if (mappedProperty.getName().compareToIgnoreCase(CDOHibernateConstants.FEATUREMAP_PROPERTY_FEATURE) == 0)
+    {
+      return new FeatureMapEntryFeatureURIPropertyHandler();
+    }
+    else if (mappedProperty.getName().compareToIgnoreCase(CDOHibernateConstants.FEATUREMAP_PROPERTY_COMMENT) == 0)
+    {
+      final FeatureMapEntryPropertyHandler propertyHandler = new FeatureMapEntryPropertyHandler();
+      propertyHandler.setPropertyName(COMMENT.getName());
+      return propertyHandler;
+    }
+    else if (mappedProperty.getName().compareToIgnoreCase(CDOHibernateConstants.FEATUREMAP_PROPERTY_CDATA) == 0)
+    {
+      final FeatureMapEntryPropertyHandler propertyHandler = new FeatureMapEntryPropertyHandler();
+      propertyHandler.setPropertyName(CDATA.getName());
+      return propertyHandler;
+    }
+    else if (mappedProperty.getName().compareToIgnoreCase(CDOHibernateConstants.FEATUREMAP_PROPERTY_TEXT) == 0)
+    {
+      final FeatureMapEntryPropertyHandler propertyHandler = new FeatureMapEntryPropertyHandler();
+      propertyHandler.setPropertyName(TEXT.getName());
+      return propertyHandler;
+    }
+    else if (mappedProperty.getName().endsWith(CDOHibernateConstants.FEATUREMAP_PROPERTY_ANY_PRIMITIVE))
+    {
+      final WildCardAttributePropertyHandler propertyHandler = new WildCardAttributePropertyHandler();
+      final int index = mappedProperty.getName().lastIndexOf(CDOHibernateConstants.PROPERTY_SEPARATOR);
+      final String propName = mappedProperty.getName().substring(0, index);
+      propertyHandler.setPropertyName(propName);
+      return propertyHandler;
+    }
+    else if (mappedProperty.getName().endsWith(CDOHibernateConstants.FEATUREMAP_PROPERTY_ANY_REFERENCE))
+    {
+      final FeatureMapEntryPropertyHandler propertyHandler = new FeatureMapEntryPropertyHandler();
+      final int index = mappedProperty.getName().lastIndexOf(CDOHibernateConstants.PROPERTY_SEPARATOR);
+      final String propName = mappedProperty.getName().substring(0, index);
+      propertyHandler.setPropertyName(propName);
+      return propertyHandler;
+    }
+
+    final FeatureMapEntryPropertyHandler propertyHandler = new FeatureMapEntryPropertyHandler();
+    propertyHandler.setPropertyName(mappedProperty.getName());
+    return propertyHandler;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class getMappedClass()
+  {
+    return CDOFeatureMapEntry.class;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java
new file mode 100644
index 0000000..0413240
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/HibernateMoveableListWrapper.java
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2008-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.eclipse.net4j.util.collection.MoveableList;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * Wraps a moveable list so that hibernate always sees an object view while cdo always sees a cdoid view. The same for
+ * EEnum: cdo wants to see an int (the ordinal), hibernate the real eenum value. This to support querying with EENum
+ * parameters.
+ *
+ * @author Martin Taal
+ */
+public class HibernateMoveableListWrapper implements MoveableList<Object>
+{
+  private List<Object> delegate;
+
+  private EStructuralFeature eFeature;
+
+  private boolean resolveCDOID;
+
+  public HibernateMoveableListWrapper()
+  {
+  }
+
+  public Object move(int targetIndex, int sourceIndex)
+  {
+    int size = size();
+    if (sourceIndex >= size)
+    {
+      throw new IndexOutOfBoundsException("sourceIndex=" + sourceIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    if (targetIndex >= size)
+    {
+      throw new IndexOutOfBoundsException("targetIndex=" + targetIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    Object object = get(sourceIndex);
+    if (targetIndex == sourceIndex)
+    {
+      return object;
+    }
+
+    if (targetIndex < sourceIndex)
+    {
+      moveUp1(targetIndex, sourceIndex - targetIndex);
+    }
+    else
+    {
+      moveDown1(targetIndex, targetIndex - sourceIndex);
+    }
+
+    set(targetIndex, object);
+    return object;
+  }
+
+  private void moveUp1(int index, int count)
+  {
+    for (int i = count; i > 0; i--)
+    {
+      set(index + i, get(index + i - 1));
+    }
+  }
+
+  private void moveDown1(int index, int count)
+  {
+    for (int i = count; i > 0; i--)
+    {
+      set(index - i, get(index - i + 1));
+    }
+  }
+
+  /**
+   * @return the delegate
+   */
+  public List<Object> getDelegate()
+  {
+    return delegate;
+  }
+
+  /**
+   * @param delegate
+   *          the delegate to set
+   */
+  public void setDelegate(List<Object> delegate)
+  {
+    this.delegate = delegate;
+  }
+
+  protected Object getObject(Object o)
+  {
+    if (o == null)
+    {
+      return null;
+    }
+
+    if (o instanceof CDOID && CDOIDUtil.isNull((CDOID)o))
+    {
+      return null;
+    }
+    else if (o instanceof CDOIDExternal)
+    {
+      return o;
+    }
+    else if (resolveCDOID && o instanceof CDOID)
+    {
+      return HibernateUtil.getInstance().getCDORevision((CDOID)o);
+    }
+
+    return o;
+  }
+
+  protected List<Object> getObjects(List<?> ids)
+  {
+    List<Object> result = new ArrayList<Object>();
+    for (Object o : ids)
+    {
+      result.add(getObject(o));
+    }
+
+    return result;
+  }
+
+  protected Object getValue(Object o)
+  {
+    if (o instanceof CDOIDExternal)
+    {
+      return o;
+    }
+
+    // can happen for primitive typed lists
+    if (!(o instanceof CDORevision))
+    {
+      return o;
+    }
+
+    return HibernateUtil.getInstance().getCDOID(o);
+  }
+
+  protected List<Object> getValues(Collection<?> c)
+  {
+    List<Object> newC = new ArrayList<Object>();
+    for (Object o : c)
+    {
+      newC.add(getValue(o));
+    }
+
+    return newC;
+  }
+
+  public void add(int index, Object element)
+  {
+    getDelegate().add(index, getValue(element));
+  }
+
+  public boolean add(Object o)
+  {
+    return getDelegate().add(getValue(o));
+  }
+
+  public boolean addAll(Collection<? extends Object> c)
+  {
+    return getDelegate().addAll(getValues(c));
+  }
+
+  public boolean addAll(int index, Collection<? extends Object> c)
+  {
+    return getDelegate().addAll(index, getValues(c));
+  }
+
+  public void clear()
+  {
+    getDelegate().clear();
+  }
+
+  public boolean contains(Object o)
+  {
+    return getDelegate().contains(getValue(o));
+  }
+
+  public boolean containsAll(Collection<?> c)
+  {
+    return getDelegate().containsAll(getValues(c));
+  }
+
+  public Object get(int index)
+  {
+    return getObject(getDelegate().get(index));
+  }
+
+  public int indexOf(Object o)
+  {
+    return getDelegate().indexOf(getValue(o));
+  }
+
+  public boolean isEmpty()
+  {
+    return getDelegate().isEmpty();
+  }
+
+  public Iterator<Object> iterator()
+  {
+    return new CDOHibernateIterator(getDelegate().iterator(), resolveCDOID);
+  }
+
+  public int lastIndexOf(Object o)
+  {
+    return getDelegate().lastIndexOf(getValue(o));
+  }
+
+  public ListIterator<Object> listIterator()
+  {
+    return new CDOHibernateListIterator(getDelegate().listIterator(), resolveCDOID);
+  }
+
+  public ListIterator<Object> listIterator(int index)
+  {
+    return new CDOHibernateListIterator(getDelegate().listIterator(index), resolveCDOID);
+  }
+
+  public Object remove(int index)
+  {
+    return getDelegate().remove(index);
+  }
+
+  public boolean remove(Object o)
+  {
+    return getDelegate().remove(getValue(o));
+  }
+
+  public boolean removeAll(Collection<?> c)
+  {
+    return getDelegate().removeAll(getValues(c));
+  }
+
+  public boolean retainAll(Collection<?> c)
+  {
+    return getDelegate().retainAll(getValues(c));
+  }
+
+  public Object set(int index, Object element)
+  {
+    return getDelegate().set(index, getValue(element));
+  }
+
+  public int size()
+  {
+    return getDelegate().size();
+  }
+
+  public List<Object> subList(int fromIndex, int toIndex)
+  {
+    return getObjects(getDelegate().subList(fromIndex, toIndex));
+  }
+
+  public Object[] toArray()
+  {
+    Object[] result = new Object[size()];
+    int i = 0;
+    for (Object o : this)
+    {
+      result[i++] = o;
+    }
+
+    return result;
+  }
+
+  @SuppressWarnings("unchecked")
+  public <T> T[] toArray(T[] a)
+  {
+    int i = 0;
+    for (Object o : this)
+    {
+      a[i++] = (T)o;
+    }
+
+    return a;
+  }
+
+  EStructuralFeature getEFeature()
+  {
+    return eFeature;
+  }
+
+  void setEFeature(EStructuralFeature eFeature)
+  {
+    this.eFeature = eFeature;
+    resolveCDOID = !HibernateUtil.getInstance().isCDOResourceContents(eFeature) && eFeature instanceof EReference;
+  }
+
+  private static final class CDOHibernateIterator implements Iterator<Object>
+  {
+    private final Iterator<?> delegate;
+
+    private final boolean resolveCDOID;
+
+    public CDOHibernateIterator(Iterator<?> delegate, boolean resolveCDOID)
+    {
+      this.delegate = delegate;
+      this.resolveCDOID = resolveCDOID;
+    }
+
+    public boolean hasNext()
+    {
+      return delegate.hasNext();
+    }
+
+    public Object next()
+    {
+      Object o = delegate.next();
+      if (o instanceof CDOIDExternal)
+      {
+        return o;
+      }
+      else if (resolveCDOID && o instanceof CDOID)
+      {
+        return HibernateUtil.getInstance().getCDORevision((CDOID)o);
+      }
+
+      return o;
+    }
+
+    public void remove()
+    {
+      delegate.remove();
+    }
+  }
+
+  private static final class CDOHibernateListIterator implements ListIterator<Object>
+  {
+    private final ListIterator<Object> delegate;
+
+    private final boolean resolveCDOID;
+
+    public CDOHibernateListIterator(ListIterator<Object> delegate, boolean resolveCDOID)
+    {
+      this.delegate = delegate;
+      this.resolveCDOID = resolveCDOID;
+    }
+
+    public void add(Object o)
+    {
+      delegate.add(HibernateUtil.getInstance().getCDOID(o));
+    }
+
+    public boolean hasNext()
+    {
+      return delegate.hasNext();
+    }
+
+    public boolean hasPrevious()
+    {
+      return delegate.hasPrevious();
+    }
+
+    public Object next()
+    {
+      Object o = delegate.next();
+      if (resolveCDOID && o instanceof CDOID)
+      {
+        return HibernateUtil.getInstance().getCDORevision((CDOID)delegate.next());
+      }
+
+      return o;
+    }
+
+    public int nextIndex()
+    {
+      return delegate.nextIndex();
+    }
+
+    public Object previous()
+    {
+      Object o = delegate.previous();
+      if (o instanceof CDOID)
+      {
+        return HibernateUtil.getInstance().getCDORevision((CDOID)delegate.next());
+      }
+
+      return o;
+    }
+
+    public int previousIndex()
+    {
+      return delegate.previousIndex();
+    }
+
+    public void remove()
+    {
+      delegate.remove();
+    }
+
+    public void set(Object o)
+    {
+      delegate.set(HibernateUtil.getInstance().getCDOID(o));
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java
new file mode 100644
index 0000000..0fc128c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/PersistableListHolder.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2008-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.collection.spi.PersistentCollection;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Keeps mappings from object/feature combinations to a hibernate persistable list. This works because the write action
+ * is done in one thread.
+ *
+ * @author Martin Taal
+ */
+public class PersistableListHolder
+{
+  private static PersistableListHolder instance = new PersistableListHolder();
+
+  private static ThreadLocal<Map<Key, PersistentCollection>> listMapping = new ThreadLocal<Map<Key, PersistentCollection>>();
+
+  public PersistableListHolder()
+  {
+  }
+
+  public void putListMapping(Object target, EStructuralFeature feature, PersistentCollection collection)
+  {
+    Key key = new Key(target, feature);
+    final PersistentCollection currentCachedValue = getListMapping(target, feature);
+    if (currentCachedValue == collection)
+    {
+      return;
+    }
+
+    if (currentCachedValue != null)
+    {
+      throw new IllegalStateException("There is already a list mapping present");
+    }
+
+    getListMapping().put(key, collection);
+  }
+
+  public PersistentCollection getListMapping(Object target, EStructuralFeature feature)
+  {
+    Key key = new Key(target, feature);
+    return getListMapping().get(key);
+  }
+
+  private Map<Key, PersistentCollection> getListMapping()
+  {
+    if (listMapping.get() == null)
+    {
+      listMapping.set(new HashMap<Key, PersistentCollection>());
+    }
+
+    return listMapping.get();
+  }
+
+  public void clearListMapping()
+  {
+    listMapping.set(null);
+  }
+
+  public static PersistableListHolder getInstance()
+  {
+    return instance;
+  }
+
+  public static void setInstance(PersistableListHolder instance)
+  {
+    PersistableListHolder.instance = instance;
+  }
+
+  private static final class Key
+  {
+    private Object owner;
+
+    private EStructuralFeature feature;
+
+    public Key(Object owner, EStructuralFeature feature)
+    {
+      this.owner = owner;
+      this.feature = feature;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+      if (!(obj instanceof Key))
+      {
+        return false;
+      }
+
+      Key otherKey = (Key)obj;
+      // the owner is uniquely present in mem, the same applies for the feature
+      // therefore == is allowed
+      return owner == otherKey.owner && feature == otherKey.feature;
+    }
+
+    @Override
+    public int hashCode()
+    {
+      return owner.hashCode() + feature.hashCode();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.java
new file mode 100644
index 0000000..aea2efb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WildCardAttributePropertyHandler.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - copied from CDORevisionPropertyHandler and adapted
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+
+import java.util.Map;
+
+/**
+ * Implements the getter/setter for a wild card EAttribute property. This type of property is used in a feature map
+ * created for wild cards. This class implements both the getter, setter and propertyaccessor interfaces. When the
+ * getGetter and getSetter methods are called it returns itself.
+ *
+ * @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
+ */
+public class WildCardAttributePropertyHandler extends FeatureMapEntryPropertyHandler
+{
+  private static final long serialVersionUID = -2659637883475733107L;
+
+  @Override
+  public Object get(Object owner) throws HibernateException
+  {
+    final FeatureMap.Entry fme = (FeatureMap.Entry)owner;
+    final Object value = fme.getValue();
+    final EStructuralFeature eFeature = fme.getEStructuralFeature();
+    // not handled by this one
+    if (value instanceof EObject)
+    {
+      return null;
+    }
+
+    if (value == null)
+    {
+      return null;
+    }
+
+    final EAttribute eAttribute = (EAttribute)eFeature;
+    final EDataType eDataType = eAttribute.getEAttributeType();
+    final String valueString = eDataType.getEPackage().getEFactoryInstance().convertToString(eDataType, value);
+    return valueString;
+  }
+
+  @Override
+  @SuppressWarnings("rawtypes")
+  public Object getForInsert(Object owner, Map mergeMap, SessionImplementor session) throws HibernateException
+  {
+    final Object value = get(owner);
+    return value;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java
new file mode 100644
index 0000000..b593c20
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java
@@ -0,0 +1,668 @@
+/*
+ * Copyright (c) 2008-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.CDOType;
+import org.eclipse.emf.cdo.common.revision.CDOListFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.server.IStoreChunkReader.Chunk;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStoreChunkReader;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateThreadContext;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.spi.common.revision.CDOReferenceAdjuster;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.hibernate.collection.internal.AbstractPersistentCollection;
+import org.hibernate.engine.spi.CollectionEntry;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.persister.collection.CollectionPersister;
+import org.hibernate.proxy.HibernateProxy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * Wraps a moveable list so that hibernate always sees an object view while cdo always sees a cdoid view. The same for
+ * EEnum: cdo wants to see an int (the ordinal), hibernate the real eenum value. This to support querying with EENum
+ * parameters.
+ *
+ * @author Martin Taal
+ */
+public class WrappedHibernateList implements InternalCDOList
+{
+  private List<Object> delegate;
+
+  private boolean frozen;
+
+  private int cachedSize = -1;
+
+  private final EStructuralFeature eFeature;
+
+  private final InternalCDORevision owner;
+
+  private Chunk cachedChunk;
+
+  private int currentListChunk = -1;
+
+  private boolean resolveCDOID;
+
+  public WrappedHibernateList(InternalCDORevision owner, EStructuralFeature eFeature)
+  {
+    this.owner = owner;
+    this.eFeature = eFeature;
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    if (accessor != null)
+    {
+      currentListChunk = accessor.getCurrentListChunk();
+    }
+    resolveCDOID = !HibernateUtil.getInstance().isCDOResourceContents(eFeature) && eFeature instanceof EReference;
+  }
+
+  public void move(int newPosition, Object object)
+  {
+    checkFrozen();
+    move(newPosition, indexOf(object));
+  }
+
+  public Object move(int targetIndex, int sourceIndex)
+  {
+    checkFrozen();
+    int size = size();
+    if (sourceIndex >= size)
+    {
+      throw new IndexOutOfBoundsException("sourceIndex=" + sourceIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    if (targetIndex >= size)
+    {
+      throw new IndexOutOfBoundsException("targetIndex=" + targetIndex + ", size=" + size); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    Object object = get(sourceIndex);
+    if (targetIndex == sourceIndex)
+    {
+      return object;
+    }
+
+    if (targetIndex < sourceIndex)
+    {
+      moveUp1(targetIndex, sourceIndex - targetIndex);
+    }
+    else
+    {
+      moveDown1(targetIndex, targetIndex - sourceIndex);
+    }
+
+    set(targetIndex, object);
+    return object;
+  }
+
+  private void moveUp1(int index, int count)
+  {
+    for (int i = count; i > 0; i--)
+    {
+      set(index + i, get(index + i - 1));
+    }
+  }
+
+  private void moveDown1(int index, int count)
+  {
+    for (int i = count; i > 0; i--)
+    {
+      set(index - i, get(index - i + 1));
+    }
+  }
+
+  /**
+   * There's a duplicate of this method in CDOListImpl!!!
+   */
+  public boolean adjustReferences(CDOReferenceAdjuster adjuster, EStructuralFeature feature)
+  {
+    boolean changed = false;
+
+    CDOType type = CDOModelUtil.getType(feature);
+    int size = size();
+    for (int i = 0; i < size; i++)
+    {
+      Object element = get(i);
+      Object newID = type.adjustReferences(adjuster, element, feature, i);
+      if (newID != element) // Just an optimization for NOOP adjusters
+      {
+        set(i, newID);
+        changed = true;
+      }
+    }
+
+    return changed;
+  }
+
+  /**
+   * Not loaded and not loadable anymore because the collection is disconnected
+   */
+  public boolean isUninitializedCollection()
+  {
+    // note the getDelegate checks if the underlying persistentcollection
+    // is loaded or connected
+    final Object theDelegate = getDelegate();
+    if (theDelegate instanceof UninitializedCollection)
+    {
+      return true;
+    }
+
+    if (theDelegate instanceof WrappedHibernateList)
+    {
+      return ((WrappedHibernateList)theDelegate).isUninitializedCollection();
+    }
+    return false;
+  }
+
+  public InternalCDOList clone(EClassifier classifier)
+  {
+    CDOType type = CDOModelUtil.getType(classifier);
+    int size = size();
+    InternalCDOList list = (InternalCDOList)CDOListFactory.DEFAULT.createList(size, 0, 0);
+    for (int i = 0; i < size; i++)
+    {
+      list.add(type.copyValue(get(i)));
+    }
+    return list;
+  }
+
+  /**
+   * @return the delegate
+   */
+  public List<Object> getDelegate()
+  {
+    // if we got disconnected then internally use a new autoexpanding list
+    if (delegate instanceof AbstractPersistentCollection && !((AbstractPersistentCollection)delegate).wasInitialized() && !isConnectedToSession())
+    {
+      delegate = new UninitializedCollection<Object>()
+      {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public Object set(int index, Object element)
+        {
+          ensureSize(index);
+          return super.set(index, element);
+        }
+
+        @Override
+        public Object get(int index)
+        {
+          ensureSize(index);
+          final Object o = super.get(index);
+          if (o == null)
+          {
+            return CDORevisionUtil.UNINITIALIZED;
+          }
+          return o;
+        }
+
+        private void ensureSize(int index)
+        {
+          if (index >= size())
+          {
+            for (int i = size() - 1; i <= index; i++)
+            {
+              add(null);
+            }
+          }
+        }
+
+      };
+    }
+
+    return delegate;
+  }
+
+  protected boolean isConnectedToSession()
+  {
+    final AbstractPersistentCollection persistentCollection = (AbstractPersistentCollection)delegate;
+    final SessionImplementor session = persistentCollection.getSession();
+    return session != null && session.isOpen() && session.getPersistenceContext().containsCollection(persistentCollection);
+  }
+
+  /**
+   * @param delegate
+   *          the delegate to set
+   */
+  public void setDelegate(List<Object> delegate)
+  {
+    this.delegate = delegate;
+  }
+
+  private static Object convertToCDO(Object value)
+  {
+    if (value == null)
+    {
+      return null;
+    }
+
+    if (value instanceof CDORevision || value instanceof HibernateProxy)
+    {
+      return HibernateUtil.getInstance().getCDOID(value);
+    }
+
+    if (value instanceof EEnumLiteral)
+    {
+      return ((EEnumLiteral)value).getValue();
+    }
+
+    return value;
+  }
+
+  private static List<Object> convertToCDO(List<?> ids)
+  {
+    List<Object> result = new ArrayList<Object>();
+    for (Object o : ids)
+    {
+      result.add(convertToCDO(o));
+    }
+
+    return result;
+  }
+
+  protected Object getHibernateValue(Object o)
+  {
+    if (o instanceof CDOIDExternal)
+    {
+      return o;
+    }
+
+    if (o instanceof CDOID && resolveCDOID)
+    {
+      return HibernateUtil.getInstance().getCDORevision((CDOID)o);
+    }
+
+    return o;
+  }
+
+  protected List<Object> getHibernateValues(Collection<?> c)
+  {
+    List<Object> newC = new ArrayList<Object>();
+    for (Object o : c)
+    {
+      newC.add(getHibernateValue(o));
+    }
+
+    return newC;
+  }
+
+  public void add(int index, Object element)
+  {
+    checkFrozen();
+    getDelegate().add(index, getHibernateValue(element));
+  }
+
+  public boolean add(Object o)
+  {
+    checkFrozen();
+    return getDelegate().add(getHibernateValue(o));
+  }
+
+  public boolean addAll(Collection<? extends Object> c)
+  {
+    checkFrozen();
+    return getDelegate().addAll(getHibernateValues(c));
+  }
+
+  public boolean addAll(int index, Collection<? extends Object> c)
+  {
+    checkFrozen();
+    return getDelegate().addAll(index, getHibernateValues(c));
+  }
+
+  public void clear()
+  {
+    checkFrozen();
+    getDelegate().clear();
+  }
+
+  public boolean contains(Object o)
+  {
+    return getDelegate().contains(getHibernateValue(o));
+  }
+
+  public boolean containsAll(Collection<?> c)
+  {
+    return getDelegate().containsAll(getHibernateValues(c));
+  }
+
+  public Object get(int index)
+  {
+    Object delegateValue = getDelegate().get(index);
+
+    // not loaded, force the load
+    if (delegateValue == CDORevisionUtil.UNINITIALIZED)
+    {
+      delegateValue = getChunkedValue(index);
+    }
+
+    if (delegateValue instanceof CDOID)
+    {
+      return delegateValue;
+    }
+
+    return convertToCDO(delegateValue);
+  }
+
+  public Object get(int index, boolean resolve)
+  {
+    Object delegateValue = getDelegate().get(index);
+
+    // if resolve==false then the caller can handle uninitialized objects.
+    if (!resolve && delegateValue == CDORevisionUtil.UNINITIALIZED)
+    {
+      return CDORevisionUtil.UNINITIALIZED;
+    }
+
+    // else force the load
+    return get(index);
+  }
+
+  private Object getChunkedValue(int index)
+  {
+    readChunk(index);
+    if (cachedChunk != null)
+    {
+      // note index must be within the range as the chunk
+      // is read again if index is too large.
+      return cachedChunk.get(index - cachedChunk.getStartIndex());
+    }
+    return null;
+  }
+
+  private void readChunk(int index)
+  {
+    if (cachedChunk != null)
+    {
+      if (cachedChunk.getStartIndex() <= index && index < cachedChunk.getStartIndex() + cachedChunk.size())
+      {
+        // a valid chunk
+        return;
+      }
+      // a not valid chunk reread it
+      // TODO: cache chunks also
+      cachedChunk = null;
+    }
+    final HibernateStoreAccessor accessor = HibernateThreadContext.getCurrentStoreAccessor();
+    if (accessor == null)
+    {
+      return;
+    }
+
+    // read in batches always
+    // if the currentListChunk is not set then read a sizeable chunk
+    int chunkSize = Math.max(100, currentListChunk);
+    final HibernateStoreChunkReader chunkReader = accessor.createChunkReader(owner, eFeature);
+    chunkReader.addRangedChunk(index, index + chunkSize);
+    cachedChunk = chunkReader.executeRead().get(0);
+  }
+
+  public int indexOf(Object o)
+  {
+    return getDelegate().indexOf(getHibernateValue(o));
+  }
+
+  public boolean isEmpty()
+  {
+    return getDelegate().isEmpty();
+  }
+
+  public Iterator<Object> iterator()
+  {
+    return new CDOHibernateIterator(getDelegate().iterator());
+  }
+
+  public int lastIndexOf(Object o)
+  {
+    return getDelegate().lastIndexOf(getHibernateValue(o));
+  }
+
+  public ListIterator<Object> listIterator()
+  {
+    return new CDOHibernateListIterator(this, getDelegate().listIterator());
+  }
+
+  public ListIterator<Object> listIterator(int index)
+  {
+    return new CDOHibernateListIterator(this, getDelegate().listIterator(index));
+  }
+
+  public Object remove(int index)
+  {
+    checkFrozen();
+    return getDelegate().remove(index);
+  }
+
+  public boolean remove(Object o)
+  {
+    checkFrozen();
+    return getDelegate().remove(getHibernateValue(o));
+  }
+
+  public boolean removeAll(Collection<?> c)
+  {
+    checkFrozen();
+    return getDelegate().removeAll(getHibernateValues(c));
+  }
+
+  public boolean retainAll(Collection<?> c)
+  {
+    return getDelegate().retainAll(getHibernateValues(c));
+  }
+
+  public Object set(int index, Object element)
+  {
+    checkFrozen();
+
+    if (element == CDORevisionUtil.UNINITIALIZED)
+    {
+      return null;
+    }
+
+    return getDelegate().set(index, getHibernateValue(element));
+  }
+
+  public int size()
+  {
+    if (cachedSize != -1)
+    {
+      return cachedSize;
+    }
+    if (getDelegate() instanceof AbstractPersistentCollection)
+    {
+      final AbstractPersistentCollection collection = (AbstractPersistentCollection)getDelegate();
+      if (collection.wasInitialized())
+      {
+        cachedSize = -1;
+        return getDelegate().size();
+      }
+      final SessionImplementor session = collection.getSession();
+      CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(collection);
+      CollectionPersister persister = entry.getLoadedPersister();
+      if (collection.hasQueuedOperations())
+      {
+        session.flush();
+      }
+      cachedSize = persister.getSize(entry.getLoadedKey(), session);
+      return cachedSize;
+    }
+
+    return getDelegate().size();
+  }
+
+  public List<Object> subList(int fromIndex, int toIndex)
+  {
+    return convertToCDO(getDelegate().subList(fromIndex, toIndex));
+  }
+
+  public Object[] toArray()
+  {
+    Object[] result = new Object[size()];
+    int i = 0;
+    for (Object o : this)
+    {
+      result[i++] = o;
+    }
+
+    return result;
+  }
+
+  @SuppressWarnings("unchecked")
+  public <T> T[] toArray(T[] a)
+  {
+    int i = 0;
+    for (Object o : this)
+    {
+      a[i++] = (T)o;
+    }
+
+    return a;
+  }
+
+  private static final class CDOHibernateIterator implements Iterator<Object>
+  {
+    private final Iterator<?> delegate;
+
+    public CDOHibernateIterator(Iterator<?> delegate)
+    {
+      this.delegate = delegate;
+    }
+
+    public boolean hasNext()
+    {
+      return delegate.hasNext();
+    }
+
+    public Object next()
+    {
+      Object value = delegate.next();
+      return convertToCDO(value);
+    }
+
+    public void remove()
+    {
+      delegate.remove();
+    }
+  }
+
+  private static final class CDOHibernateListIterator implements ListIterator<Object>
+  {
+    private final ListIterator<Object> delegate;
+
+    private final WrappedHibernateList owner;
+
+    public CDOHibernateListIterator(WrappedHibernateList owner, ListIterator<Object> delegate)
+    {
+      this.delegate = delegate;
+      this.owner = owner;
+    }
+
+    public void add(Object o)
+    {
+      owner.checkFrozen();
+
+      delegate.add(HibernateUtil.getInstance().getCDOID(o));
+    }
+
+    public boolean hasNext()
+    {
+      return delegate.hasNext();
+    }
+
+    public boolean hasPrevious()
+    {
+      return delegate.hasPrevious();
+    }
+
+    public Object next()
+    {
+      Object value = delegate.next();
+      return convertToCDO(value);
+    }
+
+    public int nextIndex()
+    {
+      return delegate.nextIndex();
+    }
+
+    public Object previous()
+    {
+      Object value = delegate.previous();
+      return convertToCDO(value);
+    }
+
+    public int previousIndex()
+    {
+      return delegate.previousIndex();
+    }
+
+    public void remove()
+    {
+      owner.checkFrozen();
+      delegate.remove();
+    }
+
+    public void set(Object o)
+    {
+      owner.checkFrozen();
+      delegate.set(HibernateUtil.getInstance().getCDOID(o));
+    }
+  }
+
+  public void freeze()
+  {
+    frozen = true;
+  }
+
+  private void checkFrozen()
+  {
+    // a frozen check always implies a modification
+    cachedSize = -1;
+    if (frozen)
+    {
+      throw new IllegalStateException("Cannot modify a frozen list");
+    }
+  }
+
+  public void setWithoutFrozenCheck(int i, Object value)
+  {
+    getDelegate().set(i, getHibernateValue(value));
+  }
+
+  CDORevision getOwner()
+  {
+    return owner;
+  }
+
+  // tagging interface
+  private class UninitializedCollection<E> extends ArrayList<E>
+  {
+    private static final long serialVersionUID = 1L;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.java b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.java
new file mode 100644
index 0000000..9c657f8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/XMLUserType.java
@@ -0,0 +1,631 @@
+/*
+ * Copyright (c) 2011, 2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial api
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer;
+
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SessionImplementor;
+import org.hibernate.usertype.UserType;
+
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+/**
+ * Persists the types from the {@link XMLTypePackage}.
+ */
+public class XMLUserType implements UserType
+{
+  private static final java.lang.String XML_TYPE_PACKAGE_NSURI = "http://www.eclipse.org/emf/2003/XMLType"; //$NON-NLS-1$
+
+  private EDataType eDataType = null;
+
+  private int[] sqlTypes = null;
+
+  public Object assemble(Serializable arg0, Object arg1) throws HibernateException
+  {
+    return arg1;
+  }
+
+  public Object deepCopy(Object arg0) throws HibernateException
+  {
+    return arg0;
+  }
+
+  public Serializable disassemble(Object arg0) throws HibernateException
+  {
+    return (Serializable)arg0;
+  }
+
+  public boolean equals(Object x, Object y) throws HibernateException
+  {
+    // todo: check compare on null values
+    if (x == null && y == null)
+    {
+      return true;
+    }
+
+    if (x == null || y == null)
+    {
+      return false;
+    }
+
+    if (x.getClass() != y.getClass())
+    {
+      return false;
+    }
+
+    return x.equals(y);
+  }
+
+  public int hashCode(Object arg0) throws HibernateException
+  {
+    return arg0.hashCode();
+  }
+
+  public boolean isMutable()
+  {
+    return false;
+  }
+
+  protected java.lang.String convertToString(Object value)
+  {
+    if (value == null)
+    {
+      return null;
+    }
+    if (value instanceof String)
+    {
+      return (java.lang.String)value;
+    }
+    if (getEDataType() == null)
+    {
+      return value.toString();
+    }
+    final EDataType eDataType = getEDataType();
+    return eDataType.getEPackage().getEFactoryInstance().convertToString(eDataType, value);
+  }
+
+  protected Object convertToObject(java.lang.String value)
+  {
+    if (getEDataType() == null || value == null)
+    {
+      return value;
+    }
+    final EDataType eDataType = getEDataType();
+    return eDataType.getEPackage().getEFactoryInstance().createFromString(eDataType, value);
+  }
+
+  private EDataType getEDataType()
+  {
+    if (eDataType != null)
+    {
+      return eDataType;
+    }
+    final CDOPackageRegistry packageRegistry = HibernateUtil.getInstance().getPackageRegistry();
+    final EPackage ePackage = packageRegistry.getEPackage(XML_TYPE_PACKAGE_NSURI);
+    if (ePackage == null)
+    {
+      throw new IllegalStateException("EPackage with nsuri " + XML_TYPE_PACKAGE_NSURI + " not found"); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    final EClassifier eClassifier = ePackage.getEClassifier(getEDataTypeName());
+    if (eClassifier == null || !(eClassifier instanceof EDataType))
+    {
+      throw new IllegalStateException("EPackage " + ePackage.getName() + " does not have an EEnum with name " //$NON-NLS-1$ //$NON-NLS-2$
+          + getEDataTypeName());
+    }
+
+    eDataType = (EDataType)eClassifier;
+
+    return eDataType;
+  }
+
+  protected java.lang.String getEDataTypeName()
+  {
+    if (this.getClass() != XMLUserType.class)
+    {
+      return this.getClass().getSimpleName();
+    }
+
+    return "String"; //$NON-NLS-1$
+  }
+
+  public Object nullSafeGet(ResultSet arg0, java.lang.String[] arg1, SessionImplementor sessionImplementor, Object arg2) throws HibernateException, SQLException
+  {
+    final Object value = arg0.getObject(arg1[0]);
+    if (arg0.wasNull())
+    {
+      return null;
+    }
+
+    return convertToString(value);
+  }
+
+  public void nullSafeSet(PreparedStatement arg0, Object arg1, int arg2, SessionImplementor sessionImplementor) throws HibernateException, SQLException
+  {
+    if (arg1 == null)
+    {
+      // st.setString(index, ((Enumerator)getEEnum().getDefaultValue()).getLiteral());
+      arg0.setNull(arg2, sqlTypes()[0]);
+    }
+    else if (arg1 instanceof java.lang.String)
+    {
+      arg0.setObject(arg2, convertToObject((java.lang.String)arg1), getSqlType());
+    }
+    else
+    {
+      arg0.setObject(arg2, arg1, getSqlType());
+    }
+  }
+
+  public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException
+  {
+    return arg0;
+  }
+
+  @SuppressWarnings("rawtypes")
+  public Class returnedClass()
+  {
+    if (getEDataType() == null || getEDataType().getInstanceClass() == null)
+    {
+      return String.class;
+    }
+    return getEDataType().getInstanceClass();
+  }
+
+  public int[] sqlTypes()
+  {
+    if (sqlTypes == null)
+    {
+      sqlTypes = new int[] { getSqlType() };
+    }
+    return sqlTypes;
+  }
+
+  protected int getSqlType()
+  {
+    return Types.VARCHAR;
+  }
+
+  public static class AnySimpleType extends XMLUserType
+  {
+
+  }
+
+  public static class AnyURI extends XMLUserType
+  {
+
+  }
+
+  public static class Base64Binary extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BLOB;
+    }
+  }
+
+  public static class Boolean extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIT;
+    }
+  }
+
+  public static class BooleanObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BOOLEAN;
+    }
+  }
+
+  public static class Byte extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TINYINT;
+    }
+  }
+
+  public static class ByteObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TINYINT;
+    }
+  }
+
+  public static class Date extends XMLUserType
+  {
+    @Override
+    protected java.lang.String convertToString(Object value)
+    {
+      if (value == null)
+      {
+        return super.convertToString(value);
+      }
+      return super.convertToString(HibernateUtil.getInstance().getXMLGregorianCalendarDate((java.util.Date)value, false));
+    }
+
+    @Override
+    protected Object convertToObject(java.lang.String value)
+    {
+      return new java.sql.Date(((XMLGregorianCalendar)super.convertToObject(value)).toGregorianCalendar().getTime().getTime());
+    }
+
+    @Override
+    protected int getSqlType()
+    {
+      return Types.DATE;
+    }
+  }
+
+  public static class DateTime extends XMLUserType
+  {
+    @Override
+    protected java.lang.String convertToString(Object value)
+    {
+      if (value == null)
+      {
+        return super.convertToString(value);
+      }
+      return super.convertToString(HibernateUtil.getInstance().getXMLGregorianCalendarDate((java.util.Date)value, true));
+    }
+
+    @Override
+    protected Object convertToObject(java.lang.String value)
+    {
+      return new java.sql.Timestamp(((XMLGregorianCalendar)super.convertToObject(value)).toGregorianCalendar().getTime().getTime());
+    }
+
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TIMESTAMP;
+    }
+  }
+
+  public static class Decimal extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.NUMERIC;
+    }
+  }
+
+  public static class Double extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.DOUBLE;
+    }
+  }
+
+  public static class DoubleObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.DOUBLE;
+    }
+  }
+
+  public static class Duration extends XMLUserType
+  {
+  }
+
+  public static class ENTITIES extends XMLUserType
+  {
+  }
+
+  public static class ENTITIESBase extends XMLUserType
+  {
+  }
+
+  public static class ENTITY extends XMLUserType
+  {
+  }
+
+  public static class Float extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.FLOAT;
+    }
+  }
+
+  public static class FloatObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.FLOAT;
+    }
+  }
+
+  public static class GDay extends XMLUserType
+  {
+  }
+
+  public static class GMonth extends XMLUserType
+  {
+  }
+
+  public static class GMonthDay extends XMLUserType
+  {
+  }
+
+  public static class GYear extends XMLUserType
+  {
+  }
+
+  public static class GYearMonth extends XMLUserType
+  {
+  }
+
+  public static class HexBinary extends XMLUserType
+  {
+  }
+
+  public static class ID extends XMLUserType
+  {
+  }
+
+  public static class IDREF extends XMLUserType
+  {
+  }
+
+  public static class IDREFS extends XMLUserType
+  {
+  }
+
+  public static class IDREFSBase extends XMLUserType
+  {
+  }
+
+  public static class Int extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class Integer extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class IntObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class Language extends XMLUserType
+  {
+  }
+
+  public static class Long extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class LongObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class Name extends XMLUserType
+  {
+  }
+
+  public static class NCName extends XMLUserType
+  {
+  }
+
+  public static class NMTOKEN extends XMLUserType
+  {
+  }
+
+  public static class NMTOKENS extends XMLUserType
+  {
+  }
+
+  public static class NMTOKENSBase extends XMLUserType
+  {
+  }
+
+  public static class String extends XMLUserType
+  {
+  }
+
+  public static class Token extends XMLUserType
+  {
+  }
+
+  public static class QName extends XMLUserType
+  {
+  }
+
+  public static class NOTATION extends XMLUserType
+  {
+  }
+
+  public static class NegativeInteger extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class NonNegativeInteger extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class NonPositiveInteger extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class PositiveInteger extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class Short extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class ShortObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class Time extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TIME;
+    }
+  }
+
+  public static class UnsignedByte extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TINYINT;
+    }
+  }
+
+  public static class UnsignedByteObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.TINYINT;
+    }
+  }
+
+  public static class UnsignedInt extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class UnsignedIntObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class UnsignedShort extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class UnsignedShortObject extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.INTEGER;
+    }
+  }
+
+  public static class UnsignedLong extends XMLUserType
+  {
+    @Override
+    protected int getSqlType()
+    {
+      return Types.BIGINT;
+    }
+  }
+
+  public static class NormalizedString extends XMLUserType
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/.project b/org.eclipse.emf.cdo.server.objectivity-feature/.project
new file mode 100644
index 0000000..afb9471
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/.project
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.objectivity-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..fb8106e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Mon Jul 04 12:33:36 CEST 2011
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..0c30cc4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Sun Mar 09 19:15:26 CET 2008
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/build.properties b/org.eclipse.emf.cdo.server.objectivity-feature/build.properties
new file mode 100644
index 0000000..49460fe
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/build.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = pom.xml
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/feature.properties b/org.eclipse.emf.cdo.server.objectivity-feature/feature.properties
new file mode 100644
index 0000000..8341b11
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/feature.properties
@@ -0,0 +1,8 @@
+# Copyright (c) 2010-2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+
+featureName = CDO Model Repository Server Objectivity
+description = Contains the Objectivity Store and stubbed jar file bundle. For runtime, ensure that you have Objectivity /DB installed!
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/feature.xml b/org.eclipse.emf.cdo.server.objectivity-feature/feature.xml
new file mode 100644
index 0000000..59d8664
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/feature.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+	Copyright (c) 2010-2013, 2017 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Simon McDuff - initial API and implementation
+	  Ibrahim Sallam - Code refactring and CDO 3.0 support
+-->
+<feature
+      id="org.eclipse.emf.cdo.server.objectivity"
+      label="%featureName"
+      version="4.2.400.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.emf.cdo.license"
+      license-feature-version="0.0.0">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%updateSiteName" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.emf.cdo.server.objectivity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.cdo.server.objectivity.stub"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.emf.cdo.server.objectivity-feature/pom.xml b/org.eclipse.emf.cdo.server.objectivity-feature/pom.xml
new file mode 100644
index 0000000..c34ec33
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity-feature/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.features</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/features</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo.features</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.objectivity</artifactId>
+  <version>4.2.400-SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/.classpath b/org.eclipse.emf.cdo.server.objectivity.stub/.classpath
new file mode 100644
index 0000000..ac695e1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry exported="true" kind="lib" path="oojava_epl.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/.project b/org.eclipse.emf.cdo.server.objectivity.stub/.project
new file mode 100644
index 0000000..bbdcb0a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/.project
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.objectivity.stub</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.server.objectivity.stub/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..22ce804
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed May 19 11:54:39 CEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.server.objectivity.stub/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..479055b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/META-INF/MANIFEST.MF
@@ -0,0 +1,34 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.server.objectivity.stub
+Bundle-Version: 4.3.100.qualifier
+Bundle-Localization: plugin
+Bundle-ClassPath: oojava_epl.jar
+Export-Package: com.objy.as;version="4.3.0";uses:="com.objy.pm.asexcep,com.objy.db.app,com.objy.as.app",
+ com.objy.as.app;version="4.3.0";uses:="com.objy.db.app,com.objy.pm.asapp",
+ com.objy.db;version="4.3.0";uses:="com.objy.db.app",
+ com.objy.db.app;version="4.3.0";uses:="com.objy.db.iapp,com.objy.ejb",
+ com.objy.db.iapp;version="4.3.0";uses:="com.objy.db.app,com.objy.ejb,javax.transaction.xa",
+ com.objy.db.util;version="4.3.0";uses:="com.objy.db.iapp,com.objy.db.app,com.objy.pm",
+ com.objy.ejb;version="4.3.0";uses:="com.objy.db.iapp,com.objy.db.app,javax.transaction.xa",
+ com.objy.pm;version="4.3.0";
+  uses:="com.objy.db.iapp,
+   com.objy.db.app,
+   com.objy.pm.asapp,
+   com.objy.db,
+   com.objy.as.app",
+ com.objy.pm.asapp;version="4.3.0";
+  uses:="com.objy.db.iapp,
+   com.objy.db.app,
+   com.objy.as.app,
+   com.objy.pm",
+ com.objy.pm.asexcep;version="4.3.0";
+  uses:="com.objy.db.app,
+   com.objy.as,
+   com.objy.as.app,
+   com.objy.pm",
+ com.objy.pm.tmi;version="4.3.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Automatic-Module-Name: org.eclipse.emf.cdo.server.objectivity.stub
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/about.html b/org.eclipse.emf.cdo.server.objectivity.stub/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/build.properties b/org.eclipse.emf.cdo.server.objectivity.stub/build.properties
new file mode 100644
index 0000000..6b01674
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/build.properties
@@ -0,0 +1,21 @@
+# Copyright (c) 2010, 2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Ibrahim Sallam - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = META-INF/,\
+               oojava_epl.jar, \
+               about.html,\
+               epl-v10.html,\
+               plugin.properties
+src.includes = about.html,\
+               pom.xml
+
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/epl-v10.html b/org.eclipse.emf.cdo.server.objectivity.stub/epl-v10.html
new file mode 100644
index 0000000..d7b88e9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/epl-v10.html
@@ -0,0 +1,319 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="ProgId" content="Word.Document">
+<meta name="Generator" content="Microsoft Word 9">
+<meta name="Originator" content="Microsoft Word 9">
+<link rel="File-List" href="http://www.eclipse.org/org/documents/Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml"><title>Eclipse Public License - Version 1.0</title><!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+
+
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style></head>
+
+<body style="" lang="EN-US">
+
+<div class="Section1">
+
+<p style="text-align: center;" align="center"><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style="font-size: 10pt;">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style="font-size: 10pt;">1. DEFINITIONS</span></b> </p>
+
+<p><span style="font-size: 10pt;">"Contribution" means:</span> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear="left">
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">i)
+changes to the Program, and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">ii)
+additions to the Program;</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style="font-size: 10pt;">"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style="font-size: 10pt;">"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style="font-size: 10pt;">"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style="font-size: 10pt;">"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style="font-size: 10pt;">2. GRANT OF RIGHTS</span></b> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span style="color: red;"> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style="color: green;"> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style="font-size: 10pt;">3. REQUIREMENTS</span></b> </p>
+
+<p><span style="font-size: 10pt;">A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b)
+its license agreement:</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style="color: blue;"> </span></span></p>
+
+<p><span style="font-size: 10pt;">When the Program is made available in source
+code form:</span> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+it must be made available under this Agreement; and </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style="font-size: 10pt;">Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style="font-size: 10pt;">Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style="font-size: 10pt;">4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style="font-size: 10pt;">Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style="font-size: 10pt;">For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style="font-size: 10pt;">5. NO WARRANTY</span></b> </p>
+
+<p><span style="font-size: 10pt;">EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style="font-size: 10pt;">6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style="font-size: 10pt;">EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style="font-size: 10pt;">7. GENERAL</span></b> </p>
+
+<p><span style="font-size: 10pt;">If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style="font-size: 10pt;">If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style="font-size: 10pt;">All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style="font-size: 10pt;">Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style="font-size: 10pt;">This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class="MsoNormal"><!--[if !supportEmptyParas]-->&nbsp;<!--[endif]--><o:p></o:p></p>
+
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/oojava_epl.jar b/org.eclipse.emf.cdo.server.objectivity.stub/oojava_epl.jar
new file mode 100644
index 0000000..0caf6cf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/oojava_epl.jar
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/plugin.properties b/org.eclipse.emf.cdo.server.objectivity.stub/plugin.properties
new file mode 100644
index 0000000..f92a40c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Ibrahim Sallam - initial API and implementation
+
+pluginName = CDO Model Repository Server Objectivity (Driver Stub)
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.server.objectivity.stub/pom.xml b/org.eclipse.emf.cdo.server.objectivity.stub/pom.xml
new file mode 100644
index 0000000..f1f117c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity.stub/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.objectivity.stub</artifactId>
+  <version>4.3.100-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.objectivity/.classpath b/org.eclipse.emf.cdo.server.objectivity/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.server.objectivity/.options b/org.eclipse.emf.cdo.server.objectivity/.options
new file mode 100644
index 0000000..21c4454
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.emf.cdo.server.objectivity/debug = true
diff --git a/org.eclipse.emf.cdo.server.objectivity/.project b/org.eclipse.emf.cdo.server.objectivity/.project
new file mode 100644
index 0000000..da5a2e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.server.objectivity</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/.api_filters b/org.eclipse.emf.cdo.server.objectivity/.settings/.api_filters
new file mode 100644
index 0000000..e784fa2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/.api_filters
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.server.objectivity" version="2">
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.emf.cdo.server.embedded.CDOSession">
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.eclipse.emf.cdo.server.embedded.CDOSession"/>
+                <message_argument value="org.eclipse.emf.cdo.server.objectivity_4.0.500"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.emf.cdo.server.embedded.CDOSessionConfiguration">
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.eclipse.emf.cdo.server.embedded.CDOSessionConfiguration"/>
+                <message_argument value="org.eclipse.emf.cdo.server.objectivity_4.0.500"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java" type="org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor">
+        <filter id="574660632">
+            <message_arguments>
+                <message_argument value="DurableLocking"/>
+                <message_argument value="IDurableLockingManager"/>
+                <message_argument value="ObjectivityStoreAccessor"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..75b31bc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 13:01:59 CEST 2011
+eclipse.preferences.version=1
+
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..07533b5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,394 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.ucls,doc-files/,package.html,package-info.java
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.launching.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..556ed07
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Fri Sep 02 05:38:34 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=ignore
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..8f1f1da
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Ibrahim Sallam - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Ibrahim Sallam\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.api.tools.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..0c17d59
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,95 @@
+#Thu Feb 04 09:44:24 CET 2010
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+MISSING_EE_DESCRIPTIONS=Warning
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=Disabled
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.core.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..9b2824b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Wed Jan 27 16:42:50 EST 2010
+eclipse.preferences.version=1
+resolve.requirebundle=false
diff --git a/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..9503708
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.server.objectivity/CDOObjyServer.launch b/org.eclipse.emf.cdo.server.objectivity/CDOObjyServer.launch
new file mode 100644
index 0000000..75836e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/CDOObjyServer.launch
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.emf.cdo.server.app"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="true"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="org.eclipse.emf.cdo.server,org.eclipse.emf.cdo.server.db,org.eclipse.net4j,org.eclipse.net4j.db,org.eclipse.net4j.db.derby,org.eclipse.net4j.http.common,org.eclipse.net4j.http.server,org.eclipse.net4j.tcp,org.eclipse.net4j.util"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CDOObjyServer"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../ws-cdo.server"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<mapAttribute key="org.eclipse.debug.core.environmentVariables">
+<mapEntry key="classpath" value="c:\objy10.0\oojava_from_renuka\oojava.jar"/>
+</mapAttribute>
+<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
+<mapEntry key="[run]" value="org.eclipse.pde.ui.RuntimeWorkbench"/>
+</mapAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}&#13;&#10;-debug&#13;&#10;-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#13;&#10;-Xmx1g&#13;&#10;-Ddebug=true&#13;&#10;-Dnet4j.config=&quot;${resource_loc:/org.eclipse.emf.cdo.server.objectivity/rootfiles}&quot;&#13;&#10;-Dorg.eclipse.emf.cdo.server.browser.port=7777&#13;&#10;-Dorg.osgi.service.http.port=8080&#13;&#10;-Dorg.osgi.framework.system.packages.extra=special.parent.package;version=1.0 &#13;&#10;-Dorg.osgi.framework.bootdelegation=none&#10;-Dosgi.console.enable.builtin=true"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.cdo.server.product"/>
+<stringAttribute key="selectedPlugin" value="org.eclipse.emf.cdo"/>
+<stringAttribute key="selected_target_plugins" value="javax.servlet@default:default,javax.xml@default:default,org.apache.log4j@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources.win32.x86_64@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.osgi.compatibility.state@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.cdo.common@default:default,org.eclipse.emf.cdo.ecore.retrofit@default:default,org.eclipse.emf.cdo.examples.hibernate.log4j@default:default,org.eclipse.emf.cdo.net4j@default:default,org.eclipse.emf.cdo.server.db@default:default,org.eclipse.emf.cdo.server.net4j@default:default,org.eclipse.emf.cdo.server.objectivity.stub@default:default,org.eclipse.emf.cdo.server.objectivity@default:default,org.eclipse.emf.cdo.server@default:default,org.eclipse.emf.cdo@default:default,org.eclipse.net4j.db.jdbc@default:default,org.eclipse.net4j.db@default:default,org.eclipse.net4j.tcp@default:default,org.eclipse.net4j.util@default:default,org.eclipse.net4j@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
+<booleanAttribute key="tracing" value="true"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.reading" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.common/perf.revision.writing" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server.db/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.server/debug.types" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.adapter" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.model" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.object" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.repository" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.resource" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.revision" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.session" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.transaction" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.util" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/debug.view" value="true"/>
+<mapEntry key="org.eclipse.emf.cdo/perf" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/perf.revision" value="false"/>
+<mapEntry key="org.eclipse.emf.cdo/perf.revision.loading" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.help.base/debug" value="true"/>
+<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.help/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.chat/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.common/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.buddies/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.derby/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.hsqldb/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db.mysql/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.db/debug.sql" value="true"/>
+<mapEntry key="org.eclipse.net4j.debug/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.examples/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.fileshare.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.fileshare/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.admin/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server.jdbc/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms.server/debug.store" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.jms/debug.protocol" value="true"/>
+<mapEntry key="org.eclipse.net4j.jvm/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.tcp/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.concurrency" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.lifecycle.dump" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.om" value="true"/>
+<mapEntry key="org.eclipse.net4j.util/debug.registry" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.acceptor" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.buffer.stream" value="false"/>
+<mapEntry key="org.eclipse.net4j/debug.channel" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.connector" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.selector" value="true"/>
+<mapEntry key="org.eclipse.net4j/debug.signal" value="true"/>
+<mapEntry key="org.eclipse.net4j/perf" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+</mapAttribute>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.server.objectivity/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.server.objectivity/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2f959b0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.server.objectivity;singleton:=true
+Bundle-Version: 4.0.600.qualifier
+Bundle-Activator: org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM$Activator
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ClassPath: .
+Export-Package: org.eclipse.emf.cdo.server.internal.objectivity;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.bundle;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.clustering;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.db;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.mapper;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.schema;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.internal.objectivity.utils;version="4.0.600";x-friends:="org.eclipse.emf.cdo.tests.objectivity",
+ org.eclipse.emf.cdo.server.objectivity;version="4.0.600"
+Import-Package: com.objy.as;version="[4.0.0,5.0.0)",
+ com.objy.as.app;version="[4.0.0,5.0.0)",
+ com.objy.db;version="[4.0.0,5.0.0)",
+ com.objy.db.app;version="[4.0.0,5.0.0)",
+ com.objy.db.iapp;version="[4.0.0,5.0.0)",
+ com.objy.db.util;version="[4.0.0,5.0.0)",
+ com.objy.pm;version="[4.0.0,5.0.0)"
+Automatic-Module-Name: org.eclipse.emf.cdo.server.objectivity
diff --git a/org.eclipse.emf.cdo.server.objectivity/about.html b/org.eclipse.emf.cdo.server.objectivity/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.server.objectivity/about.ini b/org.eclipse.emf.cdo.server.objectivity/about.ini
new file mode 100644
index 0000000..32006ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText 
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/org.eclipse.emf.cdo.server.objectivity/about.mappings b/org.eclipse.emf.cdo.server.objectivity/about.mappings
new file mode 100644
index 0000000..28e3764
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${build.qualifier}
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.objectivity/about.properties b/org.eclipse.emf.cdo.server.objectivity/about.properties
new file mode 100644
index 0000000..28e40d6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/about.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2010-2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = CDO Model Repository Server Objectivity
+featureText = CDO Model Repository Server Objectivity\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.class
new file mode 100644
index 0000000..c569160
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.class
new file mode 100644
index 0000000..0d96e95
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.class
new file mode 100644
index 0000000..e7486db
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.class
new file mode 100644
index 0000000..6789d1b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.class
new file mode 100644
index 0000000..6a97e1d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.class
new file mode 100644
index 0000000..f804f39
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.class
new file mode 100644
index 0000000..7bfa590
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM$Activator.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM$Activator.class
new file mode 100644
index 0000000..537eb01
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM$Activator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.class
new file mode 100644
index 0000000..ebb9295
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.class
new file mode 100644
index 0000000..232f7ff
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.class
new file mode 100644
index 0000000..9983a36
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.class
new file mode 100644
index 0000000..413180f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.class
new file mode 100644
index 0000000..3b6bbb2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.class
new file mode 100644
index 0000000..7f190e5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.class
new file mode 100644
index 0000000..94471cd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.class
new file mode 100644
index 0000000..2fe70b1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.class
new file mode 100644
index 0000000..b960635
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.class
new file mode 100644
index 0000000..17584ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.class
new file mode 100644
index 0000000..975eb49
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.class
new file mode 100644
index 0000000..3e13ac3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.class
new file mode 100644
index 0000000..01070fd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.class
new file mode 100644
index 0000000..209acf6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.class
new file mode 100644
index 0000000..84c0cae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.class
new file mode 100644
index 0000000..24657c3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.class
new file mode 100644
index 0000000..b908ae6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.class
new file mode 100644
index 0000000..477889a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.class
new file mode 100644
index 0000000..a8e54ea
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.class
new file mode 100644
index 0000000..a7adfe4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.class
new file mode 100644
index 0000000..c0fef79
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.class
new file mode 100644
index 0000000..c3d01a9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.class
new file mode 100644
index 0000000..6bb49e2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.class
new file mode 100644
index 0000000..ba7d994
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.class
new file mode 100644
index 0000000..968f298
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.class
new file mode 100644
index 0000000..8b39b8b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.class
new file mode 100644
index 0000000..7fd710f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.class
new file mode 100644
index 0000000..a37208d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.class
new file mode 100644
index 0000000..b3a35d5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.class
new file mode 100644
index 0000000..5ab3936
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMBoolean.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMBoolean.class
new file mode 100644
index 0000000..d611f52
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMBoolean.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMByte.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMByte.class
new file mode 100644
index 0000000..9deb2c8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMByte.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMChar.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMChar.class
new file mode 100644
index 0000000..8bd7bbe
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMChar.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDate.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDate.class
new file mode 100644
index 0000000..c41a27a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDate.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDouble.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDouble.class
new file mode 100644
index 0000000..6fdc995
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMDouble.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMFloat.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMFloat.class
new file mode 100644
index 0000000..7beef4f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMFloat.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMInteger.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMInteger.class
new file mode 100644
index 0000000..b70b6f2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMLong.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMLong.class
new file mode 100644
index 0000000..3823644
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMLong.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMShort.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMShort.class
new file mode 100644
index 0000000..efe4f84
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper$TMShort.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.class
new file mode 100644
index 0000000..64c74f3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMBoolean.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMBoolean.class
new file mode 100644
index 0000000..358edf3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMBoolean.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMByte.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMByte.class
new file mode 100644
index 0000000..b4afdea
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMByte.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMChar.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMChar.class
new file mode 100644
index 0000000..357ec8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMChar.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDate.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDate.class
new file mode 100644
index 0000000..5bd3af8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDate.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDouble.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDouble.class
new file mode 100644
index 0000000..051a323
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMDouble.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMFloat.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMFloat.class
new file mode 100644
index 0000000..26e2dc1
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMFloat.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMInteger.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMInteger.class
new file mode 100644
index 0000000..15503fd
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMInteger.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMLong.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMLong.class
new file mode 100644
index 0000000..bdeeab9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMLong.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMShort.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMShort.class
new file mode 100644
index 0000000..93149bc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper$TMShort.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.class
new file mode 100644
index 0000000..39c4c3e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.class
new file mode 100644
index 0000000..5a530e4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.class
new file mode 100644
index 0000000..70b0856
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.class
new file mode 100644
index 0000000..9761b97
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.class
new file mode 100644
index 0000000..3b44c62
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.class
new file mode 100644
index 0000000..81de72b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.class
new file mode 100644
index 0000000..0697cee
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.class
new file mode 100644
index 0000000..5955ded
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.class
new file mode 100644
index 0000000..aaf377e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.class
new file mode 100644
index 0000000..9ffc67c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.class
new file mode 100644
index 0000000..ccbe48e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.class
new file mode 100644
index 0000000..a686794
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.class
new file mode 100644
index 0000000..eda06d5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.class
new file mode 100644
index 0000000..5887ddb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.class
new file mode 100644
index 0000000..11a5dd9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.class
new file mode 100644
index 0000000..20418be
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.class
new file mode 100644
index 0000000..d21deb9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.class
new file mode 100644
index 0000000..99f8086
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.class
new file mode 100644
index 0000000..0037f49
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.class
new file mode 100644
index 0000000..22fad9c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.class
new file mode 100644
index 0000000..a9a8e53
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.class
new file mode 100644
index 0000000..b03094e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.class
new file mode 100644
index 0000000..2dd7b79
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.class
new file mode 100644
index 0000000..11f0754
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.class
new file mode 100644
index 0000000..2efb833
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.class
new file mode 100644
index 0000000..69b6b14
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.class
new file mode 100644
index 0000000..2b2c1c0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.class
new file mode 100644
index 0000000..9589f20
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.class
new file mode 100644
index 0000000..041ad1f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.class
new file mode 100644
index 0000000..77bea25
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.class
new file mode 100644
index 0000000..dfa978d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.class
new file mode 100644
index 0000000..138e487
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.class
new file mode 100644
index 0000000..183c603
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/package-info.class b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/package-info.class
new file mode 100644
index 0000000..bc93998
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/bin/org/eclipse/emf/cdo/server/objectivity/package-info.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/build.properties b/org.eclipse.emf.cdo.server.objectivity/build.properties
new file mode 100644
index 0000000..d6b7a03
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/build.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               .options,\
+               about.html,\
+               epl-v10.html,\
+               plugin.xml,\
+               plugin.properties,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               modeling32.png
+src.includes = about.html,\
+               epl-v10.html,\
+               pom.xml
+
+doc.project = org.eclipse.emf.cdo.doc
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.server.objectivity/epl-v10.html b/org.eclipse.emf.cdo.server.objectivity/epl-v10.html
new file mode 100644
index 0000000..d7b88e9
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/epl-v10.html
@@ -0,0 +1,319 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="ProgId" content="Word.Document">
+<meta name="Generator" content="Microsoft Word 9">
+<meta name="Originator" content="Microsoft Word 9">
+<link rel="File-List" href="http://www.eclipse.org/org/documents/Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml"><title>Eclipse Public License - Version 1.0</title><!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+
+
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style></head>
+
+<body style="" lang="EN-US">
+
+<div class="Section1">
+
+<p style="text-align: center;" align="center"><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style="font-size: 10pt;">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style="font-size: 10pt;">1. DEFINITIONS</span></b> </p>
+
+<p><span style="font-size: 10pt;">"Contribution" means:</span> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear="left">
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">i)
+changes to the Program, and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">ii)
+additions to the Program;</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style="font-size: 10pt;">"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style="font-size: 10pt;">"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style="font-size: 10pt;">"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style="font-size: 10pt;">"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style="font-size: 10pt;">2. GRANT OF RIGHTS</span></b> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span style="color: red;"> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style="color: green;"> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style="font-size: 10pt;">3. REQUIREMENTS</span></b> </p>
+
+<p><span style="font-size: 10pt;">A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b)
+its license agreement:</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style="color: blue;"> </span></span></p>
+
+<p><span style="font-size: 10pt;">When the Program is made available in source
+code form:</span> </p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">a)
+it must be made available under this Agreement; and </span></p>
+
+<p class="MsoNormal" style="margin-left: 0.5in;"><span style="font-size: 10pt;">b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style="font-size: 10pt;">Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style="font-size: 10pt;">Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style="font-size: 10pt;">4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style="font-size: 10pt;">Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style="font-size: 10pt;">For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style="font-size: 10pt;">5. NO WARRANTY</span></b> </p>
+
+<p><span style="font-size: 10pt;">EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style="font-size: 10pt;">6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style="font-size: 10pt;">EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style="font-size: 10pt;">7. GENERAL</span></b> </p>
+
+<p><span style="font-size: 10pt;">If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style="font-size: 10pt;">If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style="font-size: 10pt;">All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style="font-size: 10pt;">Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style="font-size: 10pt;">This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class="MsoNormal"><!--[if !supportEmptyParas]-->&nbsp;<!--[endif]--><o:p></o:p></p>
+
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.objectivity/modeling32.png b/org.eclipse.emf.cdo.server.objectivity/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/modeling32.png
Binary files differ
diff --git a/org.eclipse.emf.cdo.server.objectivity/plugin.properties b/org.eclipse.emf.cdo.server.objectivity/plugin.properties
new file mode 100644
index 0000000..2aa48b7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Server Objectivity
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.server.objectivity/plugin.xml b/org.eclipse.emf.cdo.server.objectivity/plugin.xml
new file mode 100644
index 0000000..141026b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+	Copyright (c) 2010, 2012 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+   <extension
+         point="org.eclipse.emf.cdo.server.storeFactories">
+      <storeFactory
+            class="org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreFactory"
+            storeType="objectivity">
+      </storeFactory>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.server.objectivity/pom.xml b/org.eclipse.emf.cdo.server.objectivity/pom.xml
new file mode 100644
index 0000000..4956a56
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017, 2018 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.server.objectivity</artifactId>
+  <version>4.0.600-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.server.objectivity/rootfiles/cdo-server.xml b/org.eclipse.emf.cdo.server.objectivity/rootfiles/cdo-server.xml
new file mode 100644
index 0000000..2dc3e06
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/rootfiles/cdo-server.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cdoServer>
+
+	<!--
+	<acceptor type="http"/>
+	-->
+
+	<acceptor type="tcp" listenAddr="0.0.0.0" port="2036">
+		<!--
+		<negotiator type="challenge" description="/temp/users.db"/>
+		-->
+	</acceptor>
+
+	<repository name="repo1">
+		<!--
+		<property name="overrideUUID" value="1ff5d226-b1f0-40fb-aba2-0c31b38c764f"/>
+		-->
+		<property name="supportingAudits" value="true"/>
+		<property name="supportingBranches" value="false"/>
+		
+		<!--
+			Objectivity store FD configuration, by passing _DEFAULT_ the internal
+			default values will be user, for example, lockserverHost="_DEFAULT_" will use
+			the local host.  
+			For logging, the options are: 
+			   LogNone: no logging.
+			   LogAll : Log session and transaction info.
+			   LogSession : log only session info.
+		-->
+
+		<store type="objectivity">
+			<fdConfig name="test"
+				lockServerHost = "_DEFAULT_"
+				fdDirPath = "c:\data"
+				fdFileHost = "_DEFAULT_"
+				fdNumber = "5555"
+				dbDirPath = "_DEFAULT_"
+				logDirPath = "_DEFAULT_"
+				logOption = "LogNone"
+				pageSize = "_DEFAULT_"
+				SessionMinCacheSize = "600"
+				SessionMaxCacheSize = "1000">
+			</fdConfig>
+		</store>
+	</repository>
+
+</cdoServer>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.java
new file mode 100644
index 0000000..356dfd7
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityFeatureDeltaWriter.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
+import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author Simon McDuff
+ */
+public class ObjectivityFeatureDeltaWriter implements CDOFeatureDeltaVisitor
+{
+  private ObjyObject objyObject = null;
+
+  private EStructuralFeature eFeature = null;
+
+  public ObjectivityFeatureDeltaWriter(ObjyObject objyObject)
+  {
+    this.objyObject = objyObject;
+  }
+
+  public void nextFeature()
+  {
+    eFeature = null;
+  }
+
+  protected void fillStructuralFeature(CDOFeatureDelta delta)
+  {
+    eFeature = delta.getFeature();
+  }
+
+  public void visit(CDOMoveFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    objyObject.move(eFeature, delta.getNewPosition(), delta.getOldPosition());
+
+  }
+
+  public void visit(CDOAddFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    objyObject.add(eFeature, delta.getIndex(), delta.getValue());
+  }
+
+  public void visit(CDORemoveFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    objyObject.remove(eFeature, delta.getIndex());
+  }
+
+  public void visit(CDOSetFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    Object value = delta.getValue();
+    /**
+     * TODO - verify if this is needed for 2.x if (delta.getType()== CDOType.CUSTOM) { value =
+     * EcoreUtil.createFromString((EDataType)eFeature.getEType(), (String)value); }
+     */
+    objyObject.set(eFeature, delta.getIndex(), value);
+  }
+
+  public void visit(CDOUnsetFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    objyObject.unset(eFeature);
+  }
+
+  public void visit(CDOListFeatureDelta deltas)
+  {
+    for (CDOFeatureDelta delta : deltas.getListChanges())
+    {
+      delta.accept(this);
+    }
+  }
+
+  public void visit(CDOClearFeatureDelta delta)
+  {
+    fillStructuralFeature(delta);
+    objyObject.clear(eFeature);
+
+  }
+
+  public void visit(CDOContainerFeatureDelta delta)
+  {
+    objyObject.setEContainer(delta.getContainerID());
+    objyObject.setEContainingFeature(delta.getContainerFeatureID());
+    objyObject.setEResource(delta.getResourceID());
+
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.java
new file mode 100644
index 0000000..9715645
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityQueryHandler.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
+import org.eclipse.emf.cdo.server.IQueryContext;
+import org.eclipse.emf.cdo.server.IQueryHandler;
+
+public class ObjectivityQueryHandler implements IQueryHandler
+{
+
+  public static final String QUERY_LANGUAGE = "OBJY";
+
+  protected ObjectivityStoreAccessor storeAccessor = null;
+
+  public ObjectivityQueryHandler(ObjectivityStoreAccessor storeAccessor)
+  {
+    this.storeAccessor = storeAccessor;
+  }
+
+  public void executeQuery(CDOQueryInfo info, IQueryContext context)
+  {
+    // TODO
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.java
new file mode 100644
index 0000000..7dd5e0e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStore.java
@@ -0,0 +1,401 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.IView;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.clustering.ObjyPlacementManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyCommitInfoHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyConnection;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyPackageHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyPropertyMapHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyScope;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyStoreInfo;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStore;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreConfig;
+import org.eclipse.emf.cdo.spi.server.LongIDStore;
+import org.eclipse.emf.cdo.spi.server.Store;
+import org.eclipse.emf.cdo.spi.server.StoreAccessorPool;
+
+import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.app.Connection;
+import com.objy.db.app.oo;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+public class ObjectivityStore extends Store implements IObjectivityStore
+{
+
+  public static final String TYPE = "objectivity"; // $NON-NLS, DurableLocking-1$
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjectivityStore.class);
+
+  protected ConcurrentLinkedQueue<ObjectivityStoreAccessor> writers = new ConcurrentLinkedQueue<ObjectivityStoreAccessor>();
+
+  @ExcludeFromDump
+  private transient StoreAccessorPool readerPool = new StoreAccessorPool(this, null);
+
+  @ExcludeFromDump
+  private transient StoreAccessorPool writerPool = new StoreAccessorPool(this, null);
+
+  private ObjyConnection objyConnection = null;
+
+  private IObjectivityStoreConfig storeConfig = null;
+
+  private boolean firstTime = false;
+
+  private int nActivate = 0;
+
+  private boolean requiredToSupportAudits;
+
+  private boolean requiredToSupportBranches;
+
+  private ObjyCommitInfoHandler objyCommitInfoHandler = null;
+
+  private ObjyPropertyMapHandler objyPropertyMapHandler = null;
+
+  private ObjyPackageHandler objyPackageHandler = null;
+
+  private boolean storeInitialized = false;
+
+  private long creationTime = CDORevision.UNSPECIFIED_DATE;
+
+  // private boolean resetData = false;
+
+  public ObjectivityStore(IObjectivityStoreConfig config)
+  {
+    // super(TYPE, set(ChangeFormat.REVISION, ChangeFormat.DELTA), set(
+    // RevisionTemporality.NONE, RevisionTemporality.AUDITING),
+    // set(RevisionParallelism.NONE));
+    // setRevisionTemporality(RevisionTemporality.AUDITING);
+    super(TYPE, LongIDStore.OBJECT_ID_TYPES, set(ChangeFormat.REVISION, ChangeFormat.DELTA), set(RevisionTemporality.NONE, RevisionTemporality.AUDITING),
+        set(RevisionParallelism.NONE, RevisionParallelism.BRANCHING));
+    storeConfig = config;
+  }
+
+  private void initStore()
+  {
+    // the caller already used the StoreConfig to open the connection
+    // to the FD so, get the current here.
+    objyConnection = ObjyConnection.INSTANCE;
+    objyConnection.setSessionMinCacheSize(storeConfig.getSessionMinCacheSize());
+    objyConnection.setSessionMaxCacheSize(storeConfig.getSessionMaxCacheSize());
+
+    // -----------------------------------------------------------------------
+    // Initialize schema as needed, and also any other config information
+
+    // connection to the FD.
+    objyConnection.connect(storeConfig);
+    Connection.current().setUserClassLoader(this.getClass().getClassLoader());
+
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyStoreInfo"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageInfo"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageUnit"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyCommitInfo"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProperty"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranch"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranchManager"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyLockArea"); //$NON-NLS-1$
+    objyConnection.registerClass("org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyLockAreaManager"); //$NON-NLS-1$
+
+    ObjySession objySession = objyConnection.getWriteSessionFromPool("Main_" + getRepository().getName()); //$NON-NLS-1$
+    objySession.setRecoveryAutomatic(true);
+    objySession.setOpenMode(oo.openReadWrite); // we are initializing stuff, we need the read/write.
+    objySession.begin();
+
+    ObjySchema.createBaseSchema();
+
+    try
+    {
+      String repositoryName = getRepository().getName();
+      // check if we initialized the store for the first time.
+      {
+        // we have one-to-one mapping between a store and a repository. In Objectivity, we
+        // can still use one federation to store multiple repository, each will have its
+        // own ObjyStoreInfo object in the default container.
+        ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.DEFAULT_CONT_NAME);
+        ObjyStoreInfo objyStoreInfo = null;
+        try
+        {
+          objyStoreInfo = (ObjyStoreInfo)objyScope.lookupObject(ObjyDb.OBJYSTOREINFO_NAME);
+          creationTime = objyStoreInfo.getCreationTime();
+        }
+        catch (Exception ex)
+        {
+          // create the ObjyStoreInfo.
+          objyStoreInfo = new ObjyStoreInfo(System.currentTimeMillis(), "...");
+          objyScope.getContainerObj().cluster(objyStoreInfo);
+          objyScope.nameObj(ObjyDb.OBJYSTOREINFO_NAME, objyStoreInfo);
+
+          // flag as first time.
+          firstTime = true;
+        }
+
+        creationTime = objyStoreInfo.getCreationTime();
+      }
+
+      // This is used for the package storage, it could be lazily done though!!! (verify)
+      // ObjyScope.insureScopeExist(objySession, ObjyDb.CONFIGDB_NAME, ObjyDb.PACKAGESTORE_CONT_NAME);
+
+      // make sure we have the root resource created.
+      // ObjyDb.getOrCreateResourceList();
+      objyCommitInfoHandler = new ObjyCommitInfoHandler(repositoryName);
+      objyPropertyMapHandler = new ObjyPropertyMapHandler(repositoryName);
+      objyPackageHandler = new ObjyPackageHandler(repositoryName);
+
+      // more initializations, this will ensure that we have Manager objects created.
+      objySession.getLockAreaManager(repositoryName);
+      objySession.getBranchManager(repositoryName);
+      objySession.getResourceList(repositoryName);
+
+      objySession.commit();
+
+      storeInitialized = true;
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+      objySession.abort();
+    }
+    finally
+    {
+      objySession.returnSessionToPool();
+    }
+  }
+
+  @Override
+  protected IStoreAccessor createReader(ISession session)
+  {
+    // System.out
+    // .println(">>>>IS:<<<< ObjectivityStore.createRead() - " + (session == null ? "null" : session.toString()));
+    return new ObjectivityStoreAccessor(this, session);
+  }
+
+  @Override
+  protected IStoreAccessor createWriter(ITransaction transaction)
+  {
+    // if (transaction == null)
+    // {
+    // System.out.println(">>>>IS:<<<< ObjectivityStore.createWriter() - transaction: null");
+    // }
+    // else
+    // {
+    // System.out.println(">>>>IS:<<<< ObjectivityStore.createWriter() - "
+    // + (transaction.getSession() == null ? "null" : transaction.getSession().toString()));
+    // }
+    return new ObjectivityStoreAccessor(this, transaction);
+  }
+
+  @Override
+  protected StoreAccessorPool getReaderPool(ISession session, boolean forReleasing)
+  {
+    // return readerPool;
+    return null;
+  }
+
+  @Override
+  protected StoreAccessorPool getWriterPool(IView view, boolean forReleasing)
+  {
+    // return writerPool;
+    return null;
+  }
+
+  @Deprecated
+  public boolean isLocal(CDOID id)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * @since 4.0
+   */
+  public CDOID createObjectID(String val)
+  {
+    Long id = Long.valueOf(val);
+    return CDOIDUtil.createLong(id);
+  }
+
+  public long getCreationTime()
+  {
+    return creationTime;
+  }
+
+  public void setCreationTime(long creationTime)
+  {
+    // TODO: implement ObjectivityStore.setCreationTime(creationTime)
+    throw new UnsupportedOperationException();
+  }
+
+  public boolean isFirstStart()
+  {
+    return firstTime;
+  }
+
+  public ObjyConnection getConnection()
+  {
+    return objyConnection;
+
+  }
+
+  public boolean isRequiredToSupportAudits()
+  {
+    return requiredToSupportAudits;
+  }
+
+  public boolean isRequiredToSupportBranches()
+  {
+    return requiredToSupportBranches;
+  }
+
+  @Override
+  protected void doBeforeActivate()
+  {
+    requiredToSupportAudits = getRepository().isSupportingAudits();
+    requiredToSupportBranches = getRepository().isSupportingBranches();
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    super.doActivate();
+
+    nActivate++;
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("doActivate - count: " + nActivate);
+    }
+
+    // lazy initialization of the store.
+    if (!storeInitialized)
+    {
+      // long tStart = System.currentTimeMillis();
+      initStore();
+      // System.out.println("... ObjyStore initStore() time: " + (System.currentTimeMillis() - tStart));
+    }
+    else
+    {
+      ObjySession objySession = objyConnection.getWriteSessionFromPool("Main_" + getRepository().getName());
+      objySession.setRecoveryAutomatic(true);
+      objySession.begin();
+
+      try
+      {
+        if (!objySession.getFD().hasDB(getRepository().getName()))
+        {
+          // Create the repo DB.
+          ObjyScope.insureScopeExist(objySession, getRepository().getName(), ObjyDb.DEFAULT_CONT_NAME);
+          // ...do other initialisation of the repository here.
+          // Note that in the current implementation we don't delete DBs by default, only delete
+          // the containers (see ObjectivityStoreConfig.resetFD()) so any initialization done here
+          // might not be repeated.
+        }
+
+        objySession.commit();
+      }
+      catch (RuntimeException ex)
+      {
+        objySession.abort();
+      }
+      finally
+      {
+        objySession.returnSessionToPool();
+      }
+    }
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    try
+    {
+      ObjySchema.resetCache();
+      // System.out.println(" -------- doDeactivate() ObjectivityStore ----------");
+    }
+    finally
+    {
+      ObjyConnection.INSTANCE.disconnect();
+      // objyConnection.disconnect();
+    }
+
+    readerPool.dispose();
+    writerPool.dispose();
+    readerPool = null;
+    writerPool = null;
+
+    super.doDeactivate();
+
+  }
+
+  public Map<String, String> getPersistentProperties(Set<String> names)
+  {
+    if (names == null || names.isEmpty())
+    {
+      // Return *all* property values
+
+      // TODO: implement ObjectivityStore.getPropertyValues(names)
+      throw new UnsupportedOperationException();
+    }
+
+    ObjySession objySession = objyConnection.getReadSessionFromPool("Main_" + getRepository().getName());
+    objySession.begin();
+    Map<String, String> properties = objyPropertyMapHandler.getPropertyValues(names);
+    objySession.commit();
+    return properties;
+  }
+
+  public void setPersistentProperties(Map<String, String> properties)
+  {
+    ObjySession objySession = objyConnection.getWriteSessionFromPool("Main_" + getRepository().getName());
+    objySession.begin();
+    objyPropertyMapHandler.setPropertyValues(properties);
+    objySession.commit();
+  }
+
+  public void removePersistentProperties(Set<String> names)
+  {
+    ObjySession objySession = objyConnection.getWriteSessionFromPool("Main_" + getRepository().getName());
+    objySession.begin();
+    objyPropertyMapHandler.removePropertyValues(names);
+    objySession.commit();
+  }
+
+  public ObjyCommitInfoHandler getCommitInfoHandler()
+  {
+    return objyCommitInfoHandler;
+  }
+
+  public ObjyPackageHandler getPackageHandler()
+  {
+    return objyPackageHandler;
+  }
+
+  public ObjyPlacementManager getGlobalPlacementManager()
+  {
+    // return ObjyConnection.INSTANCE.getDefaultPlacementManager();
+    return objyConnection.getDefaultPlacementManager();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java
new file mode 100644
index 0000000..05820b5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreAccessor.java
@@ -0,0 +1,1947 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lob.CDOLobHandler;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionCacheAdder;
+import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
+import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
+import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
+import org.eclipse.emf.cdo.server.IQueryHandler;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.IStoreAccessor.DurableLocking;
+import org.eclipse.emf.cdo.server.ITransaction;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.clustering.ObjyPlacementManagerLocal;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyCommitInfoHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObjectManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyPackageHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBase;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranch;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranchManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyCommitInfo;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyLockAreaManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyResourceList;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.SmartLock;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreAccessor;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreChunkReader;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
+import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+import org.eclipse.emf.cdo.spi.common.revision.DetachedCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.spi.server.InternalSessionManager;
+import org.eclipse.emf.cdo.spi.server.StoreAccessor;
+
+import org.eclipse.net4j.util.ObjectUtil;
+import org.eclipse.net4j.util.collection.Pair;
+import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+import org.eclipse.net4j.util.om.monitor.OMMonitor.Async;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import com.objy.db.LockNotGrantedException;
+import com.objy.db.app.oo;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * @author Simon McDuff
+ * @author Ibrahim Sallam
+ */
+public class ObjectivityStoreAccessor extends StoreAccessor implements IObjectivityStoreAccessor, DurableLocking
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjectivityStoreAccessor.class);
+
+  private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjectivityStoreAccessor.class);
+
+  protected ObjySession objySession = null;
+
+  // protected ObjyObjectManager objectManager = null;
+
+  protected boolean isRead = false;
+
+  protected int sessionID = 0; // used to tag the Objy session in the session pool
+
+  boolean zipped = true; // TODO - might make this configurable...
+
+  private Map<CDOID, ObjyObject> newObjyObjectsMap = CDOIDUtil.createMap();
+
+  private long readRevisionTime = 0;
+
+  private int readRevisionCount = 0;
+
+  protected ObjectivityStoreAccessor(ObjectivityStore store, ISession cdoSession)
+  {
+    super(store, cdoSession);
+
+    // for debugging...
+    // session.getProtocol();
+    // org.eclipse.emf.cdo.net4j.CDOSession.Options.getProtocol()
+    // [12:42:23 PM] Eike Stepper says: org.eclipse.net4j.signal.ISignalProtocol.setTimeout(long)
+    // [12:42:43 PM] Eike Stepper says: commit is different
+    // if (cdoSession != null && cdoSession.getProtocol().getSession() instanceof org.eclipse.emf.cdo.net4j.CDOSession)
+    // {
+    // CDOCommonSession commonSession = cdoSession.getProtocol().getSession();
+    // org.eclipse.emf.cdo.net4j.CDOSession tempSession = (org.eclipse.emf.cdo.net4j.CDOSession)commonSession;
+    // tempSession.options().setCommitTimeout(60000);
+    // }
+    // [12:42:45 PM] Eike Stepper says: org.eclipse.emf.cdo.net4j.CDOSession.Options.setCommitTimeout(int)
+    // org.eclipse.emf.cdo.net4j.CDOSession.Options.setProgressInterval(int)
+
+    /* I believe this is a read session */
+    isRead = true;
+    if (cdoSession != null)
+    {
+      sessionID = cdoSession.getSessionID();
+    }
+  }
+
+  public ObjectivityStoreAccessor(ObjectivityStore store, ITransaction transaction)
+  {
+    super(store, transaction);
+
+    // for debugging...
+    // if (transaction != null && transaction.getSession().getProtocol().getSession() instanceof
+    // org.eclipse.emf.cdo.net4j.CDOSession)
+    // {
+    // CDOCommonSession commonSession = transaction.getSession().getProtocol().getSession();
+    // org.eclipse.emf.cdo.net4j.CDOSession cdoSession = (org.eclipse.emf.cdo.net4j.CDOSession)commonSession;
+    // cdoSession.options().setCommitTimeout(60000);
+    // }
+    /* I believe this is a write session */
+    if (transaction != null)
+    {
+      sessionID = transaction.getSession().getSessionID();
+    }
+  }
+
+  @Override
+  protected void detachObjects(CDOID[] detachedObjects, CDOBranch branch, long timeStamp, OMMonitor monitor)
+  {
+    ensureSessionBegin();
+
+    // System.out.println(">>>>IS:<<< detachObjects() " + this + " - objy session: " + objySession.toString());
+    // objySession.addToLog("IS:>>>", "detachObjects - begin");
+
+    try
+    {
+      monitor.begin(detachedObjects.length);
+      // Find all Objy containers to lock as one unit.
+      Set<ooId> containerToLocks = new HashSet<ooId>();
+      for (CDOID id : detachedObjects)
+      {
+        ooId containerID = OBJYCDOIDUtil.getContainerId(id);
+        containerToLocks.add(containerID);
+      }
+      objySession.lockContainers(containerToLocks);
+
+      InternalCDORevisionManager revisionManager = getStore().getRepository().getRevisionManager();
+
+      long tStart = System.currentTimeMillis();
+      for (CDOID id : detachedObjects)
+      {
+
+        InternalCDORevision revision = revisionManager.getRevision(id, branch.getHead(), CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true);
+        int version = ObjectUtil.equals(branch, revision.getBranch()) ? revision.getVersion() : CDOBranchVersion.FIRST_VERSION;
+
+        detachObject(id, version, branch, timeStamp);
+      }
+      // objySession.addToLog("IS:>>>", "detachObjects - end");
+      long tDiff = System.currentTimeMillis() - tStart;
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("detach objects: " + detachedObjects.length + " - time: " + tDiff);
+      }
+
+    }
+    finally
+    {
+      monitor.done();
+    }
+
+    // System.out.println(">>>>IS:<<< detachObjects() DONE " + this + " - objy session: " + objySession.toString());
+  }
+
+  /***
+   * @param CDOID
+   * @param version
+   * @param branch
+   * @param timeStamp
+   */
+  private void detachObject(CDOID id, int version, CDOBranch branch, long timeStamp)
+  {
+    // ensureSessionBegin();
+
+    ObjyObject objyObject = getObject(id);
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Detaching id " + id + " - OID: " + objyObject.ooId().getStoreString() + " verions: " + version + " in Branch: " + branch.getID()
+          + " and timeStamp: " + timeStamp);
+    }
+
+    if (getStore().isRequiredToSupportAudits())
+    {
+      if (version > CDOBranchVersion.FIRST_VERSION)
+      {
+        // pick the proper version of that branch to revise it. Otherwise, the detached version will
+        // be in a different branch.
+        ObjyObject objyRevision = objyObject.getRevisionByVersion(version, branch.getID(), objySession.getObjectManager());
+        if (objyRevision.getVersion() < 0)
+        {
+          TRACER_DEBUG.trace("... OBJ is already detached...");
+        }
+        objyRevision.setRevisedTime(timeStamp - 1);
+      }
+      objyObject.detach(version, branch, timeStamp);
+    }
+    else
+    {
+      objyObject.setVersion(-version);
+      objyObject.delete(this, objySession.getObjectManager());
+    }
+
+    // // we'll need to find it's containing object/resource and remove it from there.
+    // // TODO - do we need to deal with dependent objects, i.e. delete them as well,
+    // // is there a notion of delete propagate?
+    // if (ObjySchema.isResource(getStore(), objyObject.objyClass()))
+    // {
+    // ObjyResourceList resourceList = objySession.getResourceList(getRepositoryName());
+    // resourceList.remove(objyObject);
+    // }
+    objySession.getObjectManager().remove(objyObject); // removed it from the cache.
+  }
+
+  @Override
+  protected void doActivate() throws Exception
+  {
+    // System.out.println(">>>>IS:<<<< StoreAccessor.doActivate() " + this);
+    // getObjySession();
+  }
+
+  public ObjySession getObjySession()
+  {
+    int currSessionID = sessionID;
+
+    if (!isReader())
+    {
+      // The only reason we do this is because there was a switching of context in the middle
+      // of a transaction, and we want to ensure that we continue with the proper session that
+      // is holding the data.
+      ITransaction cdoTrx = getTransaction();
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("getObjySession() - context's transaction: " + (cdoTrx == null ? "null" : cdoTrx.toString()));
+      }
+      if (cdoTrx != null)
+      {
+        sessionID = cdoTrx.getSession().getSessionID();
+      }
+    }
+
+    if (objySession != null && currSessionID == sessionID)
+    {
+      return objySession;
+    }
+
+    // get a session name.
+    String sessionName = "Session_" + sessionID;
+
+    if (objySession != null)
+    {
+      objySession.returnSessionToPool();
+    }
+    if (isReader())
+    {
+      objySession = getStore().getConnection().getReadSessionFromPool(sessionName + "_" + getRepositoryName());
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("  getObjySession from read pool, session: " + objySession.toString() + " - isOpen: " + objySession.isOpen() + " - sessionName:"
+            + objySession.getName());
+      }
+    }
+    else
+    {
+      objySession = getStore().getConnection().getWriteSessionFromPool(sessionName + "_" + getRepositoryName());
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("  getObjySession from write pool, session: " + objySession.toString() + " - isOpen: " + objySession.isOpen() + " - sessionName:"
+            + objySession.getName());
+      }
+    }
+
+    if (!objySession.isOpen())
+    {
+      objySession.setMrowMode(oo.MROW);
+      objySession.setWaitOption(45000);
+      objySession.setAllowUnregisterableTypes(true);
+      if (isRead)
+      {
+        objySession.setOpenMode(oo.openReadOnly);
+      }
+      else
+      {
+        objySession.setOpenMode(oo.openReadWrite);
+      }
+      objySession.begin();
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("     calling session.begin() for " + objySession.toString() + " - isRead: " + isRead);
+      }
+    }
+    else
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("     session " + objySession.toString() + " already open.");
+      }
+    }
+
+    return objySession;
+  }
+
+  private void returnObjySession()
+  {
+    // System.out.println(">>>>IS:<<<< Returning to pool, session: " + objySession + " - name: " +
+    // objySession.getName());
+    ensureSessionJoin();
+    // testDetachWithoutRevision_CheckMainBranch() is crashing because objySession is null.
+    // TBD: verify this case!!!
+    if (objySession == null)
+    {
+      return;
+    }
+
+    if (objySession.isOpen())
+    {
+      // System.out.println(">>>>IS:<<<< commiting session: " + objySession + " - name: " + objySession.getName());
+      objySession.commit(); // IS: we might need to abort instead.
+    }
+    objySession.returnSessionToPool();
+    objySession = null;
+  }
+
+  @Override
+  protected void doDeactivate() throws Exception
+  {
+    // System.out.println(">>>>IS:<<< StoreAccessor.doDeactivate() " + this);
+    returnObjySession();
+  }
+
+  @Override
+  protected void doPassivate() throws Exception
+  {
+    // System.out.println(">>>>IS:<<<< StoreAccessor.doPassivate() " + this);
+    returnObjySession();
+  }
+
+  @Override
+  protected void doUnpassivate() throws Exception
+  {
+    // System.out.println(">>>>IS:<<<< StoreAccessor.doUnpassivate() " + this);
+    // IS: don't call this now, in case we don't have a context.
+    // getObjySession();
+  }
+
+  // @Override
+  // protected void setContext(Object context)
+  // {
+  // super.setContext(context);
+  // System.out.println(">>>>IS:<<<< StoreAccessor.setContext() " + this + " - context: " + context.toString());
+  // }
+
+  @Override
+  protected void doRollback(CommitContext commitContext)
+  {
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Rollback session " + objySession);
+      }
+      // the rollback could be coming from another thread.
+      ensureSessionJoin();
+      if (objySession.isOpen())
+      {
+        objySession.abort();
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("OBJY: session aborted - Session: " + objySession + " - open:" + objySession.isOpen());
+        }
+      }
+    }
+    catch (RuntimeException exception)
+    {
+      TRACER_INFO.trace(exception.getMessage(), exception);
+      exception.printStackTrace();
+      throw exception;
+    }
+  }
+
+  @Override
+  protected void writeRevisionDeltas(InternalCDORevisionDelta[] revisionDeltas, CDOBranch branch, long created, OMMonitor monitor)
+  {
+    // System.out.println(">>>>IS:<<< writeRevisionDeltas() " + this + " - objy session: " + objySession.toString());
+    long start = System.nanoTime();
+    ensureSessionBegin();
+
+    try
+    {
+      monitor.begin(revisionDeltas.length);
+      // Find all Objy containers to lock as one unit.
+      Set<ooId> containerToLocks = new HashSet<ooId>();
+      for (InternalCDORevisionDelta delta : revisionDeltas)
+      {
+        ooId containerID = OBJYCDOIDUtil.getContainerId(delta.getID());
+        containerToLocks.add(containerID);
+      }
+      objySession.lockContainers(containerToLocks);
+
+      for (InternalCDORevisionDelta revisionDelta : revisionDeltas)
+      {
+        writeRevisionDelta(revisionDelta, branch, created);
+      }
+    }
+    finally
+    {
+      monitor.done();
+    }
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace(" writeRevisionDeltas: " + revisionDeltas.length + " - time: " + (System.nanoTime() - start) / 1000000.0);
+    }
+  }
+
+  /**
+   * Called for each revision delta.
+   *
+   * @param delta
+   * @param created
+   * @param branch
+   */
+  // private void writeRevisionDelta2(InternalCDORevisionDelta delta, CDOBranch branch, long created)
+  // {
+  // // ensureSessionBegin();
+  //
+  // int deltaVersion = delta.getVersion();
+  // int newVersion = CDOBranchVersion.FIRST_VERSION;
+  //
+  // ObjyObject objyObject = getObject(delta.getID());
+  // if (TRACER_DEBUG.isEnabled())
+  // {
+  // TRACER_DEBUG.format("writingRevisionDelta getting Object: {0}, v:{1} - BranchId:{2}", objyObject.ooId()
+  // .getStoreString(), deltaVersion, delta.getBranch().getID());
+  // }
+  // ObjyObject objyOriginalRevision = objyObject.getRevisionByVersion(deltaVersion, delta.getBranch().getID(),
+  // objySession.getObjectManager());
+  //
+  // if (branch.getID() == delta.getBranch().getID())
+  // {
+  // // Same branch, increase version
+  // newVersion = deltaVersion + 1;
+  // }
+  //
+  // if (TRACER_DEBUG.isEnabled())
+  // {
+  // TRACER_DEBUG.format("Writing revision delta: {0}, v:{1} - OID:{2}, v:{3} - BranchId:{4}", delta, deltaVersion,
+  // objyObject.ooId().getStoreString(), objyOriginalRevision.getVersion(), objyOriginalRevision.getBranchId());
+  // TRACER_DEBUG.format("... delta branch ID: {0} - revision branch ID: {1}", branch.getID(),
+  // objyOriginalRevision.getBranchId());
+  // }
+  // // System.out.println(">>>IS: Delta Writing: " + delta.getID() + " - oid: " + objyObject.ooId().getStoreString());
+  // // System.out.println("\t - old version : " + delta.getVersion());
+  // // System.out.println("\t - created : " + created);
+  // // System.out.println("\t - delta.branch: " + delta.getBranch().toString());
+  // // System.out.println("\t - branch : " + branch.toString());
+  // // System.out.println("\t - branch TS : " + branch.getPoint(created).getTimeStamp());
+  // // System.out.println("\t - delta : " + delta.toString());
+  // // for debugging...
+  //
+  // if (objyOriginalRevision.getVersion() != deltaVersion)
+  // {
+  // throw new RuntimeException("ObjecitivityStoreAccessor : Dirty write");
+  // }
+  //
+  // ObjyObject objyNewRevision = null;
+  //
+  // if (getStore().isRequiredToSupportAudits())
+  // {
+  // // newObjyRevision = objySession.getObjectManager().copyRevision(this, objyRevision);
+  // // objyRevision.setRevisedBranchId(branch.getID();
+  // // InternalCDORevision originalRevision = getStore().getRepository().getRevisionManager()
+  // // .getRevisionByVersion(delta.getID(), delta, 0, true);
+  // InternalCDORevision originalRevision = getStore().getRepository().getRevisionManager()
+  // .getRevisionByVersion(delta.getID(), delta.getBranch().getVersion(deltaVersion), 0, true);
+  //
+  // // 100917-IS: KISS - InternalCDORevision newRevision = originalRevision.copy();
+  //
+  // // 100917-IS: KISS - newRevision.setVersion(deltaVersion + 1);
+  // // 100917-IS: KISS - newRevision.setBranchPoint(delta.getBranch().getPoint(created));
+  // // 100917-IS: KISS - newObjyRevision = objySession.getObjectManager().newObject(newRevision.getEClass(),
+  // // objyRevision.ooId());
+  // // 100917-IS: KISS - objyNewRevision.update(this, newRevision);
+  //
+  // // create a new object, fill it with the original revision data, then
+  // // modify the creation and the branch ID accordingly.
+  // objyNewRevision = objySession.getObjectManager().newObject(originalRevision.getEClass(),
+  // objyOriginalRevision.ooId());
+  // objyNewRevision.update(this, originalRevision);
+  // objyNewRevision.setBranchId(delta.getBranch().getID());
+  // // the following are done at the end.
+  // // objyNewRevision.setVersion(deltaVersion + 1);
+  // // objyNewRevision.setCreationTime(created);
+  //
+  // objyObject.addToRevisions(objyNewRevision);
+  //
+  // if (getStore().isRequiredToSupportBranches() /* && branch.getID() != CDOBranch.MAIN_BRANCH_ID */)
+  // {
+  // // add the newObjyRevision to the proper branch.
+  // ObjyBranch objyBranch = objySession.getBranchManager(getRepositoryName()).getBranch(branch.getID());
+  // ooObj anObj = ooObj.create_ooObj(objyNewRevision.ooId());
+  // objyBranch.addRevision(anObj);
+  // }
+  // if (newVersion > CDORevision.FIRST_VERSION)
+  // {
+  // // revise the original revision last, otherwise we can end up with the revised date in the new revision.
+  // objyOriginalRevision.setRevisedTime(branch.getPoint(created).getTimeStamp() - 1);
+  // }
+  // }
+  // else
+  // {
+  // objyNewRevision = objyOriginalRevision;
+  // }
+  //
+  // ObjectivityFeatureDeltaWriter visitor = new ObjectivityFeatureDeltaWriter(objyNewRevision);
+  //
+  // delta.accept(visitor);
+  //
+  // objyNewRevision.setCreationTime(branch.getPoint(created).getTimeStamp());
+  // objyNewRevision.setVersion(newVersion); // TODO - verify with Eike if this is true!!!
+  // }
+
+  /**
+   * Called for each revision delta.
+   *
+   * @param delta
+   * @param created
+   * @param branch
+   */
+  private void writeRevisionDelta(InternalCDORevisionDelta delta, CDOBranch branch, long created)
+  {
+    // ensureSessionBegin();
+
+    int deltaVersion = delta.getVersion();
+    int newVersion = CDOBranchVersion.FIRST_VERSION;
+
+    ObjyObject objyObject = getObject(delta.getID());
+    TRACER_DEBUG.format("writingRevisionDelta getting Object: {0}, v:{1} - BranchId:{2}", objyObject.ooId().getStoreString(), deltaVersion,
+        delta.getBranch().getID());
+    ObjyObject objyOriginalRevision = objyObject.getRevisionByVersion(deltaVersion, delta.getBranch().getID(), objySession.getObjectManager());
+
+    if (branch.getID() == delta.getBranch().getID())
+    {
+      // Same branch, increase version
+      newVersion = deltaVersion + 1;
+    }
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("Writing revision delta: {0}, v:{1} - OID:{2}, v:{3} - BranchId:{4}", delta, deltaVersion, objyObject.ooId().getStoreString(),
+          objyOriginalRevision.getVersion(), objyOriginalRevision.getBranchId());
+      TRACER_DEBUG.format("... delta branch ID: {0} - revision branch ID: {1}", branch.getID(), objyOriginalRevision.getBranchId());
+    }
+    // System.out.println(">>>IS: Delta Writing: " + delta.getID() + " - oid: " + objyObject.ooId().getStoreString());
+    // System.out.println("\t - old version : " + delta.getVersion());
+    // System.out.println("\t - created : " + created);
+    // System.out.println("\t - delta.branch: " + delta.getBranch().toString());
+    // System.out.println("\t - branch : " + branch.toString());
+    // System.out.println("\t - branch TS : " + branch.getPoint(created).getTimeStamp());
+    // System.out.println("\t - delta : " + delta.toString());
+    // for debugging...
+
+    if (objyOriginalRevision.getVersion() != deltaVersion)
+    {
+      throw new RuntimeException("ObjecitivityStoreAccessor : Dirty write");
+    }
+
+    ObjyObject objyNewRevision = null;
+
+    if (getStore().isRequiredToSupportAudits())
+    {
+
+      ObjyObject objyObjectCopy = objySession.getObjectManager().copyRevision(this, objyOriginalRevision);
+      TRACER_DEBUG.format("  created new object:{0} by copying object:{1} - v:{2} - newBranch:{3}", objyObjectCopy.ooId().getStoreString(),
+          objyOriginalRevision.ooId().getStoreString(), objyOriginalRevision.getVersion(), branch.getID());
+
+      // // newObjyRevision = objySession.getObjectManager().copyRevision(this, objyRevision);
+      // // objyRevision.setRevisedBranchId(branch.getID();
+      // InternalCDORevision originalRevision = getStore().getRepository().getRevisionManager()
+      // .getRevisionByVersion(delta.getID(), delta, CDORevision.UNCHUNKED, true);
+      //
+      // // 100917-IS: KISS - InternalCDORevision newRevision = originalRevision.copy();
+      //
+      // // 100917-IS: KISS - newRevision.setVersion(deltaVersion + 1);
+      // // 100917-IS: KISS - newRevision.setBranchPoint(delta.getBranch().getPoint(created));
+      // // 100917-IS: KISS - objyNewRevision = objySession.getObjectManager().newObject(newRevision.getEClass(),
+      // // objyOriginalRevision.ooId());
+      // // 100917-IS: KISS - objyNewRevision.update(this, newRevision);
+      //
+      // // create a new object, fill it with the original revision data, then
+      // // modify the creation and the branch ID accordingly.
+      // objyNewRevision = objySession.getObjectManager().newObject(originalRevision.getEClass(),
+      // objyOriginalRevision.ooId());
+      // objyNewRevision.update(this, originalRevision);
+      objyNewRevision = objyObjectCopy;
+      objyNewRevision.setBranchId(branch.getID());
+      // the following are done at the end.
+      // objyNewRevision.setVersion(deltaVersion + 1);
+      // objyNewRevision.setCreationTime(created);
+
+      objyObject.addToRevisions(objyNewRevision);
+
+      if (getStore().isRequiredToSupportBranches() /* && branch.getID() != CDOBranch.MAIN_BRANCH_ID */)
+      {
+        // add the newObjyRevision to the proper branch.
+        ObjyBranch objyBranch = objySession.getBranchManager(getRepositoryName()).getBranch(branch.getID());
+        ooObj anObj = ooObj.create_ooObj(objyNewRevision.ooId());
+        objyBranch.addRevision(anObj);
+      }
+      // revise the original revision last, otherwise we can end up with the revised date in the new revision.
+      // IS: it seems that in CDO 4.0 we don't need to do that anymore!!
+      if (newVersion > CDORevision.FIRST_VERSION)
+      {
+        objyOriginalRevision.setRevisedTime(branch.getPoint(created).getTimeStamp() - 1);
+      }
+    }
+    else
+    {
+      objyNewRevision = objyOriginalRevision;
+    }
+
+    ObjectivityFeatureDeltaWriter visitor = new ObjectivityFeatureDeltaWriter(objyNewRevision);
+
+    delta.accept(visitor);
+
+    objyNewRevision.setCreationTime(branch.getPoint(created).getTimeStamp());
+    objyNewRevision.setVersion(newVersion); // TODO - verify with Eike if this is true!!!
+  }
+
+  @Override
+  public ObjectivityStore getStore()
+  {
+    return (ObjectivityStore)super.getStore();
+  }
+
+  /**
+   * It seems that it will be called for both new objects and dirty objects.
+   */
+  @Override
+  protected void writeRevisions(InternalCDORevision[] revisions, CDOBranch branch, OMMonitor monitor)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      ObjyObjectManager.getObjectTime = 0;
+      ObjyObjectManager.updateObjectTime = 0;
+      ObjyObjectManager.resourceCheckAndUpdateTime = 0;
+    }
+    long start = System.nanoTime();
+    ensureSessionBegin();
+    // objySession.addToLog("IS:>>>", "writeRevisions - begin");
+    try
+    {
+      monitor.begin(revisions.length);
+      // Find all Objy containers to lock as one unit.
+      Set<ooId> containersToLock = new HashSet<ooId>();
+      for (InternalCDORevision revision : revisions)
+      {
+        ooId containerID = OBJYCDOIDUtil.getContainerId(revision.getID());
+        containersToLock.add(containerID);
+      }
+      // containersToLock.add(objySession.getBranchManager(getRepositoryName()).getContainer().getOid());
+      // lockContainers(containersToLock);
+      // long tStart = System.currentTimeMillis();
+      for (InternalCDORevision revision : revisions)
+      {
+        writeRevision(revision, monitor.fork());
+      }
+      // long tDiff = System.currentTimeMillis() - tStart;
+      // System.out.println(">>> IS: writing revisions: " + revisions.length + " - time: " + tDiff);
+    }
+    finally
+    {
+      newObjyObjectsMap.clear();
+      monitor.done();
+    }
+    // objySession.addToLog("IS:>>>", "writeRevisions - end");
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace(" writeRevisions: " + revisions.length + " - time: " + (System.nanoTime() - start) / 1000000.0);
+      // TRACER_DEBUG.trace(" getObjectTime: " + ObjyObjectManager.getObjectTime / 1000000.0);
+      // TRACER_DEBUG.trace(" updateObjectTime: " + ObjyObjectManager.updateObjectTime / 1000000.0);
+      // TRACER_DEBUG.trace(" resourceCheckAndUpdateTime: " + ObjyObjectManager.resourceCheckAndUpdateTime /
+      // 1000000.0);
+      // ObjyObjectManager.getObjectTime = 0;
+      // ObjyObjectManager.updateObjectTime = 0;
+      // ObjyObjectManager.resourceCheckAndUpdateTime = 0;
+    }
+
+  }
+
+  /**
+   * return an ObjyObject that represent the CDOID base.
+   */
+  public ObjyObject getObject(CDOID id)
+  {
+    ObjyObject objyObject = objySession.getObjectManager().getObject(id);
+    // make sure we get the base one and not any cached version.
+    return objyObject.getBaseObject();
+  }
+
+  /*****
+   * Use this code for heart beat. Async async = null; try { monitor.begin(getListMappings().size() + 1); async =
+   * monitor.forkAsync(); reviseObject(accessor, id, timeStamp); } finally { async.stop(); monitor.done(); } [10:07:02
+   * AM] Eike Stepper: that one takes care that the heartbeat goes on [10:07:13 AM] Eike Stepper: for indefinite time
+   */
+
+  private void writeRevision(InternalCDORevision revision, OMMonitor monitor)
+  {
+    Async async = null;
+
+    try
+    {
+      monitor.begin(1000); // IS: experimental.
+      async = monitor.forkAsync();
+
+      // EClass eClass = revision.getEClass();
+      long __start = System.nanoTime();
+      // ObjyObject objyObject = getObject(revision.getID());
+      ObjyObject objyObject = newObjyObjectsMap.get(revision.getID());
+      if (objyObject == null)
+      {
+        objyObject = getObject(revision.getID()); // we shouldn't need to come here.
+      }
+      ObjyObjectManager.getObjectTime += System.nanoTime() - __start;
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("Writing revision: {0} - OID: {1}", revision, objyObject.ooId().getStoreString()); //$NON-NLS-1$
+      }
+
+      // System.out.println(">>>IS: Writing: " + revision.getID() + " - oid: " + objyObject.ooId().getStoreString());
+      // System.out.println("\t - version : " + revision.getVersion());
+      // System.out.println("\t - timestamp : " + revision.getTimeStamp());
+      // System.out.println("\t - revised : " + revision.getRevised());
+      // System.out.println("\t - resourceId : " + revision.getResourceID());
+      // System.out.println("\t - containerId: " + revision.getContainerID());
+      // System.out.println("\t - branch : " + revision.getBranch().toString());
+      // System.out.println("\t - revision : " + revision.toString());
+
+      ObjyObject newObjyRevision = objyObject;
+
+      if (revision.getVersion() > CDOBranchVersion.FIRST_VERSION) // we're updating other versions...
+      {
+        // TRACER_DEBUG.format("...Updating other revisions using writeRevision()...");
+        ObjyObject oldObjyRevision = objyObject.getRevisionByVersion(revision.getVersion() - 1, revision.getBranch().getID(), objySession.getObjectManager());
+
+        if (oldObjyRevision == null)
+        {
+          new IllegalStateException("Revision with version: " + (revision.getVersion() - 1) + " is not in the store."); //$NON-NLS-1$
+        }
+        if (getStore().isRequiredToSupportAudits())
+        {
+          // if we allow versioning, then create a new one here.
+          // IS: I'm not sure if we'll be called here we always go to the writeRevisionDelta call.
+          newObjyRevision = objySession.getObjectManager().newObject(revision.getEClass(), oldObjyRevision.ooId());
+          objyObject.addToRevisions(newObjyRevision);
+
+        }
+        else
+        {
+          newObjyRevision = oldObjyRevision;
+        }
+      }
+
+      if (getStore().isRequiredToSupportBranches())
+      {
+        // add the newObjyRevision to the proper branch.
+        ObjyBranch objyBranch = objySession.getBranchManager(getRepositoryName()).getBranch(revision.getBranch().getID());
+        ooObj anObj = ooObj.create_ooObj(newObjyRevision.ooId());
+        try
+        {
+          objyBranch.addRevision(anObj);
+        }
+        catch (LockNotGrantedException ex)
+        {
+          ex.printStackTrace();
+        }
+      }
+
+      __start = System.nanoTime();
+      newObjyRevision.update(this, revision);
+      ObjyObjectManager.updateObjectTime += System.nanoTime() - __start;
+
+      // if it's a resource, collect it.
+      if (revision.isResourceNode())
+      {
+        __start = System.nanoTime();
+        // TODO - this is temp solution to lock the common resource list
+        // Add resource to the list
+        ObjyResourceList resourceList = objySession.getResourceList(getRepositoryName());
+        ooObj anObj = (ooObj)objySession.getFD().objectFrom(resourceList.ooId());
+        SmartLock.lock(anObj.getContainer());
+
+        // before we update the data into the object we need to check
+        // if it's a resource and we're trying to add a duplicate.
+        // TODO - do we need to check for Folder and resouce, or is the isResourceNode()
+        // check is enough?!!!
+        if (revision.isResourceFolder() || revision.isResource())
+        {
+          // this call will throw exception if we have a duplicate resource we trying to add.
+          resourceList.checkDuplicateResources(this, revision);
+        }
+        SmartLock.lock(newObjyRevision);
+        try
+        {
+          resourceList.add(newObjyRevision);
+        }
+        catch (LockNotGrantedException ex)
+        {
+          ex.printStackTrace();
+        }
+        ObjyObjectManager.resourceCheckAndUpdateTime += System.nanoTime() - __start;
+      }
+    }
+    finally
+    {
+      async.stop();
+      monitor.done();
+    }
+  }
+
+  @Override
+  protected void doCommit(OMMonitor monitor)
+  {
+    // System.out.println(">>>>IS:<<< doCommit() " + this + " - objy session: " + objySession.toString());
+
+    long start = System.currentTimeMillis();
+    Async async = null;
+    monitor.begin();
+
+    try
+    {
+      try
+      {
+        async = monitor.forkAsync();
+        // The commit request might come from a different thread.
+        ensureSessionJoin();
+
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("Committing ..." + objySession + " nc:" + objySession.nestCount());
+        }
+        if (objySession.isOpen() == true)
+        {
+          objySession.commit();
+        }
+        else
+        {
+          TRACER_DEBUG.trace("Error: calling objySession.commit() without having an open trx.");
+        }
+
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("Committed");
+        }
+      }
+      finally
+      {
+        if (async != null)
+        {
+          async.stop();
+        }
+      }
+    }
+    catch (RuntimeException exception)
+    {
+      TRACER_INFO.trace(exception.getMessage(), exception);
+      exception.printStackTrace();
+      throw exception;
+    }
+    finally
+    {
+      monitor.done();
+    }
+
+    // 100920 - IS: for debugging
+    if (TRACER_DEBUG.isEnabled())
+    {
+      // TRACER_DEBUG.trace("doCommit() - new objects created: " + ObjyObjectManager.newObjCount + " - Internal: "
+      // + ObjyObjectManager.newInternalObjCount);
+      // ObjyObjectManager.newObjCount = 0;
+      // ObjyObjectManager.newInternalObjCount = 0;
+      TRACER_DEBUG.trace(" readRvisions: " + readRevisionCount + " - time: " + readRevisionTime / 1000000.0);
+      TRACER_DEBUG.trace(" fetchCount: " + ObjyObject.fetchCount + " - updateCount: " + ObjyObject.updateCount);
+      TRACER_DEBUG.trace("\t commit time: " + (System.currentTimeMillis() - start));
+      readRevisionTime = 0;
+      readRevisionCount = 0;
+      ObjyObject.fetchCount = 0;
+      ObjyObject.updateCount = 0;
+    }
+    // System.out.println("IS:>>> ObjyObject.ctor(): count " + ObjyObject.count + " - totalTime: " + ObjyObject.tDiff);
+    // for (ooId oid : ObjyObject.oids)
+    // {
+    // System.out.println("<" + oid.getStoreString() + "> ");
+    // }
+    // System.out.println();
+    // ObjyObject.count = 0;
+    // ObjyObject.tDiff = 0;
+    // ObjyObject.oids.clear();
+  }
+
+  public IObjectivityStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature)
+  {
+    return new ObjectivityStoreChunkReader(this, revision, feature);
+  }
+
+  public EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)
+  {
+    // using the packageUnit.getID() we'll read the object from the FD and get the bytes.
+    byte[] bytes = null;
+
+    ensureSessionBegin();
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("loadPackageUnit for: {0}", packageUnit.getID()); //$NON-NLS-1$
+    }
+
+    ObjyPackageHandler objyPackageHandler = getStore().getPackageHandler();
+
+    bytes = objyPackageHandler.readPackageBytes(packageUnit);
+
+    EPackage ePackage = createEPackage(packageUnit, bytes);
+
+    return EMFUtil.getAllPackages(ePackage);
+  }
+
+  private EPackage createEPackage(InternalCDOPackageUnit packageUnit, byte[] bytes)
+  {
+    ResourceSet resourceSet = EMFUtil.newEcoreResourceSet(getPackageRegistry());
+    return EMFUtil.createEPackage(packageUnit.getID(), bytes, zipped, resourceSet, false);
+  }
+
+  private CDOPackageRegistry getPackageRegistry()
+  {
+    return getStore().getRepository().getPackageRegistry();
+  }
+
+  /**
+   * TODO - 1) make sure that we return the root resource when we asked for "null" pathPrefix. 2) Create the "null"
+   * resource folder if it doesn't exist, perhaps when we initialize the store.
+   */
+  public void queryResources(QueryResourcesContext context)
+  {
+    ensureSessionBegin();
+
+    String pathPrefix = context.getName();
+    boolean exactMatch = context.exactMatch();
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("queryResources() for : " + (pathPrefix == null ? "NULL" : pathPrefix) + " - exactMatch: " + exactMatch);
+    }
+    ObjyResourceList resourceList = objySession.getResourceList(getRepositoryName());
+    int size = resourceList.size();
+    if (size == 0) // nothing yet.
+    {
+      CDOID resourceID = OBJYCDOIDUtil.getCDOID(null);
+      context.addResource(resourceID);
+    }
+
+    // TBD: We need to verify the folderID as well!!
+    // CDOID folderID = org.eclipse.emf.cdo.common.id.CDOIDUtil.isNull(context.getFolderID()) ? null : context
+    // .getFolderID();
+    for (int i = 0; i < size; i++)
+    {
+      ObjyObject resource = resourceList.getResource(i);
+      if (resource != null)
+      {
+        ObjyObject resourceRevision = resource;
+        // get the proper revision of the resource (might need to refactor this code, see readRevision())
+        if (getStore().isRequiredToSupportBranches())
+        {
+          try
+          {
+            resourceRevision = resource.getRevision(context.getTimeStamp(), context.getBranch().getID(), objySession.getObjectManager());
+          }
+          catch (RuntimeException ex)
+          {
+            ex.printStackTrace();
+          }
+
+        }
+        else if (getStore().isRequiredToSupportAudits())
+        {
+          try
+          {
+            resourceRevision = resource.getRevision(context.getTimeStamp(), CDOBranch.MAIN_BRANCH_ID, objySession.getObjectManager());
+          }
+          catch (RuntimeException ex)
+          {
+            ex.printStackTrace();
+          }
+        }
+
+        if (resourceRevision == null || resourceRevision.getVersion() < 0)
+        {
+          continue;
+        }
+
+        String resourceName = ObjyResourceList.getResourceName(resourceRevision);
+        CDOID resourceID = OBJYCDOIDUtil.getCDOID(resource.ooId());
+        if (exactMatch && pathPrefix != null && pathPrefix.equals(resourceName) || pathPrefix == null && resourceName == null)
+        {
+          if (!context.addResource(resourceID))
+          {
+            if (TRACER_DEBUG.isEnabled())
+            {
+              TRACER_DEBUG.format("   queryResources(1.1) got: " + resource.ooId().getStoreString() + " - version: " + resource.getVersion());
+            }
+            // No more results allowed
+            break; // don't continue
+          }
+        }
+        else if (!exactMatch && resourceName != null)
+        {
+          if (resourceName.startsWith(pathPrefix))
+          {
+            context.addResource(resourceID);
+            if (TRACER_DEBUG.isEnabled())
+            {
+              TRACER_DEBUG.format("   queryResources(1.2) got: " + resource.ooId().getStoreString() + " - version: " + resource.getVersion());
+            }
+          }
+        }
+        /***
+         * TODO - verify if we need this code, originally from the old impl. CDOID lookupFolderID = (CDOID)
+         * objectManager.getEContainer(resource); if (ObjectUtil.equals(lookupFolderID, folderID)) { boolean match =
+         * exactMatch || pathPrefix == null; if (match) { CDOID resourceID = CDOIDUtil.getCDOID(resource.ooId()); if
+         * (!context.addResource(resourceID)) { break; } } }
+         ***/
+      }
+    }
+
+  }
+
+  public void queryXRefs(QueryXRefsContext context)
+  {
+    ensureSessionBegin();
+
+    Set<CDOID> targetIDs = context.getTargetObjects().keySet();
+    Map<EClass, List<EReference>> sourceCandidates = context.getSourceCandidates();
+
+    // get the context branch.
+    CDOBranch branch = context.getBranch();
+    ObjyBranchManager branchManager = objySession.getBranchManager(getRepositoryName());
+    ObjyBranch objyBranch = branchManager.getBranch(branch.getID());
+
+    // iterate over all revision in a branch.
+    ObjyObject objyObject = null;
+    SortedSet<?> revisions = objyBranch.getRevisions();
+    for (Object anObj : revisions)
+    {
+      // the ooObj we get from revisions is the correct one for that branch.
+      objyObject = objySession.getObjectManager().getObject(((ooObj)anObj).getOid());
+
+      // InternalCDORevision revision = getRevision(list, context);
+      // if (revision == null || revision instanceof SyntheticCDORevision)
+      // {
+      // continue;
+      // }
+      //
+      EClass eClass = ObjySchema.getEClass(getStore(), objyObject.objyClass());
+      CDOID sourceID = objyObject.getRevisionId();
+
+      List<EReference> eReferences = sourceCandidates.get(eClass);
+      if (eReferences != null)
+      {
+        for (EReference eReference : eReferences)
+        {
+          if (eReference.isMany())
+          {
+            List<Object> results = objyObject.fetchList(this, eReference, 0, CDORevision.UNCHUNKED);
+            if (results != null)
+            {
+              try
+              {
+                int index = 0;
+                for (Object id : results)
+                {
+                  if (!queryXRefs(context, targetIDs, (CDOID)id, sourceID, eReference, index++))
+                  {
+                    return;
+                  }
+                }
+              }
+              catch (Exception ex)
+              {
+                ex.printStackTrace();
+              }
+            }
+          }
+          else
+          {
+            Object value = objyObject.get(eReference);
+            CDOID id = (CDOID)value;
+            if (!queryXRefs(context, targetIDs, id, sourceID, eReference, 0))
+            {
+              return;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  private boolean queryXRefs(QueryXRefsContext context, Set<CDOID> targetIDs, CDOID targetID, CDOID sourceID, EReference sourceReference, int index)
+  {
+    for (CDOID id : targetIDs)
+    {
+      if (id.equals(targetID))
+      {
+        if (!context.addXRef(targetID, sourceID, sourceReference, index))
+        {
+          // No more results allowed
+          return false;
+        }
+      }
+    }
+
+    return true;
+  }
+
+  /**
+   * Read all package units from the store. It's the opposite of writePackageUnits
+   */
+  public Collection<InternalCDOPackageUnit> readPackageUnits()
+  {
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("readPackageUnits()"); //$NON-NLS-1$
+    }
+
+    ensureSessionBegin();
+
+    ObjyPackageHandler objyPackageHandler = getStore().getPackageHandler();
+
+    Collection<InternalCDOPackageUnit> packageUnits = objyPackageHandler.readPackageUnits();
+
+    return packageUnits;
+  }
+
+  /**
+   *
+   */
+  public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, CDORevisionCacheAdder cache)
+  {
+    long __start = System.nanoTime();
+    ensureSessionBegin();
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("RR - Read rev for: {0}, TS:{1}", id, branchPoint.getTimeStamp()); //$NON-NLS-1$
+    }
+
+    // we shouldn't be doing this!!!
+    if (id instanceof CDOIDExternal)
+    {
+      // 100917 - IS: This must be a bug in CDO, it's throwing a CDOIDExternal at us
+      // we'll return null.
+      // TRACER_DEBUG.format("objy can't read revision for CDOID: {0}, it's external.", id.toString());
+      TRACER_DEBUG.trace("objy can't read revision for external CDOID: " + id.toString());
+      return null;
+    }
+
+    // we might have a proxy object!!!!
+
+    ObjyObject objyObject = getObject(id);
+
+    if (objyObject == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("RR - objyObject is NULL 4 ID:" + id); //$NON-NLS-1$
+      }
+      return null;
+    }
+    // else
+    // {
+    // TRACER_DEBUG.format("RR - objyObject is ID:" + id + ", :" + objyObject.ooId().getStoreString()); //$NON-NLS-1$
+    // }
+
+    InternalCDORevision revision = createRevision(objyObject, id);
+    revision.setBranchPoint(branchPoint);
+
+    ObjyObject objyRevision = objyObject;
+
+    if (getStore().isRequiredToSupportBranches())
+    {
+      try
+      {
+        objyRevision = objyObject.getRevision(branchPoint.getTimeStamp(), branchPoint.getBranch().getID(), objySession.getObjectManager());
+        if (objyRevision == null)
+        {
+          TRACER_DEBUG.format("RR - branches ID:{0}, OB:{1}, BPB:{2}, BPTS:{3}", id, objyObject.getBranchId(), //$NON-NLS-1$
+              branchPoint.getBranch().getID(), branchPoint.getTimeStamp());
+        }
+      }
+      catch (RuntimeException ex)
+      {
+        ex.printStackTrace();
+      }
+    }
+    else if (getStore().isRequiredToSupportAudits())
+    {
+      try
+      {
+        objyRevision = objyObject.getRevision(branchPoint.getTimeStamp(), CDOBranch.MAIN_BRANCH_ID, objySession.getObjectManager());
+        if (objyRevision == null)
+        {
+          TRACER_DEBUG.format("RR - audit ID:{0}, OB:{1}, BPB:{2}, BPTS:{3}", id, objyObject.getBranchId(), //$NON-NLS-1$
+              branchPoint.getBranch().getID(), branchPoint.getTimeStamp());
+        }
+      }
+      catch (RuntimeException ex)
+      {
+        ex.printStackTrace();
+      }
+
+    }
+
+    if (objyRevision == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("RR - objyRevision is NULL 4 ID:" + id); //$NON-NLS-1$
+      }
+      return null;
+    }
+
+    // check the version
+    if (objyRevision.getVersion() < 0)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("RR - ...revision for: {0} - OID: {1} is detached.", id, //$NON-NLS-1$
+            objyObject.ooId().getStoreString());
+      }
+      EClass eClass = ObjySchema.getEClass(getStore(), objyObject.objyClass());
+      return new DetachedCDORevision(eClass, id, branchPoint.getBranch(), -objyRevision.getVersion(), objyRevision.getCreationTime());
+    }
+
+    CDOBranchPoint branchPoint2 = revision.getBranch().getPoint(objyRevision.getCreationTime());
+    revision.setBranchPoint(branchPoint2);
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("RR - Fetching revision details for: {0} - OID:{1}", id, //$NON-NLS-1$
+          objyRevision.ooId().getStoreString());
+    }
+
+    boolean ok = objyRevision.fetch(this, revision, listChunk);
+
+    if (!ok)
+    {
+      TRACER_DEBUG.format("RR - Fetch rev failed 4: {0}, :{1}", id, objyRevision.ooId().getStoreString()); //$NON-NLS-1$
+    }
+
+    readRevisionTime += System.nanoTime() - __start;
+    readRevisionCount++;
+
+    return ok ? revision : null;
+  }
+
+  /**
+   *
+   */
+  public InternalCDORevision readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk, CDORevisionCacheAdder cache)
+  {
+    long __start = System.nanoTime();
+    ensureSessionBegin();
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("RRBV - Read rev 4: {0}, ver: {1}", id, branchVersion.getVersion()); //$NON-NLS-1$
+    }
+
+    // we might have a proxy object!!!!
+
+    ObjyObject objyObject = getObject(id);
+    if (objyObject == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("RRBV - objyObject is NULL for ID: " + id); //$NON-NLS-1$
+      }
+      return null;
+    }
+
+    // {
+    // TRACER_DEBUG.format("RRBV - objyObject 4 ID: " + id + ", :" + objyObject.ooId().getStoreString()); //$NON-NLS-1$
+    // }
+
+    ObjyObject objyRevision = null;
+    objyRevision = objyObject.getRevisionByVersion(branchVersion.getVersion(), branchVersion.getBranch().getID(), objySession.getObjectManager());
+    // if (getStore().isRequiredToSupportAudits())
+    // {
+    // objyRevision = objyObject.getRevisionByVersion(branchVersion.getVersion());
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("Reading revision by version {0} for: {1} - OID: {2}", branchVersion.getVersion(), id, //$NON-NLS-1$
+          objyObject.ooId().getStoreString());
+    }
+
+    // }
+    // else
+    // {
+    // objyRevision = objyObject.getLastRevision();
+    //
+    // if (TRACER_DEBUG.isEnabled())
+    // {
+    // TRACER_DEBUG.format(
+    // "(None-Audit) Reading revision by version for: {0} - OID: {1}", id, objyObject.ooId().getStoreString());
+    // //$NON-NLS-1$
+    // }
+    // }
+
+    if (objyRevision == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.format("RRBV - objyRevision is NULL for ID: ", id); //$NON-NLS-1$
+      }
+      return null;
+    }
+
+    InternalCDORevision revision = createRevision(objyRevision, id);
+
+    revision.setVersion(branchVersion.getVersion());
+    revision.setBranchPoint(branchVersion.getBranch().getHead());
+
+    // TODO - clean up the following 3 lines...
+    // InternalCDOBranchManager branchManager = getStore().getRepository().getBranchManager();
+    // CDOBranch mainBranch = branchManager.getBranch(CDOBranch.MAIN_BRANCH_ID);
+    // //revision.setBranchPoint(CDOBranchUtil.createBranchPoint(mainBranch, 0));
+    // revision.setBranchPoint(mainBranch.getHead());
+
+    boolean ok = objyRevision.fetch(this, revision, listChunk);
+
+    if (ok && objyRevision.getVersion() != branchVersion.getVersion())
+    {
+      throw new IllegalStateException("Can only retrieve current version " + revision.getVersion() + " for " + //$NON-NLS-1$ //$NON-NLS-2$
+          id + " - version requested was " + branchVersion + "."); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
+    // if (!ok)
+    // {
+    // TRACER_DEBUG.format("RRBV - Fetch rev failed 4: {0}, :", id, objyRevision.ooId().getStoreString()); //$NON-NLS-1$
+    // }
+
+    readRevisionTime += System.nanoTime() - __start;
+    readRevisionCount++;
+
+    return ok ? revision : null;
+  }
+
+  public void writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("writePackageUnits()"); //$NON-NLS-1$
+    }
+
+    ensureSessionBegin();
+
+    ObjyPackageHandler objyPackageHandler = getStore().getPackageHandler();
+    CDOPackageRegistry packageRegistry = getStore().getRepository().getPackageRegistry();
+
+    for (InternalCDOPackageUnit packageUnit : packageUnits)
+    {
+      objyPackageHandler.writePackages(packageRegistry, packageUnit, monitor/* .fork() */);
+    }
+  }
+
+  private InternalCDORevision createRevision(ObjyObject objyObject, CDOID id)
+  {
+    EClass eClass = ObjySchema.getEClass(getStore(), objyObject.objyClass());
+
+    if (eClass == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("OBJY: Can't find eClass for id:" + id);
+      }
+      return null;
+    }
+
+    return getStore().createRevision(eClass, id);
+  }
+
+  private String getRepositoryName()
+  {
+    return getStore().getRepository().getName();
+  }
+
+  /***
+   * For us, this function creates the skeleton objects in Objectivity, to be able to get the new ooId and pass it to
+   * the commitContext. The objects data will be updated in the call to writeRevision().
+   */
+  @Override
+  public void addIDMappings(InternalCommitContext commitContext, OMMonitor monitor)
+  {
+    long __start = System.nanoTime();
+    ensureSessionBegin();
+    if (commitContext.getNewObjects().length > 0)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("creating " + commitContext.getNewObjects().length + " new objects and assigning new IDs");
+      }
+      InternalCDORevision[] newObjects = commitContext.getNewObjects();
+      try
+      {
+        monitor.begin(newObjects.length);
+
+        ObjyPlacementManagerLocal placementManager = new ObjyPlacementManagerLocal(getStore(), objySession, commitContext, newObjyObjectsMap);
+
+        // iterate over the list and skip the ones we already have created.
+        for (InternalCDORevision revision : newObjects)
+        {
+          try
+          {
+            placementManager.processRevision(revision);
+          }
+          catch (com.objy.db.ObjyRuntimeException ex)
+          {
+            System.out.println(">>>>IS: Exception<<<< Session: " + objySession + " open status: " + objySession.isOpen());
+            ex.printStackTrace();
+          }
+          monitor.worked();
+        }
+      }
+      finally
+      {
+        monitor.done();
+      }
+    }
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace(" addIDMappings for " + commitContext.getNewObjects().length + " - time: " + (System.nanoTime() - __start) / 1000000.0);
+      TRACER_DEBUG.trace("  createObjects : " + ObjyObject.createObjectCount + " - time: " + ObjyObject.createObjectTime / 1000000.0);
+      ObjyObject.createObjectTime = 0;
+      ObjyObject.createObjectCount = 0;
+    }
+  }
+
+  @Override
+  protected CDOID getNextCDOID(CDORevision revision)
+  {
+    // Never called
+    throw new UnsupportedOperationException();
+  }
+
+  /***************************
+   * Local Utility functions.
+   ***************************/
+  public void ensureActiveSession()
+  {
+    ensureSessionBegin();
+  }
+
+  protected void ensureSessionBegin()
+  {
+    getObjySession();
+    if (!objySession.isJoined())
+    {
+      objySession.join();
+    }
+    if (!objySession.isOpen())
+    {
+      if (isRead)
+      {
+        objySession.setOpenMode(oo.openReadOnly);
+      }
+      else
+      {
+        objySession.setOpenMode(oo.openReadWrite);
+      }
+      objySession.begin();
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace(
+            " ensureBeginSession() called begin() on session: " + objySession + " [name: " + objySession.getName() + " - open: " + objySession.isOpen() + "]");
+      }
+    }
+  }
+
+  private void ensureSessionJoin()
+  {
+    // we better have a session for this store.
+    assert objySession != null;
+    // testSwitchViewTarget() is crashing because objySession is null.
+    // TBD: verify this case!!!
+    if (objySession != null && !objySession.isJoined())
+    {
+      objySession.join();
+    }
+  }
+
+  // *********************************************
+  // New APIs for CDO 3.0
+  // *********************************************
+
+  public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler)
+  {
+    ensureSessionBegin();
+
+    ObjyCommitInfoHandler commitInfoHandler = getStore().getCommitInfoHandler();
+    List<ObjyCommitInfo> commitInfoList = commitInfoHandler.getCommitInfo(branch, startTime, endTime);
+
+    InternalSessionManager manager = getSession().getManager();
+    InternalRepository repository = manager.getRepository();
+    InternalCDOBranchManager branchManager = repository.getBranchManager();
+    InternalCDOCommitInfoManager commitInfoManager = repository.getCommitInfoManager();
+
+    for (ObjyCommitInfo ooCommitInfo : commitInfoList)
+    {
+      long timeStamp = ooCommitInfo.getTimeStamp();
+      long previousTimeStamp = ooCommitInfo.getPreviousTimeStamp();
+      String userID = ooCommitInfo.getUserId();
+      String comment = ooCommitInfo.getComment();
+      CDOBranch infoBranch = branch;
+      if (infoBranch == null)
+      {
+        int id = ooCommitInfo.getBranchId();
+        infoBranch = branchManager.getBranch(id);
+      }
+
+      CDOCommitInfo commitInfo = commitInfoManager.createCommitInfo(infoBranch, timeStamp, previousTimeStamp, userID, comment, null, null);
+      handler.handleCommitInfo(commitInfo);
+    }
+
+  }
+
+  @SuppressWarnings("deprecation")
+  @Override
+  protected void writeCommitInfo(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    ensureSessionBegin();
+    // we need to write the following...
+    // ...branch.getID(), timeStamp, userID, comment.
+    try
+    {
+      ObjyCommitInfoHandler commitInfoHandler = getStore().getCommitInfoHandler();
+      commitInfoHandler.writeCommitInfo(branch.getID(), timeStamp, previousTimeStamp, userID, comment);
+    }
+    catch (com.objy.db.ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public IQueryHandler getQueryHandler(org.eclipse.emf.cdo.common.util.CDOQueryInfo info)
+  {
+    if (ObjectivityQueryHandler.QUERY_LANGUAGE.equals(info.getQueryLanguage()))
+    {
+      return new ObjectivityQueryHandler(this);
+    }
+
+    return null;
+  }
+
+  public Pair<Integer, Long> createBranch(int branchID, BranchInfo branchInfo)
+  {
+    ensureSessionBegin();
+    boolean convertToUpdate = false;
+    // IS: this is a hack to overcome the issue in cdo core where the Accessor is requested for
+    // read but it's trying to create stuff.
+    if (isRead)
+    {
+      TRACER_DEBUG.trace("-->> createBranch() - Hack... Hack... changing read to update.");
+      // upgrade the session to update.
+      objySession.commit();
+      objySession.setOpenMode(oo.openReadWrite);
+      convertToUpdate = true;
+      objySession.begin();
+    }
+    Pair<Integer, Long> retValue = objySession.getBranchManager(getRepositoryName()).createBranch(branchID, branchInfo);
+    if (convertToUpdate)
+    {
+      // return the session to read.
+      objySession.commit();
+      objySession.setOpenMode(oo.openReadOnly);
+      objySession.begin();
+    }
+    return retValue;
+  }
+
+  public BranchInfo loadBranch(int branchID)
+  {
+    ensureSessionBegin();
+    ObjyBranch objyBranch = objySession.getBranchManager(getRepositoryName()).getBranch(branchID);
+    return objyBranch != null ? objyBranch.getBranchInfo() : null;
+  }
+
+  public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler)
+  {
+    int count = 0;
+    List<ObjyBranch> branches = objySession.getBranchManager(getRepositoryName()).getBranches(startID, endID);
+    InternalCDOBranchManager branchManager = getStore().getRepository().getBranchManager();
+
+    for (ObjyBranch objyBranch : branches)
+    {
+      InternalCDOBranch branch = branchManager.getBranch(objyBranch.getBranchId(),
+          new BranchInfo(objyBranch.getBranchName(), objyBranch.getBaseBranchId(), objyBranch.getBaseBranchTimeStamp()));
+      branchHandler.handleBranch(branch);
+      count++;
+    }
+
+    return count;
+
+  }
+
+  public SubBranchInfo[] loadSubBranches(int branchID)
+  {
+    ensureSessionBegin();
+    List<SubBranchInfo> result = new ArrayList<SubBranchInfo>();
+    List<ObjyBranch> objyBranchList = objySession.getBranchManager(getRepositoryName()).getSubBranches(branchID);
+    for (ObjyBranch objyBranch : objyBranchList)
+    {
+      SubBranchInfo subBranchInfo = new SubBranchInfo(objyBranch.getBranchId(), objyBranch.getBranchName(), objyBranch.getBaseBranchTimeStamp());
+      result.add(subBranchInfo);
+    }
+    return result.toArray(new SubBranchInfo[result.size()]);
+  }
+
+  public void handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler)
+  {
+    ensureSessionBegin();
+    IRepository repository = getStore().getRepository();
+    CDORevisionManager revisionManager = repository.getRevisionManager();
+    CDOBranchManager branchManager = repository.getBranchManager();
+
+    // scan FD for ObjyBase which is the base class for all revisions
+    Iterator<?> itr = objySession.getFD().scan(ObjyBase.CLASS_NAME);
+    ObjyObject objyObject = null;
+    while (itr.hasNext())
+    {
+      objyObject = objySession.getObjectManager().getObject(((ooObj)itr).getOid());
+      if (!handleRevision(objyObject, eClass, branch, timeStamp, exactTime, handler, revisionManager, branchManager))
+      {
+        return;
+      }
+    }
+    // TODO: implement ObjectivityStoreAccessor.handleRevisions(eClass, branch, timeStamp, exactTime, handler)
+    throw new UnsupportedOperationException();
+  }
+
+  private boolean handleRevision(ObjyObject objyObject, EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler,
+      CDORevisionManager revisionManager, CDOBranchManager branchManager)
+  {
+    if (objyObject.getVersion() < 0) // DetachedCDORevision
+    {
+      return true;
+    }
+
+    if (eClass != null && ObjySchema.getEClass(getStore(), objyObject.objyClass()) != eClass)
+    {
+      return true;
+    }
+
+    if (branch != null && objyObject.getBranchId() != branch.getID())
+    {
+      return true;
+    }
+
+    if (timeStamp != CDOBranchPoint.INVALID_DATE)
+    {
+      if (exactTime)
+      {
+        if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE && objyObject.getCreationTime() != timeStamp)
+        {
+          return true;
+        }
+      }
+      else
+      {
+        long startTime = objyObject.getCreationTime();
+        long endTime = objyObject.getRevisedTime();
+        if (!CDOCommonUtil.isValidTimeStamp(timeStamp, startTime, endTime))
+        {
+          return true;
+        }
+      }
+    }
+
+    CDOBranchVersion branchVersion = branchManager.getBranch((int)objyObject.getBranchId()).getVersion(Math.abs(objyObject.getVersion()));
+    InternalCDORevision revision = (InternalCDORevision)revisionManager.getRevisionByVersion(OBJYCDOIDUtil.getCDOID(objyObject.ooId()), branchVersion,
+        CDORevision.UNCHUNKED, true);
+
+    return handler.handleRevision(revision);
+  }
+
+  public Set<CDOID> readChangeSet(OMMonitor monitor, CDOChangeSetSegment... segments)
+  {
+    monitor.begin(segments.length);
+
+    try
+    {
+      ensureSessionBegin();
+
+      ObjyBranchManager objyBranchManager = objySession.getBranchManager(getRepositoryName());
+      ObjyObjectManager objyObjectManager = objySession.getObjectManager();
+      Set<CDOID> results = new HashSet<CDOID>();
+
+      // get all revisions that has branchId, and creation timestamp, and perhaps revised before
+      // end timestamp or haven't been revised.
+      for (CDOChangeSetSegment segment : segments)
+      {
+        ObjyBranch objyBranch = objyBranchManager.getBranch(segment.getBranch().getID());
+        // query the branch revisions for the time range.
+        SortedSet<?> revisions = objyBranch.getRevisions();
+        readChangeSet(monitor.fork(), segment, objyObjectManager, revisions, results);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ChangeSet " + results.toString());
+      }
+
+      return results;
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  protected void readChangeSet(OMMonitor monitor, CDOChangeSetSegment segment, ObjyObjectManager objyObjectManager, SortedSet<?> revisions, Set<CDOID> results)
+  {
+    int size = revisions.size();
+    monitor.begin(size);
+    Async async = null;
+    try
+    {
+      async = monitor.forkAsync();
+
+      Iterator<?> objItr = revisions.iterator();
+      while (objItr.hasNext())
+      {
+        ooObj anObj = (ooObj)objItr.next();
+        ObjyObject objyObject = objyObjectManager.getObject(anObj.getOid());
+        long creationTime = objyObject.getCreationTime();
+        long revisedTime = objyObject.getRevisedTime();
+        if (creationTime >= segment.getTimeStamp() && (revisedTime <= segment.getEndTime() || revisedTime == 0))
+        {
+          results.add(objyObject.getRevisionId());
+        }
+
+        monitor.worked();
+      }
+    }
+    finally
+    {
+      async.stop();
+      monitor.done();
+
+    }
+  }
+
+  public void queryLobs(List<byte[]> ids)
+  {
+    // TODO: implement ObjectivityStoreAccessor.queryLobs(ids)
+    throw new UnsupportedOperationException();
+  }
+
+  public void handleLobs(long fromTime, long toTime, CDOLobHandler handler) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.handleLobs(fromTime, toTime, handler)
+    throw new UnsupportedOperationException();
+  }
+
+  public void loadLob(byte[] id, OutputStream out) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.loadLob(id, out)
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  protected void writeBlob(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.writeBlob(id, size, inputStream)
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  protected void writeClob(byte[] id, long size, Reader reader) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.writeClob(id, size, reader)
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawExport(CDODataOutput out, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawExport();
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawImport(CDODataInput in, int fromBranchID, int toBranchID, long fromCommitTime, long toCommitTime, OMMonitor monitor) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawImport
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawStore
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(InternalCDORevision revision, OMMonitor monitor)
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawStore
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(byte[] id, long size, InputStream inputStream) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawStore
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(byte[] id, long size, Reader reader) throws IOException
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawStore
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawStore(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, OMMonitor monitor)
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawStore
+    throw new UnsupportedOperationException();
+  }
+
+  @Deprecated
+  public void rawDelete(CDOID id, int version, CDOBranch branch, EClass eClass, OMMonitor monitor)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public void rawCommit(double commitWork, OMMonitor monitor)
+  {
+    // TODO: implement ObjectivityStoreAccessor.rawCommit
+    throw new UnsupportedOperationException();
+  }
+
+  public LockArea createLockArea(String userID, CDOBranchPoint branchPoint, boolean readOnly, Map<CDOID, LockGrade> locks)
+  {
+    // TODO: implement ObjectivityStoreAccessor.createLockArea
+    throw new UnsupportedOperationException();
+  }
+
+  public LockArea getLockArea(String durableLockingID) throws LockAreaNotFoundException
+  {
+    // TODO: implement ObjectivityStoreAccessor.getLockArea
+    throw new UnsupportedOperationException();
+  }
+
+  public void getLockAreas(String userIDPrefix, Handler handler)
+  {
+    ensureSessionBegin();
+
+    InternalCDOBranchManager branchManager = getStore().getRepository().getBranchManager();
+    ObjyLockAreaManager objyLockAreaManager = objySession.getLockAreaManager(getRepositoryName());
+    objyLockAreaManager.getLockAreas(branchManager, userIDPrefix, handler);
+  }
+
+  public void deleteLockArea(String durableLockingID)
+  {
+    // TODO: implement ObjectivityStoreAccessor.deleteLockArea
+    throw new UnsupportedOperationException();
+  }
+
+  public void lock(String durableLockingID, LockType type, Collection<? extends Object> objectsToLock)
+  {
+    // TODO: implement ObjectivityStoreAccessor.lock
+    throw new UnsupportedOperationException();
+  }
+
+  public void unlock(String durableLockingID, LockType type, Collection<? extends Object> objectsToUnlock)
+  {
+    // TODO: implement ObjectivityStoreAccessor.unlock
+    throw new UnsupportedOperationException();
+  }
+
+  public void unlock(String durableLockingID)
+  {
+    // TODO: implement ObjectivityStoreAccessor.unlock
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.java
new file mode 100644
index 0000000..a6bbb4b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreChunkReader.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreChunkReader;
+import org.eclipse.emf.cdo.spi.server.StoreChunkReader;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import java.util.List;
+
+public class ObjectivityStoreChunkReader extends StoreChunkReader implements IObjectivityStoreChunkReader
+{
+  public ObjectivityStoreChunkReader(IStoreAccessor accessor, CDORevision revision, EStructuralFeature feature)
+  {
+    super(accessor, revision, feature);
+    // TODO Auto-generated constructor stub
+  }
+
+  @Override
+  public ObjectivityStoreAccessor getAccessor()
+  {
+    return (ObjectivityStoreAccessor)super.getAccessor();
+  }
+
+  public List<Chunk> executeRead()
+  {
+    CDOID id = getRevision().getID();
+    getAccessor().ensureActiveSession();
+    ObjyObject objyObject = getAccessor().getObject(id);
+    ObjyObject objyRevision = objyObject.getRevisionByVersion(getRevision().getVersion(), getRevision().getBranch().getID(),
+        getAccessor().getObjySession().getObjectManager());
+
+    List<Chunk> chunks = getChunks();
+
+    for (Chunk chunk : chunks)
+    {
+      int chunkStartIndex = chunk.getStartIndex();
+      int chunkSize = chunk.size();
+
+      // get the data from the feature.
+      List<Object> objects = objyRevision.fetchList(getAccessor(), getFeature(), chunkStartIndex, chunkSize);
+      // although we asked for a chunkSize we might get less.
+      int i = 0;
+      for (Object obj : objects)
+      {
+        chunk.add(i++, obj);
+      }
+    }
+    return chunks;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.java
new file mode 100644
index 0000000..92fda8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreConfig.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.FdManager;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreConfig;
+
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import com.objy.db.app.Connection;
+import com.objy.db.app.oo;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class ObjectivityStoreConfig extends Lifecycle implements IObjectivityStoreConfig
+{
+  private static final long serialVersionUID = 1L;
+
+  FdManager fdManager = new FdManager();
+
+  private int sessionMinCacheSize = 0;
+
+  private int sessionMaxCacheSize = 0;
+
+  private int logOption = oo.LogNone;
+
+  public ObjectivityStoreConfig()
+  {
+    // fdManager.deleteFD();
+    fdManager.configure();
+  }
+
+  public ObjectivityStoreConfig(Element storeConfig)
+  {
+    // for now we'll just call the default configuration...
+    getFdProperties(storeConfig);
+    fdManager.configure();
+  }
+
+  public ObjectivityStoreConfig(String name)
+  {
+    // create an FD with that name.
+    fdManager.configure(name);
+  }
+
+  @Override
+  public void doActivate()
+  {
+    // System.out.println("ObjectivityStoreConfig.doActivate()");
+    fdManager.deleteFD();
+    fdManager.configure();
+  }
+
+  @Override
+  public void doDeactivate()
+  {
+    fdManager.deleteFD();
+  }
+
+  public String getFdName()
+  {
+    return fdManager.getFd();
+  }
+
+  public void resetFD()
+  {
+    if (Connection.current() == null)
+    {
+      return;
+    }
+
+    fdManager.removeData();
+  }
+
+  private void getFdProperties(Element storeConfig)
+  {
+    NodeList fdConfigs = storeConfig.getElementsByTagName("fdConfig"); //$NON-NLS-1$
+    if (fdConfigs.getLength() != 1)
+    {
+      throw new IllegalStateException("FD configuration is missing"); //$NON-NLS-1$
+    }
+
+    Element fdConfig = (Element)fdConfigs.item(0);
+    String fdName = fdConfig.getAttribute("name"); //$NON-NLS-1$
+    String lockServerHost = fdConfig.getAttribute("lockServerHost"); //$NON-NLS-1$
+    String fdDirPath = fdConfig.getAttribute("fdDirPath"); //$NON-NLS-1$
+    // for future use once we allow databases to be created somewhere else.
+    // String dbDirPath = fdConfig.getAttribute("dbDirPath"); //$NON-NLS-1$
+    String logDirPath = fdConfig.getAttribute("logDirPath");//$NON-NLS-1$
+    String fdFileHost = fdConfig.getAttribute("fdFileHost"); //$NON-NLS-1$
+    String fdNumber = fdConfig.getAttribute("fdNumber"); //$NON-NLS-1$
+    String pageSize = fdConfig.getAttribute("pageSize"); //$NON-NLS-1$
+
+    // Session Cache data.
+    sessionMinCacheSize = getIntegerValue(fdConfig.getAttribute("SessionMinCacheSize"), 0); //$NON-NLS-1$
+    sessionMaxCacheSize = getIntegerValue(fdConfig.getAttribute("SessionMaxCacheSize"), 0); //$NON-NLS-1$
+
+    // Log options.
+    String logOptionString = fdConfig.getAttribute("logOption");
+    if (logOptionString.equalsIgnoreCase("LogAll"))
+    {
+      logOption = oo.LogAll;
+    }
+    else if (logOptionString.equalsIgnoreCase("LogSession"))
+    {
+      logOption = oo.LogSession;
+    }
+
+    fdManager.setFdName(fdName);
+    fdManager.setFdDirPath(fdDirPath);
+    fdManager.setlogDirPath(logDirPath);
+    fdManager.setFdNumber(fdNumber);
+    fdManager.setFdFileHost(fdFileHost);
+    fdManager.setLockServerHost(lockServerHost);
+    fdManager.setPageSize(pageSize);
+
+  }
+
+  private int getIntegerValue(String str, int defaultValue)
+  {
+    if (str.length() == 0) // once we move to JDK 6 we can use isEmpty().
+    {
+      return defaultValue;
+    }
+
+    return new Integer(str).intValue();
+  }
+
+  public int getSessionMinCacheSize()
+  {
+    return sessionMinCacheSize;
+  }
+
+  public int getSessionMaxCacheSize()
+  {
+    return sessionMaxCacheSize;
+  }
+
+  public String getLogPath()
+  {
+    return fdManager.getLogPath();
+  }
+
+  public int getLogOption()
+  {
+    return logOption;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.java
new file mode 100644
index 0000000..b230ddf
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/ObjectivityStoreFactory.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.IStoreFactory;
+
+import org.w3c.dom.Element;
+
+import java.util.Map;
+
+public class ObjectivityStoreFactory implements IStoreFactory
+{
+
+  public ObjectivityStoreFactory()
+  {
+  }
+
+  public IStore createStore(String repositoryName, Map<String, String> repositoryProperties, Element storeConfig)
+  {
+    // System.out.println(">>> OSF.createStore()");
+    // TODO - we might want to initialize Objy with the
+    // FD name here!!!
+    ObjectivityStoreConfig objyStoreConfig = new ObjectivityStoreConfig(storeConfig);
+
+    // open the connection to Objy...
+    // if (Connection.current() == null)
+    // {
+    // try
+    // {
+    // // Connection.setUserClassLoader(ObjectivityStoreFactory.class.getClassLoader());
+    // Connection.open(objyStoreConfig.getFdName(), oo.openReadWrite);
+    // }
+    // catch (DatabaseOpenException e)
+    // {
+    // e.printStackTrace();
+    // }
+    // catch (DatabaseNotFoundException e)
+    // {
+    // e.printStackTrace();
+    // }
+    // }
+
+    ObjectivityStore store = new ObjectivityStore(objyStoreConfig);
+    return store;
+  }
+
+  public String getStoreType()
+  {
+    return ObjectivityStore.TYPE;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.java
new file mode 100644
index 0000000..d43168a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/bundle/OM.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Ibrahim Sallam
+ */
+public abstract class OM
+{
+  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.server.objectivity"; //$NON-NLS-1$
+
+  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+  // TODO Consider using LOG for important things
+  public static final OMTracer INFO = BUNDLE.tracer("info"); //$NON-NLS-1$
+
+  // TODO Consider using LOG for important things
+  public static final OMTracer ERROR = BUNDLE.tracer("error"); //$NON-NLS-1$
+
+  public static final OMLogger LOG = BUNDLE.logger();
+
+  /**
+   * @author Eike Stepper
+   */
+  public static final class Activator extends OSGiActivator
+  {
+    public Activator()
+    {
+      super(BUNDLE);
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.java
new file mode 100644
index 0000000..bbdb3e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManager.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.clustering;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.db.app.ooId;
+
+public interface ObjyPlacementManager
+{
+  ooId getNearObject(ObjyObject parent, EStructuralFeature feature, EClass newClassObject);
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.java
new file mode 100644
index 0000000..011bc23
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerImpl.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.clustering;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyScope;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.db.app.ooId;
+
+public class ObjyPlacementManagerImpl implements ObjyPlacementManager
+{
+
+  private String resourceContName = "resCont";
+
+  private String dbName = "DB";
+
+  private String defContName = "DefaultCont";
+
+  private String genContName = "Cont";
+
+  /**
+   * Only used when we can't figure out a near object, so we'll end up putting the object in a default location.
+   */
+  public ooId getNearObject(ObjyObject parent, EStructuralFeature feature, EClass newClassObject)
+  {
+    ObjyScope objyScope = null;
+
+    if (parent == null)
+    {
+      objyScope = new ObjyScope(dbName, resourceContName);
+    }
+    else if (feature == null)
+    {
+      objyScope = new ObjyScope(dbName, defContName);
+    }
+    else
+    {
+      objyScope = new ObjyScope(dbName, genContName);
+    }
+    return objyScope.getScopeContOid();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.java
new file mode 100644
index 0000000..fc4befe
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/clustering/ObjyPlacementManagerLocal.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.clustering;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStore;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyScope;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EClass;
+
+import com.objy.db.app.ooId;
+
+import java.util.Map;
+
+/***
+ * This class will attempt to cluster objects with their container, or with a resource. It should be able to use the
+ * global clustering which will use model elements to locate where an object will end up.
+ *
+ * @author Ibrahim Sallam
+ */
+public class ObjyPlacementManagerLocal
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyPlacementManagerLocal.class);
+
+  // private static final ContextTracer TRACER_ERROR = new ContextTracer(OM.ERROR, ObjyPlacementManagerLocal.class);
+
+  // private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyPlacementManagerLocal.class);
+
+  private String repositoryName = null;
+
+  ObjySession objySession = null;
+
+  InternalCommitContext commitContext = null;
+
+  Map<CDOID, InternalCDORevision> newObjectsMap;
+
+  Map<CDOID, CDOID> idMapper;
+
+  Map<CDOID, ObjyObject> newObjyObjectsMap;
+
+  public ObjyPlacementManagerLocal(ObjectivityStore objyStore, ObjySession objySession, InternalCommitContext commitContext,
+      Map<CDOID, ObjyObject> newObjyObjectsMap)
+  {
+    repositoryName = objyStore.getRepository().getName();
+    this.objySession = objySession;
+    this.commitContext = commitContext;
+    // first put them in a map for easy lookup and processing....
+    newObjectsMap = CDOIDUtil.createMap();
+    for (InternalCDORevision revision : commitContext.getNewObjects())
+    {
+      newObjectsMap.put(revision.getID(), revision);
+    }
+
+    idMapper = CDOIDUtil.createMap();
+
+    this.newObjyObjectsMap = newObjyObjectsMap;
+  }
+
+  public void processRevision(InternalCDORevision revision)
+  {
+    // the revision could've been processed in case if it's a container
+    // object and we reached it while processing another revision.
+    if (isIdProcessed(revision.getID()))
+    {
+      return;
+    }
+
+    // create the object and add it to mapping, this will recursively call
+    // other object creation as needed, based on the default clustering of
+    // having each object is stored with its container.
+    try
+    {
+      createObjectAndAddToMapping(revision);
+    }
+    catch (com.objy.db.ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  private ObjyObject createObjectAndAddToMapping(InternalCDORevision revision)
+  {
+    ObjyObject objyObject = createObject(revision);
+
+    CDOID newID = OBJYCDOIDUtil.getCDOID(objyObject.ooId());
+
+    // nearObject = objyObject.ooId();
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Adding object to mapping from " + revision.getID() + " to " + newID);
+    }
+    commitContext.addIDMapping(revision.getID(), newID);
+    // keep a track of this mapping.
+    idMapper.put(revision.getID(), newID);
+    newObjyObjectsMap.put(newID, objyObject);
+
+    return objyObject;
+  }
+
+  protected boolean isIdProcessed(CDOID id)
+  {
+    // if the ID in the idMapper, then we did process the revision alreay
+    return idMapper.get(id) != null;
+  }
+
+  protected ObjyObject createObject(InternalCDORevision revision)
+  {
+    long startTime = System.nanoTime();
+    ooId nearObject = null;
+    EClass eClass = revision.getEClass();
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Creating new object for revision: " + revision + " - eClass: " + eClass);
+    }
+    if (revision.isResourceNode())
+    {
+      String resourceName = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
+      // The resourcelist is in the ConfigDB, but each resource is in a resource
+      // container in the repo database, except the first root (ID == resourceID).
+      // if (revision.getID() == revision.getResourceID()) // Check with Eike!
+      if (resourceName == null) // root.
+      {
+        nearObject = objySession.getResourceList(repositoryName).ooId();
+      }
+      else
+      {
+        ObjyScope objyScope = new ObjyScope(repositoryName, resourceName /* ObjyDb.RESOURCELIST_CONT_NAME */);
+        nearObject = objyScope.getScopeContOid();
+      }
+    }
+    else
+    {
+      nearObject = getNearObject(revision);
+    }
+
+    if (nearObject == null)
+    {
+      // we have to put it somewhere.
+      // call the global placement manager.
+      nearObject = objySession.getObjectManager().getGlobalPlacementManager().getNearObject(null, null, revision.getEClass());
+    }
+
+    ObjyObject objyObject = objySession.getObjectManager().newObject(eClass, nearObject);
+
+    // // if it's a resource, collect it.
+    // if (revision.isResourceNode())
+    // {
+    // // Add resource to the list
+    // ObjyResourceList resourceList = objySession.getResourceList();
+    //
+    // // before we update the data into the object we need to check
+    // // if it's a resource and we're trying to add a duplicate.
+    // // TODO - do we need to check for Folder and resouce, or is the isResourceNode()
+    // // check is enough?!!!
+    // if (revision.isResourceFolder() || revision.isResource())
+    // {
+    // // this call will throw exception if we have a duplicate resource we trying to add.
+    // resourceList.checkDuplicateResources(revision);
+    // }
+    // SmartLock.lock(objyObject);
+    // resourceList.add(objyObject);
+    // }
+    ObjyObject.createObjectTime += System.nanoTime() - startTime;
+    ObjyObject.createObjectCount++;
+
+    return objyObject;
+  }
+
+  /***
+   * This function might be called recursively throw the call to createAndAddToMapping() to create all the container
+   * objects and or resources needed to cluster the rest of the new objects...
+   */
+  protected ooId getNearObject(InternalCDORevision revision)
+  {
+    ooId nearObject = null;
+    // find the new object which is either a container or a resource.
+    Object id = revision.getContainerID();
+
+    if (id instanceof CDOID && (CDOID)id != CDOID.NULL)
+    {
+      nearObject = getOidFromCDOID((CDOID)id);
+    }
+    else
+    {
+      // use the resource...
+      CDOID resourceId = revision.getResourceID();
+      nearObject = getOidFromCDOID(resourceId);
+    }
+    return nearObject;
+  }
+
+  protected ooId getOidFromCDOID(CDOID id)
+  {
+    ooId oid = null;
+
+    // if (OBJYCDOIDUtil.isValidObjyId(id))
+    // oid = OBJYCDOIDUtil.getooId(id);
+
+    if (id.isTemporary())
+    {
+      // see if we've seen it before
+      CDOID nearId = idMapper.get(id);
+      if (nearId != null)
+      {
+        oid = OBJYCDOIDUtil.getooId(nearId);
+      }
+      else
+      {
+        // create that object since it wasn't created and mapped yet.
+        InternalCDORevision containerRevision = newObjectsMap.get(id);
+        if (containerRevision != null)
+        {
+          oid = createObjectAndAddToMapping(containerRevision).ooId();
+        }
+      }
+    }
+    else
+    {
+      oid = OBJYCDOIDUtil.getooId(id);
+    }
+
+    return oid;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.java
new file mode 100644
index 0000000..024a8f3
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/FdManager.java
@@ -0,0 +1,569 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+
+import org.eclipse.net4j.util.io.TMPUtil;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.app.Session;
+import com.objy.db.app.oo;
+import com.objy.db.app.ooContObj;
+import com.objy.db.app.ooDBObj;
+
+import org.w3c.dom.Element;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+
+public class FdManager
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, FdManager.class);
+
+  private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, FdManager.class);
+
+  private static final String DEFAULT_VALUE = "_DEFAULT_";
+
+  private String fdName = "test";
+
+  private String fdFileHost = DEFAULT_VALUE;
+
+  private String fdDirPath = null;
+
+  private String lockServerHost = DEFAULT_VALUE;
+
+  private String fdNumber = "12345";
+
+  private String pageSize = DEFAULT_VALUE;
+
+  private String fdFilePath = null;
+
+  private String bootFilePath = null;
+
+  private boolean initialized = false;
+
+  private String logDirPath = null;
+
+  protected void initialize(boolean reset)
+  {
+    if (fdDirPath == null)
+    {
+      File dataFolder = TMPUtil.createTempFolder("Objy", "data");
+      fdDirPath = dataFolder.getAbsolutePath();
+    }
+    if (noDefaultValueSet(logDirPath))
+    {
+      logDirPath = fdDirPath;
+    }
+    if (fdFilePath == null)
+    {
+      fdFilePath = fdDirPath + File.separator + fdName + ".fdb";
+    }
+    if (bootFilePath == null)
+    {
+      bootFilePath = fdDirPath + File.separator + fdName + ".boot";
+    }
+
+    if (!initialized)
+    {
+      if (reset)
+      {
+        initialized = resetFD();
+      }
+      else if (!fdExists())
+      {
+        initialized = createFD();
+      }
+      else
+      {
+        // FD is ready, just use it.
+        initialized = true;
+      }
+    }
+  }
+
+  public String getFd()
+  {
+    return bootFilePath;
+  }
+
+  public boolean resetFD()
+  {
+    return deleteDBs();
+  }
+
+  public boolean resetFD_OLD()
+  {
+    boolean bRet = true;
+    // TBD: we need to add code to delete all DBs.
+    // also we need to delete the schema.
+    // It might be easier to just delete the FD, then create another one.
+    if (fdExists())
+    {
+      bRet = deleteFD();
+    }
+
+    if (bRet)
+    {
+      bRet = createFD();
+    }
+
+    return bRet;
+  }
+
+  private boolean createFD()
+  {
+    boolean bRet = false;
+    Process proc = null;
+
+    StringBuilder command = new StringBuilder(256);
+    command.append("oonewfd");
+    // command.append(" -fdfilehost ").append(getFdFileHost());
+    command.append(" -fdfilepath ").append(fdFilePath);
+    command.append(" -lockserver ").append(getLockServerHost());
+    command.append(" -fdnumber ").append(fdNumber);
+    command.append(" -pagesize ").append(getPageSize());
+    // command.append(" -jnldirpath ").append(jrnlDirPath);
+    // command.append(" -licensefile ").append(licenseFilePath);
+    // if (standAlone) command.append(" -standalone ");
+    command.append(' ').append(bootFilePath);
+
+    TRACER_INFO.trace("Createing FD: '" + bootFilePath + "'.");
+
+    try
+    {
+      proc = Runtime.getRuntime().exec(command.toString());
+      if (proc.waitFor() != 0)
+      {
+        dumpStream(proc.getErrorStream());
+        throw new RuntimeException("Error creating FD...");
+      }
+
+      dumpStream(proc.getInputStream());
+      bRet = true;
+      // loadSchema();
+
+    }
+    catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    catch (InterruptedException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return bRet;
+  }
+
+  // TODO - we made it public to allow wiping out the whole FD, there is close
+  // package names and classes in the test suite.
+  public boolean deleteFD()
+  {
+    boolean bRet = false;
+    Process proc = null;
+    File file = new File(bootFilePath);
+    if (!file.exists())
+    {
+      return true;
+    }
+
+    String command = "oodeletefd" + " -force " + bootFilePath;
+    TRACER_INFO.trace("Deleting FD: '" + bootFilePath + "'.");
+
+    try
+    {
+      proc = Runtime.getRuntime().exec(command);
+      if (proc.waitFor() != 0)
+      {
+        dumpStream(proc.getErrorStream());
+        throw new RuntimeException("Error deleting FD...");
+      }
+
+      dumpStream(proc.getInputStream());
+      bRet = true;
+
+    }
+    catch (InterruptedException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    catch (IOException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return bRet;
+
+  }
+
+  private boolean deleteDBs()
+  {
+    boolean bRet = false;
+    Process proc = null;
+
+    String command = "oodeletedb" + " -all " + " -force " + bootFilePath;
+    // command += " ; del *.DB";
+    TRACER_INFO.trace("Deleting all DBs from : '" + bootFilePath + "'.");
+
+    try
+    {
+      proc = Runtime.getRuntime().exec(command);
+      if (proc.waitFor() != 0)
+      {
+        dumpStream(proc.getErrorStream());
+        throw new RuntimeException("Error deleting DBs...");
+      }
+
+      dumpStream(proc.getInputStream());
+      bRet = true;
+
+    }
+    catch (InterruptedException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    catch (IOException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return bRet;
+
+  }
+
+  @SuppressWarnings("unused")
+  private boolean deleteDBs_cl()
+  {
+    boolean bRet = false;
+    Process proc = null;
+
+    String command = "oodeletedb" + " -all " + " -force " + bootFilePath;
+    // command += " ; del *.DB";
+    TRACER_INFO.trace("Deleting all DBs from : '" + bootFilePath + "'.");
+
+    try
+    {
+      proc = Runtime.getRuntime().exec(command);
+      if (proc.waitFor() != 0)
+      {
+        dumpStream(proc.getErrorStream());
+        throw new RuntimeException("Error deleting DBs...");
+      }
+
+      dumpStream(proc.getInputStream());
+      bRet = true;
+
+    }
+    catch (InterruptedException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    catch (IOException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    return bRet;
+  }
+
+  private boolean fdExists()
+  {
+    boolean bRet = false;
+
+    File file = new File(bootFilePath);
+    bRet = file.exists();
+    // Process proc = null;
+    //
+    // String command = "oochange" + " -notitle " + bootFilePath;
+    // TRACER_DEBUG.trace("Checking if FD: '" + bootFilePath + "' exists.");
+    //
+    // try
+    // {
+    // proc = Runtime.getRuntime().exec(command);
+    // if (proc.waitFor() != 0)
+    // {
+    // dumpStream(proc.getErrorStream());
+    // }
+    // else
+    // {
+    // dumpStream(proc.getInputStream());
+    // bRet = true;
+    // }
+    // }
+    // catch (IOException e)
+    // {
+    // e.printStackTrace();
+    // }
+    // catch (InterruptedException e)
+    // {
+    // // TODO Auto-generated catch block
+    // e.printStackTrace();
+    // }
+
+    return bRet;
+  }
+
+  // This is a temp solution to avoid unloaded schema.
+  // We'll explicitly load the schema after creating the FD
+  @SuppressWarnings("unused")
+  private boolean loadSchema()
+  {
+    boolean bRet = false;
+    Process proc = null;
+
+    String command = "ooschemaupgrade" + " -infile config" + File.separator + "schema.txt " + bootFilePath;
+    TRACER_DEBUG.trace("Loading schema to FD: '" + bootFilePath + "'.");
+
+    try
+    {
+      proc = Runtime.getRuntime().exec(command);
+      if (proc.waitFor() != 0)
+      {
+        dumpStream(proc.getErrorStream());
+      }
+      else
+      {
+        dumpStream(proc.getInputStream());
+        bRet = true;
+      }
+    }
+    catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    catch (InterruptedException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return bRet;
+  }
+
+  public String getFdFileHost()
+  {
+    if (noDefaultValueSet(fdFileHost))
+    {
+      // get local host
+      try
+      {
+        InetAddress address = InetAddress.getLocalHost();
+        fdFileHost = address.getHostName();
+      }
+      catch (UnknownHostException e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+
+    }
+    return fdFileHost;
+  }
+
+  public void setFdFileHost(String fdFileHost)
+  {
+    this.fdFileHost = fdFileHost;
+  }
+
+  public String getFdDirPath()
+  {
+    return fdDirPath;
+  }
+
+  public void setFdDirPath(String fdDirPath)
+  {
+    this.fdDirPath = fdDirPath;
+  }
+
+  public String getLockServerHost()
+  {
+    if (noDefaultValueSet(lockServerHost))
+    {
+      // get local host
+      try
+      {
+        InetAddress address = InetAddress.getLocalHost();
+        lockServerHost = address.getHostName();
+      }
+      catch (UnknownHostException e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+
+    }
+    return lockServerHost;
+  }
+
+  public void setLockServerHost(String lockServerHost)
+  {
+    this.lockServerHost = lockServerHost;
+  }
+
+  public String getFdNumber()
+  {
+    return fdNumber;
+  }
+
+  public void setFdNumber(String fdNumber)
+  {
+    this.fdNumber = fdNumber;
+  }
+
+  public String getPageSize()
+  {
+    if (noDefaultValueSet(pageSize))
+    {
+      pageSize = "8192";
+    }
+    return pageSize;
+  }
+
+  public void setPageSize(String pageSize)
+  {
+    this.pageSize = pageSize;
+  }
+
+  public String getFdName()
+  {
+    return fdName;
+  }
+
+  public void setFdName(String fdName)
+  {
+    this.fdName = fdName;
+  }
+
+  private void dumpStream(InputStream inStream)
+  {
+    BufferedInputStream inBuffStream = new BufferedInputStream(inStream);
+    try
+    {
+      byte[] buffer = new byte[1024];
+      int bytesRead = 0;
+      while ((bytesRead = inBuffStream.read(buffer)) != -1)
+      {
+        String chunk = new String(buffer, 0, bytesRead);
+        TRACER_DEBUG.trace(chunk);
+      }
+    }
+    catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+  }
+
+  public void configure()
+  {
+    initialize(false);
+  }
+
+  /**
+   * TODO
+   *
+   * @param storeConfig
+   */
+  public void configure(Element storeConfig)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  public void configure(String name)
+  {
+    fdDirPath = fdDirPath + File.separator + name;
+    // insure that path exist.
+    File dir = new File(fdDirPath);
+    if (!dir.exists())
+    {
+      // create the directory.
+      dir.mkdirs();
+    }
+    Integer number = Math.abs(new Random().nextInt() % 65000);
+    fdNumber = number.toString();
+    initialize(false);
+  }
+
+  /**
+   * Data cleanup code, that's mostly used by the test applications. This code will not remove schema.
+   */
+  public void removeData()
+  {
+    // ObjyConnection.INSTANCE.disconnect();
+    // fdManager.resetFD();
+    Session session = new Session();
+    session.setIndexMode(oo.EXPLICIT_UPDATE);
+    session.begin();
+    Iterator<?> itr = session.getFD().containedDBs();
+    ooDBObj dbObj = null;
+    List<ooDBObj> dbList = new ArrayList<ooDBObj>();
+    List<ooContObj> contList = new ArrayList<ooContObj>();
+    while (itr.hasNext())
+    {
+      dbObj = (ooDBObj)itr.next();
+      dbList.add(dbObj);
+      {
+        Iterator<?> contItr = dbObj.contains();
+        while (contItr.hasNext())
+        {
+          contList.add((ooContObj)contItr.next());
+        }
+      }
+    }
+
+    for (ooContObj cont : contList)
+    {
+      cont.delete();
+    }
+
+    // for (ooDBObj db : dbList)
+    // {
+    // System.out.println("restFD() - deleting DB(" + db.getOid().getStoreString() + "):" + db.getName());
+    // db.delete();
+    // }
+
+    session.commit();
+    session.terminate();
+  }
+
+  boolean noDefaultValueSet(String value)
+  {
+    return value == null || value.length() == 0 || value.equals(DEFAULT_VALUE);
+  }
+
+  public void setlogDirPath(String logDirPath)
+  {
+    this.logDirPath = logDirPath;
+  }
+
+  public String getLogPath()
+  {
+    return logDirPath;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.java
new file mode 100644
index 0000000..6e5a316
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClass.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import com.objy.as.app.Class_Position;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+
+import java.util.HashMap;
+
+/**
+ * Wrapper around the AS class to be able to cache attributes.
+ *
+ * @author ibrahim
+ */
+public class ObjyClass
+{
+
+  protected d_Class asClass;
+
+  protected String asClassName;
+
+  protected HashMap<String, d_Attribute> attributeMap = new HashMap<String, d_Attribute>();
+
+  protected HashMap<String, Class_Position> classPositionMap = new HashMap<String, Class_Position>();
+
+  public ObjyClass(d_Class asClass/* , EClass eClass */)
+  {
+    this.asClass = asClass;
+    if (asClass.namespace_name() != null)
+    {
+      asClassName = asClass.namespace_name() + ":" + asClass.name();
+    }
+    else
+    {
+      asClassName = asClass.name();
+    }
+  }
+
+  public d_Attribute resolve_attribute(String attribute_name)
+  {
+    d_Attribute attr = attributeMap.get(attribute_name);
+    if (attr == null)
+    {
+      attr = asClass.resolve_attribute(attribute_name);
+      // we might get (attr == null) if the attribute is from a base class.
+      // so we'll try to get the attribute through the position.
+      if (attr == null)
+      {
+        Class_Position position = resolve_position(attribute_name);
+        if (position != null)
+        {
+          attr = asClass.attribute_at_position(position);
+        }
+      }
+      attributeMap.put(attribute_name, attr);
+    }
+    return attr;
+  }
+
+  public Class_Position resolve_position(String attribute_name)
+  {
+    Class_Position attr = classPositionMap.get(attribute_name);
+    if (attr == null)
+    {
+      attr = asClass.position_in_class(attribute_name);
+      classPositionMap.put(attribute_name, attr);
+    }
+    return attr;
+  }
+
+  public d_Class getASClass()
+  {
+    return asClass;
+  }
+
+  public String getASClassName()
+  {
+    return asClassName;
+  }
+
+  // public List<Class_Position> getListOfRefAttributes()
+  // {
+  // List<Class_Position> positions = new ArrayList<Class_Position>();
+  //
+  // System.out.println(">>> Class: " + asClassName);
+  //
+  // //
+  // @SuppressWarnings("rawtypes")
+  // Iterator itr = asClass.attributes_plus_inherited();
+  // while (itr.hasNext())
+  // {
+  // d_Attribute attribute = (d_Attribute)itr.next();
+  // if (attribute.is_type() && attribute.type_of() instanceof d_Ref_Type)
+  // {
+  // d_Class dClass = attribute.class_type_of();
+  // if (dClass.name().equals(ObjyFeatureMapArrayList.ClassName))
+  // {
+  // // we'll need to copy this one.
+  // positions.add(resolve_position(attribute.name()));
+  // System.out.println("\t attr: " + attribute.name());
+  // }
+  // else if (dClass.name().equals(ObjyArrayListString.ClassName))
+  // {
+  // // we'll need to copy this one.
+  // positions.add(resolve_position(attribute.name()));
+  // System.out.println("\t attr: " + attribute.name());
+  // }
+  // else if (dClass.name().equals(ObjyArrayListId.className))
+  // {
+  // // we'll need to copy this one.
+  // positions.add(resolve_position(attribute.name()));
+  // System.out.println("\t attr: " + attribute.name());
+  // }
+  // else if (dClass.name().equals(ObjyProxy.className))
+  // {
+  // // we'll need to copy this one.
+  // positions.add(resolve_position(attribute.name()));
+  // System.out.println("\t attr: " + attribute.name());
+  // }
+  // }
+  // }
+  //
+  // return positions;
+  // }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java
new file mode 100644
index 0000000..67a281d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ObjyMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBase;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.as.app.d_Inheritance;
+import com.objy.as.app.d_Module;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+public class ObjyClassProposed
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyClassProposed.class);
+
+  private EClass eClass;
+
+  private d_Module module;
+
+  private boolean onlyStructure = false; // TODO - I'm not sure why we need this TBV.
+
+  public ObjyClassProposed(d_Module module, EClass eClass, boolean onlyStructure)
+  {
+    this.eClass = eClass;
+    this.module = module;
+    this.onlyStructure = onlyStructure;
+
+  }
+
+  public void propose()
+  {
+    String className = ObjySchema.formObjectivityClassName(eClass, onlyStructure);
+
+    Proposed_Class proposedooClass = null;
+
+    {
+      proposedooClass = ObjySchema.getTopModule().propose_new_class(className);
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ECLASS " + eClass.getName() + " -> " + className + " = ADD - START");
+      }
+
+      int countIndex = 0;
+
+      for (EClass eSuperObject : eClass.getESuperTypes())
+      {
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("ECLASS " + className + " ADDING SUPER CLASS " + eSuperObject.getName());
+        }
+        // This is used to only allow one base class with persistence inheritance.
+        boolean itrOnlyStructure = countIndex == 0 ? false || onlyStructure : true;
+
+        ObjySchema.createObjyClassSchema(eSuperObject, itrOnlyStructure);
+
+        String superClassName = ObjySchema.formObjectivityClassName(eSuperObject, itrOnlyStructure);
+        proposedooClass.add_base_class(com.objy.as.app.d_Module.LAST, // Position
+            d_Access_Kind.d_PUBLIC, // Access kind
+            superClassName); // Base class name*/
+        countIndex++;
+      }
+
+      if (eClass.getESuperTypes().size() == 0 && !onlyStructure)
+      {
+        // this is done in ObjySchema.buildSchema()...
+        // ooBaseClass.buildSchema();
+        proposedooClass.add_base_class(com.objy.as.app.d_Module.LAST, // Position
+            d_Access_Kind.d_PUBLIC, // Access kind
+            ObjyBase.CLASS_NAME); // Base class name
+
+      }
+    }
+    EList<EStructuralFeature> listFeatures = eClass.getEStructuralFeatures();
+    ArrayList<EClass> toBeProcessed = new ArrayList<EClass>();
+    for (EStructuralFeature feature : listFeatures)
+    {
+      if (!(feature instanceof EAttribute || feature instanceof EReference) || !ObjyObject.isPersistent(feature))
+      {
+        continue;
+      }
+
+      EClassifier destination = feature.getEType();
+
+      ITypeMapper bridge = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      if (bridge == null)
+      {
+        continue;
+      }
+
+      // new field
+      bridge.createSchema(proposedooClass, feature);
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("New Attribut for " + eClass.getName() + " name : " + feature.getName());
+      }
+
+      if (feature instanceof EReference)
+      {
+        // ObjySchema.createObjyClassSchema((EClass)destination, false);
+        toBeProcessed.add((EClass)destination);
+      }
+    }
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("ECLASS " + eClass.getName() + " -> " + className + " -- DONE");
+    }
+
+    for (EClass classifier : toBeProcessed)
+    {
+      // ObjySchema.getOrCreate(classifier);
+      ObjySchema.createObjyClassSchema(classifier, false);
+    }
+
+  }
+
+  public void evolve(d_Class dClass)
+  {
+    String className = ObjySchema.formObjectivityClassName(eClass, onlyStructure);
+
+    Proposed_Class proposedooClass = null;
+
+    // boolean evolution = false;
+
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ECLASS " + eClass.getName() + " -> " + className + " EVOLVE - START");
+      }
+
+      Iterator<?> subClasses = dClass.sub_class_list();
+      while (subClasses.hasNext())
+      {
+        d_Inheritance subClass = (d_Inheritance)subClasses.next();
+        module.propose_evolved_class(subClass.inherits_to().name());
+      }
+      proposedooClass = module.propose_evolved_class(className);
+    }
+
+    EList<EStructuralFeature> listFeatures = eClass.getEStructuralFeatures();
+    ArrayList<EClass> toBeEvolve = new ArrayList<EClass>();
+    for (EStructuralFeature feature : listFeatures)
+    {
+      if (!(feature instanceof EAttribute || feature instanceof EReference) || !ObjyObject.isPersistent(feature))
+      {
+        continue;
+      }
+
+      EClassifier destination = feature.getEType();
+
+      ITypeMapper bridge = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      if (bridge == null)
+      {
+        continue;
+      }
+
+      d_Attribute attr = null;
+      attr = dClass.resolve_attribute(feature.getName());
+
+      if (attr == null)
+      {
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("New Attribut for " + eClass.getName() + " name : " + feature.getName());
+        }
+
+        // new field
+        bridge.createSchema(proposedooClass, feature);
+      }
+      // TODO - enable the rest of attribute type evolution...
+      // else if (bridge.validate(attr, feature))
+      // {
+      // continue;
+      // }
+      else
+      {
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("Attribut Changed for " + eClass.getName() + " name : " + feature.getName());
+          TRACER_DEBUG.trace("... attribute change is not supported in this release... for " + eClass.getName() + " name : " + feature.getName());
+        }
+
+        // TODO - enable the rest of attribute type evolution...
+        // bridge.modifySchema(proposedooClass, feature);
+      }
+
+      if (feature instanceof EReference)
+      {
+        // String destinationClassName = getObjectivityClass(destination);
+        // d_Class dClass = module.resolve_class(destinationClassName);
+        toBeEvolve.add((EClass)destination);
+      }
+    }
+
+    TRACER_DEBUG.trace("evolve ECLASS " + eClass.getName() + " -> " + className + " -- DONE");
+
+    for (EClass classifier : toBeEvolve)
+    {
+      String localName = ObjySchema.formObjectivityClassName(classifier, false);
+      d_Class localDClass = ObjySchema.getTopModule().resolve_class(localName);
+      if (localDClass == null)
+      {
+        ObjySchema.createObjyClassSchema(classifier, false);
+      }
+      else
+      {
+        ObjySchema.evolveObjyClassSchema(classifier, false);
+      }
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.java
new file mode 100644
index 0000000..90913b6
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyCommitInfoHandler.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyCommitInfo;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+
+import com.objy.db.app.Session;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeSetX;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class ObjyCommitInfoHandler
+{
+  protected ooId commitInfoSetId;
+
+  public ObjyCommitInfoHandler(String repositoryName)
+  {
+    commitInfoSetId = ObjyDb.getOrCreateCommitInfoList(repositoryName);
+  }
+
+  /***
+   * Factory method to create the CommitInfoList, which is a TreeListX
+   */
+  public static ooId create(ooId scopeContOid)
+  {
+    ooTreeSetX treeSet = new ooTreeSetX(20, true);
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(treeSet);
+
+    return treeSet.getOid();
+  }
+
+  /***
+   * This function assume we are in an Objy trnasaction.
+   */
+
+  public void writeCommitInfo(int id, long timeStamp, long previousTimeStamp, String userID, String comment)
+  {
+    ObjyCommitInfo commitInfo = new ObjyCommitInfo(id, timeStamp, previousTimeStamp, userID, comment);
+    getTreeSet().add(commitInfo);
+  }
+
+  /***
+   * Find all objects in the ooTreeListX that's between startTime and endTime inclusive, and have branch.getID() if
+   * branch is not null We don't have any optimization for time, but we could make the treeset use custom comparator.
+   */
+  public List<ObjyCommitInfo> getCommitInfo(CDOBranch branch, long startTime, long endTime)
+  {
+    ooTreeSetX treeSet = getTreeSet();
+    ObjyCommitInfo ooCommitInfo = null;
+    List<ObjyCommitInfo> results = new ArrayList<ObjyCommitInfo>();
+
+    boolean getIt = false;
+
+    @SuppressWarnings("unchecked")
+    Iterator<ObjyCommitInfo> itr = treeSet.iterator();
+    while (itr.hasNext())
+    {
+      ooCommitInfo = itr.next();
+      getIt = true; // assume it's what we need, then we filter below.
+      long timeStamp = ooCommitInfo.getTimeStamp();
+      long branchId = ooCommitInfo.getBranchId();
+
+      if (branch != null && branch.getID() != branchId)
+      {
+        getIt = false;
+      }
+      if (getIt && startTime != CDOBranchPoint.UNSPECIFIED_DATE && timeStamp < startTime)
+      {
+        getIt = false;
+      }
+      if (getIt && endTime != CDOBranchPoint.UNSPECIFIED_DATE && timeStamp > endTime)
+      {
+        getIt = false;
+      }
+
+      if (getIt)
+      {
+        results.add(ooCommitInfo);
+      }
+    }
+
+    return results;
+  }
+
+  /***
+   * This function assume we are in an Objy trnasaction.
+   */
+  protected ooTreeSetX getTreeSet()
+  {
+    ooTreeSetX treeSet = null;
+    treeSet = (ooTreeSetX)Session.getCurrent().getFD().objectFrom(commitInfoSetId.getString());
+    return treeSet;
+
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.java
new file mode 100644
index 0000000..d47f7aa
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyConnection.java
@@ -0,0 +1,439 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.clustering.ObjyPlacementManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.clustering.ObjyPlacementManagerImpl;
+import org.eclipse.emf.cdo.server.objectivity.IObjectivityStoreConfig;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.DatabaseNotFoundException;
+import com.objy.db.DatabaseOpenException;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.Connection;
+import com.objy.db.app.Session;
+import com.objy.db.app.oo;
+
+import java.util.Vector;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class ObjyConnection
+{
+
+  public static final ObjyConnection INSTANCE = new ObjyConnection();
+
+  protected Connection connection = null;
+
+  protected boolean isConnected = false;
+
+  protected String fdName = "";
+
+  // protected ObjectivityStore store = null;
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyConnection.class);
+
+  // private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyConnection.class);
+
+  // TODO - session pools could be a configuration candidate.
+  private static final String SESSION_POOL_NAME_READ = "ReadSP";
+
+  private static final String SESSION_POOL_NAME_WRITE = "WriteSP";
+
+  // private static final String PoolInfo = "PoolInfo";
+
+  protected ConcurrentHashMap<String, ObjySession> readPool;
+
+  protected ConcurrentHashMap<String, ObjySession> writePool;
+
+  private ObjyPlacementManager defaultPlacementManager = null;
+
+  private Object syncObject = new Object();
+
+  private ReentrantLock lock = new ReentrantLock();
+
+  private int sessionMinCacheSize = 600;
+
+  private int sessionMaxCacheSize = 1000;
+
+  private final int minInactiveSessions = 5;
+
+  private int sessionCount = 0;
+
+  private String logDirPath = null;
+
+  private int logOption = oo.LogNone;
+
+  public ObjyConnection()
+  {
+    readPool = new ConcurrentHashMap<String, ObjySession>(5);
+    writePool = new ConcurrentHashMap<String, ObjySession>(5);
+  }
+
+  /***
+   * Connect to a store and an FD. TODO - We might need to allow switching of FD in the future.
+   */
+  synchronized public void connect(IObjectivityStoreConfig storeConfig)
+  {
+    /****
+     * If
+     */
+    fdName = storeConfig.getFdName();
+    logDirPath = storeConfig.getLogPath();
+    logOption = storeConfig.getLogOption();
+    connect();
+    // this.store = store;
+  }
+
+  synchronized public void connect(String fdName, int logOption)
+  {
+    /****
+     * If
+     */
+    this.fdName = fdName;
+    this.logOption = logOption;
+    connect();
+    // this.store = store;
+  }
+
+  private void connect()
+  {
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace(" SessionMinCacheSize: " + sessionMinCacheSize);
+      TRACER_DEBUG.trace(" SessionMaxCacheSize: " + sessionMaxCacheSize);
+    }
+
+    if (!isConnected)
+    {
+      try
+      {
+        if (Connection.current() == null)
+        {
+          if (logOption != oo.LogNone)
+          {
+            Connection.setLoggingOptions(logOption, true, // boolean logToFiles
+                true, // boolean appendLogFiles,
+                logDirPath, // String logDirPath,
+                "MainLog.txt"// String mainLogFileName
+            );
+          }
+          if (TRACER_DEBUG.isEnabled())
+          {
+            TRACER_DEBUG.trace(" creating new Connection");
+          }
+          connection = Connection.open(fdName, oo.openReadWrite);
+          connection.useContextClassLoader(true);
+        }
+        else
+        {
+          connection.addToMainLog("ObjyConnection.connect()", "...reopen connection to the FD.");
+          connection.setOpenMode(oo.openReadWrite);
+          connection.reopen();
+          connection.loadSchemaClasses(true);
+        }
+        isConnected = true;
+      }
+      catch (DatabaseOpenException e)
+      {
+        e.printStackTrace();
+      }
+      catch (DatabaseNotFoundException e)
+      {
+        e.printStackTrace();
+      }
+    }
+  }
+
+  public String getSessionPoolNameRead()
+  {
+    return SESSION_POOL_NAME_READ;
+  }
+
+  public String getSessionPoolNameWrite()
+  {
+    return SESSION_POOL_NAME_WRITE;
+  }
+
+  public ObjySession getWriteSessionFromPool(String sessionName)
+  {
+    return getSessionFromPool(sessionName);
+  }
+
+  public ObjySession getReadSessionFromPool(String sessionName)
+  {
+    return getSessionFromPool(sessionName);
+  }
+
+  protected ObjySession getSessionFromPool(String sessionName)
+  {
+    synchronized (syncObject)
+    {
+      // return connection.getSessionFromPool(getSessionPoolNameWrite(), sessionName);
+      ObjySession session = readPool.get(sessionName);
+      if (session == null)
+      {
+        if (sessionCount >= minInactiveSessions)
+        {
+          // look for an inactive one, rename it and use it.
+          for (ObjySession objySession : readPool.values())
+          {
+            if (objySession.isAvailable())
+            {
+              objySession.setName(sessionName);
+              session = objySession;
+              break;
+            }
+          }
+        }
+
+        // we are forced to create one.
+        if (session == null)
+        {
+          session = new ObjySession(sessionName, readPool, this);
+          ++sessionCount;
+          // System.out.println(">>> IS: creating new session: " + sessionName + " - total: " + sessionCount);
+          readPool.put(sessionName, session);
+        }
+      }
+      session.join();
+      session.setAvailable(false);
+      return session;
+    }
+  }
+
+  public void disconnect()
+  {
+    if (!isConnected)
+    {
+      return;
+    }
+    // synchronized(syncObject)
+    {
+      // it's important to do the lock() call, otherwise during the test-suite
+      // run we can exit the test before cleaning up, and session might be
+      // partly terminated.
+      // We could change the code in cleanupSessionPool() to remove the session
+      // from the pool before terminating it, but this could leave some sessions
+      // in the connection (another issue here is the connection.reconnect()
+      // doesn't work all the time).
+      lock.lock();
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ObjyConnection.disconnect() -- Start. " + toString());
+      }
+
+      // terminate the session and cleanup the Pool.
+      // TRACER_DEBUG.trace("ObjyConnection.disconnect() -- cleanup readPool. ");
+      cleanupSessionPool(readPool);
+      // TRACER_DEBUG.trace("ObjyConnection.disconnect() -- cleanup writePool. ");
+      cleanupSessionPool(writePool);
+
+      sessionCount = 0;
+
+      // TRACER_DEBUG.trace("ObjyConnection.disconnect() -- cleanup any other sessions. ");
+      // for testing we need to find out if there are any open sessions.
+
+      @SuppressWarnings("unchecked")
+      Vector<Session> sessions = connection.sessions();
+      for (Session aSession : sessions)
+      {
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("Session: " + aSession + " - open state: " + aSession.isOpen());
+        }
+        // we need to make sure that any open session is aborted, otherwise we
+        // can't reopen the fd.
+        if (aSession.isOpen())
+        {
+          try
+          {
+            aSession.join();
+            aSession.abort();
+            // IS: sometime we get exception about no transaction, although we checked
+            // aSession.isOpen() above.
+          }
+          catch (ObjyRuntimeException ex)
+          {
+            ex.printStackTrace();
+          }
+          finally
+          {
+            aSession.terminate();
+          }
+        }
+      }
+
+      // 100211:IS - Avoid closing the connection, we're seeing
+      // sort of schema issues doing so with 9.4.1...
+      /****
+       * try { Session session = new Session(); session.begin(); //connection.dropAllUserClasses(true);
+       * connection.dropAllUnregisterableClasses(); session.commit(); connection.close(); isConnected = false; } catch
+       * (DatabaseClosedException e) { // TODO Auto-generated catch block e.printStackTrace(); }
+       ****/
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ObjyConnection.disconnect() -- END. ");
+      }
+      lock.unlock();
+    }
+
+  }
+
+  // public void resetFD()
+  // {
+  // //fdManager.resetFD();
+  // if (Connection.current() != null)
+  // {
+  // if (!isConnected)
+  // connect();
+  //
+  // // for testing we need to find out if there are any open sessions.
+  // Vector<Session> sessions = Connection.current().sessions();
+  // System.out.println("Sessions still available: " + sessions.size());
+  // for (Session aSession : sessions)
+  // {
+  // System.out.println("Session: " + aSession + " - open state: " + aSession.isOpen());
+  // // we need to make sure that any open session is aborted, otherwise we
+  // // can't reopen the fd.
+  // if (aSession.isOpen())
+  // {
+  // try {
+  // aSession.join();
+  // aSession.abort();
+  // // IS: sometime we get exception about no transaction, although we checked
+  // // aSession.isOpen() above.
+  // } catch (ObjyRuntimeException ex) {
+  // ex.printStackTrace();
+  // } finally {
+  // aSession.terminate();
+  // }
+  // }
+  // }
+  //
+  // // Session session = new Session();
+  // // session.begin();
+  // // Iterator itr = session.getFD().containedDBs();
+  // // ooDBObj dbObj = null;
+  // // List<ooDBObj> dbList = new ArrayList<ooDBObj>();
+  // // while (itr.hasNext())
+  // // {
+  // // dbObj = (ooDBObj) itr.next();
+  // // dbList.add(dbObj);
+  // // }
+  // // itr.close();
+  // // session.commit();
+  //
+  // // session.begin();
+  // // for (ooDBObj db : dbList)
+  // // {
+  // // System.out.println("restFD() - deleting DB(" + db.getOid().getStoreString()+"):" + db.getName());
+  // // db.delete();
+  // // }
+  // // session.commit();
+  //
+  // // we need to wipe the schema, some tests have similar class and package
+  // // names which could cause tests to fail.
+  // // for now we'll just wipe the wole FD.
+  // //fdManager.resetFD_OLD();
+  //
+  // //
+  // // System.out.println("resetFD() - dumping catalog BEGIN.........");
+  // // session.begin();
+  // // session.getFD().dumpCatalog();
+  // // session.commit();
+  // // System.out.println("resetFD() - dumping catalog END...........");
+  // // session.terminate();
+  //
+  // disconnect();
+  // }
+  // }
+
+  public void registerClass(String name)
+  {
+    connection.registerClass(name);
+  }
+
+  public ObjyPlacementManager getDefaultPlacementManager()
+  {
+    if (defaultPlacementManager == null)
+    {
+      defaultPlacementManager = new ObjyPlacementManagerImpl();
+    }
+    return defaultPlacementManager;
+  }
+
+  protected void cleanupSessionPool(ConcurrentHashMap<String, ObjySession> pool)
+  {
+    for (ObjySession objySession : pool.values())
+    {
+      try
+      {
+        if (objySession.isOpen())
+        {
+          objySession.join();
+          objySession.abort();
+          // IS: sometime we get exception about no transaction, although we checked
+          // aSession.isOpen() above.
+        }
+      }
+      catch (ObjyRuntimeException ex)
+      {
+        ex.printStackTrace();
+      }
+      finally
+      {
+        // TRACER_DEBUG.trace("ObjyConnection.cleanupSessionPool() -- start terminating session. " +
+        // objySession.toString());
+        try
+        {
+          objySession.terminate();
+          // TRACER_DEBUG.trace("ObjyConnection.cleanupSessionPool() -- end terminating session. " +
+          // objySession.toString());
+        }
+        catch (ObjyRuntimeException ex)
+        {
+          ex.printStackTrace();
+        }
+      }
+    }
+    pool.clear();
+  }
+
+  public void setSessionMinCacheSize(int sessionMinCacheSize)
+  {
+    if (sessionMinCacheSize > this.sessionMinCacheSize)
+    {
+      this.sessionMinCacheSize = sessionMinCacheSize;
+    }
+  }
+
+  public void setSessionMaxCacheSize(int sessionMaxCacheSize)
+  {
+    if (sessionMaxCacheSize > this.sessionMaxCacheSize)
+    {
+      this.sessionMaxCacheSize = sessionMaxCacheSize;
+    }
+  }
+
+  public int getMinSessionCacheSize()
+  {
+    return sessionMinCacheSize;
+  }
+
+  public int getMaxSessionCacheSize()
+  {
+    return sessionMaxCacheSize;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java
new file mode 100644
index 0000000..5b0ea95
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObject.java
@@ -0,0 +1,1688 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.common.revision.CDOList;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.IManyTypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ISingleTypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ObjyMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.SingleReferenceMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListId;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListString;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBase;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyFeatureMapArrayList;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyFeatureMapEntry;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProxy;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.net4j.util.collection.MoveableList;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Relationship_Object;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.VArray_Object;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.as.app.d_Ref_Type;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyObject
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyObject.class);
+
+  protected Class_Object classObject;
+
+  protected ObjyClass objyClass;
+
+  protected Class_Object baseClassObject = null;
+
+  protected Relationship_Object baseRel = null;
+
+  protected boolean hasBaseRelationshipChecked = false;
+
+  protected Relationship_Object revisionsRel = null;
+
+  protected Relationship_Object lastRevisionRel = null;
+
+  protected ooId objectId;
+
+  protected ooId revisionId = null;
+
+  protected int version = Integer.MAX_VALUE;
+
+  public static int fetchCount = 0;
+
+  public static int updateCount = 0;
+
+  public static long createObjectTime = 0;
+
+  public static int createObjectCount = 0;
+
+  // protected boolean isRoot = false;
+
+  // IS: for stats.
+  // public static int count = 0;
+  // public static long tDiff = 0;
+
+  // good for fast access.
+  // private Map<Class_Position, Object> featureMap = new HashMap<Class_Position, Object>();
+  private Map<String, Object> featureMap = new HashMap<String, Object>();
+
+  public ObjyObject(Class_Object classObject)
+  {
+    // long tStart = System.currentTimeMillis();
+
+    this.classObject = classObject;
+    d_Class dClass = classObject.type_of();
+    String fullyQualifiedClassName = null;
+
+    try
+    {
+
+      if (dClass.namespace_name() != null)
+      {
+        fullyQualifiedClassName = dClass.namespace_name() + ":" + dClass.name();
+      }
+      else
+      {
+        fullyQualifiedClassName = dClass.name();
+      }
+
+      objyClass = ObjySchema.getObjyClass(fullyQualifiedClassName);
+
+      // if (dClass.has_base_class(ObjyBase.CLASS_NAME))
+      // {
+      // if (TRACER_DEBUG.isEnabled())
+      // {
+      // TRACER_DEBUG.format("...classObject type: {0} - oid: {1}", classObject.type_of().name(), classObject
+      // .objectID().getStoreString());
+      // }
+      // getBaseRelationship(classObject);
+      // if (!baseRel.exists())
+      // {
+      // // we are the base...
+      // getRevisionsRelationship(classObject);
+      // getLastRevisionRelationship(classObject);
+      // }
+      // else
+      // {
+      // baseClassObject = baseRel.get_class_obj();
+      // // TODO - we might want to delay getting the list of versions unless we need them.
+      // // revisionsRel = baseClassObject.get_relationship(objyClass.resolve_position(ObjyBase.ATT_REVISIONS));
+      // // lastRevisionRel = baseClassObject.get_relationship(objyClass.resolve_position(ObjyBase.ATT_LAST_REVISION));
+      // }
+      // }
+      setObjectId(classObject.objectID());
+      // version = classObject.get_numeric(objyClass.resolve_position(ObjyBase.ATT_VERSION)).intValue();
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    // count++;
+    // tDiff += System.currentTimeMillis() - tStart;
+  }
+
+  private Relationship_Object getLastRevisionRelationship()
+  {
+    if (lastRevisionRel == null)
+    {
+      lastRevisionRel = classObject.nget_relationship(ObjyBase.ATT_LAST_REVISION);
+    }
+    return lastRevisionRel;
+  }
+
+  private Relationship_Object getRevisionsRelationship()
+  {
+    if (revisionsRel == null)
+    {
+      // revisionsRel = classObject.get_relationship(objyClass.resolve_position(ObjyBase.ATT_REVISIONS));
+      revisionsRel = classObject.nget_relationship(ObjyBase.ATT_REVISIONS);
+    }
+    return revisionsRel;
+  }
+
+  private Relationship_Object getBaseRelationship()
+  {
+    if (baseRel == null)
+    {
+      // baseRel = classObject.get_relationship(objyClass.resolve_position(ObjyBase.ATT_BASE));
+      baseRel = classObject.nget_relationship(ObjyBase.ATT_BASE);
+    }
+    return baseRel;
+  }
+
+  public ObjyClass objyClass()
+  {
+    return objyClass;
+  }
+
+  public Class_Object ooClassObject()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    return classObject;
+  }
+
+  public void setObjectId(ooId objectId)
+  {
+    this.objectId = objectId;
+  }
+
+  /**
+   *
+   */
+  public ooId ooId()
+  {
+    return objectId;
+  }
+
+  public void setEContainer(Object containerID)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_CONTAINERID);
+
+    SingleReferenceMapper.INSTANCE.setValue(this, ObjyBase.ATT_CONTAINERID/* position */, containerID);
+  }
+
+  public Object getEContainer()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_CONTAINERID);
+    Object value = SingleReferenceMapper.INSTANCE.getValue(this, ObjyBase.ATT_CONTAINERID/* position */);
+
+    return value;
+  }
+
+  public ooId getEContainerAsOid()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_CONTAINERID);
+    ooId childOid = get_ooId(ObjyBase.ATT_CONTAINERID/* position */);
+    return childOid;
+  }
+
+  public void setEResource(Object resourceID)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_RESOURCEID);
+    SingleReferenceMapper.INSTANCE.setValue(this, ObjyBase.ATT_RESOURCEID/* position */, resourceID);
+
+  }
+
+  public Object getEResource()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_RESOURCEID);
+    Object value = SingleReferenceMapper.INSTANCE.getValue(this, ObjyBase.ATT_RESOURCEID/* position */);
+
+    return value;
+  }
+
+  public ooId getEResourceAsOid()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_RESOURCEID);
+    ooId childOid = get_ooId(ObjyBase.ATT_RESOURCEID/* position */);
+    return childOid;
+  }
+
+  public void setEContainingFeature(int contFeature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_CONTAINER_FEATUERID);
+    set_numeric(ObjyBase.ATT_CONTAINER_FEATUERID/* position */, new Numeric_Value(contFeature));
+  }
+
+  public int getEContainingFeature()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    // Class_Position position = objyClass.resolve_position(ObjyBase.ATT_CONTAINER_FEATUERID);
+    return get_numeric(ObjyBase.ATT_CONTAINER_FEATUERID/* position */).intValue();
+  }
+
+  /**
+   * This is used to cache the composite features, (manyAttributes, manyReference, and featureMap. TBD - verify the need
+   * of this.
+   */
+  // public Object getFeatureList(Class_Position position)
+  // {
+  // return featureMap.get(position);
+  // }
+  public Object getFeatureList(String featureName)
+  {
+    return featureMap.get(featureName);
+  }
+
+  // public void setFeatureList(Class_Position position, Object object)
+  // {
+  // featureMap.put(position, object);
+  // }
+  public void setFeatureList(String featureName, Object object)
+  {
+    featureMap.put(featureName, object);
+  }
+
+  public int getVersion()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    // if (version == Integer.MAX_VALUE)
+    {
+      version = classObject.nget_numeric(ObjyBase.ATT_VERSION).intValue();
+    }
+    return version;
+  }
+
+  public void setVersion(int version)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    classObject.nset_numeric(ObjyBase.ATT_VERSION, new Numeric_Value(version));
+    // getVersion(); // TBD, verify the need for this call!!!!
+    this.version = version;
+  }
+
+  public long getCreationTime()
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    long creationTime = classObject.nget_numeric(ObjyBase.ATT_CREATION_TIME).longValue();
+    return creationTime;
+  }
+
+  public void setCreationTime(long creationTime)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    classObject.nset_numeric(ObjyBase.ATT_CREATION_TIME, new Numeric_Value(creationTime));
+  }
+
+  public long getRevisedTime()
+  {
+    long revisedTime = 0;
+
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        checkSession();
+      }
+      revisedTime = classObject.nget_numeric(ObjyBase.ATT_REVISED_TIME).longValue();
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return revisedTime;
+  }
+
+  public void setRevisedTime(long revisedTime)
+  {
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        checkSession();
+      }
+      classObject.nset_numeric(ObjyBase.ATT_REVISED_TIME, new Numeric_Value(revisedTime));
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public void setBranchId(int branchId)
+  {
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        checkSession();
+      }
+      classObject.nset_numeric(ObjyBase.ATT_BRANCHID, new Numeric_Value(branchId));
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+  }
+
+  public long getBranchId()
+  {
+    int branchId = 0;
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        checkSession();
+      }
+      branchId = classObject.nget_numeric(ObjyBase.ATT_BRANCHID).intValue();
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+    return branchId;
+  }
+
+  public ObjyObject copy(EClass eClass, ObjyObjectManager objyObjectManager)
+  {
+    ObjyObject newObjyObject = null;
+    ooObj obj = ooObj.create_ooObj(objectId);
+    ooObj newObj = (ooObj)obj.copy(obj); // Objy internal copy.
+    // Dependent structures, for example array of refs are not copies, so we
+    // have to iterate and copy (deep copy).
+    // newObjyObject = new ObjyObject(Class_Object.class_object_from_oid(newObj.getOid()));
+    newObjyObject = objyObjectManager.getObject(newObj.getOid());
+
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ObjyObject.copy() - oid:" + ooId().getStoreString() + " version:" + getVersion());
+      }
+      for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+      {
+        if (!(feature instanceof EAttribute || feature instanceof EReference) || !isPersistent(feature))
+        {
+          continue;
+        }
+
+        if (feature.isMany())
+        {
+          // copy this feature to the new object.
+          // copy this feature to the new object.
+          // get the attribute using feature name.
+          d_Attribute attribute = objyClass.resolve_attribute(feature.getName());
+          // System.out.println("... checking feature: " + feature.getName() + - attributeType: "
+          // + attribute.type_of().name());
+          if (attribute != null && attribute.type_of() instanceof d_Ref_Type)
+          {
+            // IS:temptest Class_Position position = objyClass.resolve_position(feature.getName());
+            // ooId refOoId = get_ooId(position);
+            Class_Object cObj = get_class_obj(feature.getName());
+            if (cObj != null)
+            {
+              // System.out.println("\t\t referenced Class_Object with OID: " +cObj.objectID().getStoreString());
+              d_Class refClass = cObj.type_of();
+              String refClassName = refClass.name();
+              if (refClassName.equals(ObjyFeatureMapArrayList.ClassName))
+              {
+                // we'll need to copy this one.
+                TRACER_DEBUG.trace("\t TBD - copying ObjyFeatureMapArrayList attr: " + attribute.name());
+              }
+              else if (refClassName.equals(ObjyArrayListString.ClassName))
+              {
+                // we'll need to copy this one.
+                TRACER_DEBUG.trace("\t TBD - copying ObjyArrayListString attr: " + attribute.name());
+              }
+              else if (refClassName.equals(ObjyArrayListId.className))
+              {
+                // we'll need to copy this one.
+                // System.out.println("\t copying ObjyArrayListId attr: " + attibute.name());
+                ObjyArrayListId arrayListId = new ObjyArrayListId(cObj);
+                ooObj newArrayListId = arrayListId.copy(newObj);
+                newObjyObject.set_ooId(feature.getName(), newArrayListId.getOid());
+              }
+              else if (refClassName.equals(ObjyProxy.className))
+              {
+                // we'll need to copy this one.
+                TRACER_DEBUG.trace("\t TBD - copying ObjyProxy attr: " + attribute.name());
+              }
+            }
+          }
+
+        }
+      }
+    }
+    catch (com.objy.as.asException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return newObjyObject;
+  }
+
+  /**
+   * Use the revision info to update the object in the store.
+   *
+   * @param storeAccessor
+   * @param revision
+   */
+  public void update(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision)
+  {
+    updateCount++;
+
+    try
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        checkSession();
+        TRACER_DEBUG.trace("ObjyObject.update() - oid:" + ooId().getStoreString() + " - version:" + revision.getVersion());
+      }
+
+      // this is done in the updateDate()
+      // setEContainer(revision.getContainerID());
+      // setEResource(revision.getResourceID());
+      // setEContainingFeature(revision.getContainingFeatureID());
+
+      updateData(storeAccessor, revision);
+    }
+    catch (com.objy.as.asException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  /**
+   * Use the revision info to update the object in the store.
+   *
+   * @param storeAccessor
+   * @param revision
+   */
+  private void updateData(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision)
+  {
+    EClass eClass = revision.getEClass();
+
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("=> ObjyObject.updateData() - oid:" + ooId().getStoreString() + //$NON-NLS-1$
+            " - version:" + revision.getVersion()); //$NON-NLS-1$
+      }
+
+      setVersion(revision.getVersion());
+
+      setEContainer(revision.getContainerID());
+      setEResource(revision.getResourceID());
+      setEContainingFeature(revision.getContainingFeatureID());
+      setCreationTime(revision.getTimeStamp());
+      setRevisedTime(revision.getRevised());
+      setBranchId(revision.getBranch().getID());
+
+      for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+      {
+        if (!(feature instanceof EAttribute || feature instanceof EReference) || !isPersistent(feature))
+        {
+          continue;
+        }
+
+        ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+        if (mapper == null)
+        {
+          if (TRACER_DEBUG.isEnabled())
+          {
+            TRACER_DEBUG.trace("In " + ooId().getStoreString() + " - Can't find mapper for feature " + feature.getName());
+          }
+          continue;
+        }
+        // -----------------------------------------------
+        // TODO - this code definitely need refactoring!!!
+        // -----------------------------------------------
+
+        // Class_Position attr = objyClass.resolve_position(feature.getName());
+        if (feature.isMany())
+        {
+          // Object newValue = revision.getValue(feature);
+          // --- TEMP solution to fix one of the tests...
+          CDOList list = revision.getOrCreateList(feature);
+          Object[] values = new Object[list.size()];
+          // we need to pass a list of ooId objects.
+          // TODO - This need some work!!!!
+          for (int i = 0; i < values.length; i++)
+          {
+            // TODO - this code need refactoring...
+            Object value = list.get(i);
+            if (null == value)
+            {
+              values[i] = value;
+              continue;
+            }
+            else if (value instanceof CDOIDExternal)
+            {
+              TRACER_DEBUG.trace("... CDOIDExternal inserted, at:" + i + ", content:" + ((CDOIDExternal)value).getURI());
+              // System.out.println("value is a proxy object - it should be handled by the mapper.");
+              // create an ObjyProxy object to hold the the value.
+              ObjyProxy proxyObject = ObjyProxy.createObject(ooId());
+              proxyObject.setUri(((CDOIDExternal)value).getURI());
+              values[i] = proxyObject.ooId();
+
+            }
+            else if (value instanceof CDOID)
+            {
+              values[i] = OBJYCDOIDUtil.getooId((CDOID)value);
+            }
+            else if (value instanceof FeatureMap.Entry)
+            {
+              FeatureMap.Entry entry = (FeatureMap.Entry)value;
+              EStructuralFeature entryFeature = entry.getEStructuralFeature();
+              Object entryValue = entry.getValue();
+
+              ooId oid = null;
+              if (entryValue instanceof CDOIDExternal)
+              {
+                TRACER_DEBUG.trace("... CDOIDExternal inserted, at:" + i + ", content:" + ((CDOIDExternal)entryValue).getURI());
+                // System.out.println("value is a proxy object - it should be handled by the mapper.");
+                // create an ObjyProxy object to hold the the value.
+                ObjyProxy proxyObject = ObjyProxy.createObject(ooId());
+                proxyObject.setUri(((CDOIDExternal)entryValue).getURI());
+                oid = proxyObject.ooId();
+              }
+              else if (entryValue instanceof CDOID)
+              {
+                oid = OBJYCDOIDUtil.getooId((CDOID)entryValue);
+              }
+              else
+              {
+                if (TRACER_DEBUG.isEnabled())
+                {
+                  TRACER_DEBUG.trace("OBJY: don't know what kind of entryValue is this!!! - " + entryValue);
+                }
+              }
+              // FeatureMapEntry is a presistent class.
+              ObjyFeatureMapEntry featureMapEntry = new ObjyFeatureMapEntry(entryFeature.getFeatureID(), oid, objectId);
+
+              // this.cluster(featureMapEntry);
+              values[i] = featureMapEntry;
+            }
+            else if (value.equals(InternalCDOList.UNINITIALIZED))
+            {
+              TRACER_DEBUG.format("...GOT UNINITIALIZED at {0}, listSize:{1}, feature:{2}, oid:{3}", i, values.length, feature.getName(),
+                  objectId.getStoreString());
+              continue;
+            }
+            else
+            {
+              // different feature then.
+              values[i] = value;
+            }
+          }
+
+          ((IManyTypeMapper)mapper).setAll(this, feature, 0, values);
+        }
+        else
+        {
+          Object newValue = revision.get(feature, feature.getFeatureID());
+          // if (newValue instanceof CDOIDExternal)
+          // {
+          // System.out.println("value is a proxy object");
+          // }
+          ((ISingleTypeMapper)mapper).setValue(this, feature, newValue);
+        }
+      }
+    }
+    catch (com.objy.as.asException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public ObjyObject getLastRevision(ObjyObjectManager objyObjectManager)
+  {
+    if (!getLastRevisionRelationship().exists())
+    {
+      return this;
+    }
+
+    // Class_Object lastRevision = lastRevisionRel.get_class_obj();
+    ooId lastRevisionOid = getLastRevisionRelationship().get_ooId();
+    // return new ObjyObject(lastRevision);
+    return objyObjectManager.getObject(lastRevisionOid);
+  }
+
+  public ObjyObject getRevisionByVersion(int version, long branchId, ObjyObjectManager objyObjectManager)
+  {
+    ObjyObject objyRevision = null;
+    int objectVersion = getVersion();
+    long objectBranchId = getBranchId();
+
+    if (branchId == objectBranchId && Math.abs(objectVersion) == version)
+    {
+      // there is a first time for everything...
+      return this;
+    }
+
+    // check last revision first.
+    objyRevision = getLastRevision(objyObjectManager);
+    objectVersion = objyRevision.getVersion();
+    objectBranchId = objyRevision.getBranchId();
+    if (branchId == objectBranchId && Math.abs(objectVersion) == version)
+    {
+      return objyRevision;
+    }
+
+    // Session.getCurrent().setReturn_Class_Object(true);
+    // int numRevisions = (int) revisions.size();
+
+    @SuppressWarnings("unchecked")
+    Iterator<ooObj> itr = getRevisionsRelationship().get_iterator();
+    while (itr.hasNext())
+    {
+      // objyRevision = new ObjyObject(itr.next());
+      objyRevision = objyObjectManager.getObject(itr.next().getOid());
+      objectVersion = objyRevision.getVersion();
+      objectBranchId = objyRevision.getBranchId();
+      if (branchId == objectBranchId && Math.abs(objectVersion) == version)
+      {
+        return objyRevision;
+      }
+      objyRevision = null;
+    }
+
+    return null;
+  }
+
+  public void addToRevisions(ObjyObject objyRevision)
+  {
+    try
+    {
+      getRevisionsRelationship().add(objyRevision.objectId);
+      // set it as last rev.
+      getLastRevisionRelationship().clear(); // Ouch!! performance issue...
+      getLastRevisionRelationship().form(objyRevision.objectId);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  // /**
+  // * Wrapper around ObjyObject to allow clustering of other objects near this one.
+  // */
+  // private void cluster(ooObj otherObj)
+  // {
+  // try
+  // {
+  // ooObj thisObj = ooObj.create_ooObj(objectId);
+  // thisObj.cluster(otherObj);
+  // }
+  // catch (ObjyRuntimeException ex)
+  // {
+  // ex.printStackTrace();
+  // }
+  // }
+
+  /**
+   * Fetch data from the store and return a revision.
+   */
+  public boolean fetch(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision, int listChunk)
+  {
+    boolean bRet = true;
+    fetchCount++;
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    EClass eClass = revision.getEClass();
+
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ObjyObject.fetch() - oid:" + ooId().getStoreString() + " version:" + getVersion());
+      }
+      // Put the version of the objects;
+      revision.setVersion(getVersion());
+      revision.setContainerID(getEContainer());
+      revision.setResourceID((CDOID)getEResource());
+      revision.setContainingFeatureID(getEContainingFeature());
+      long creationTime = getCreationTime();
+      long revisedTime = getRevisedTime();
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("... ObjyObject.creationTime: " + creationTime);
+        TRACER_DEBUG.trace("... ObjyObject.revisedTime : " + revisedTime);
+      }
+
+      revision.setRevised(revisedTime);
+
+      for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+      {
+        if (!(feature instanceof EAttribute || feature instanceof EReference) || !isPersistent(feature))
+        {
+          continue;
+        }
+
+        if (feature.isMany())
+        {
+          int featureSize = size(feature);
+          int chunkSize = featureSize;
+          if (listChunk != CDORevision.UNCHUNKED && listChunk > 0)
+          {
+            chunkSize = Math.min(chunkSize, listChunk);
+          }
+
+          Object[] objects = getAll(feature, 0, chunkSize);
+          // if (size > 0)
+          {
+            // TODO - we could use getList() then fill the array with values, we
+            // also
+            // need to consider the chunking...
+            // InternalCDOList cdoList =
+            // (InternalCDOList)CDOListFactory.DEFAULT.createList(objects.length,
+            // objects.length, 0);
+            // TODO - use the following line instead of creating the cdoList
+            // above.
+            MoveableList<Object> list = revision.getOrCreateList(feature);
+
+            // size = Math.min(size, 0);
+            for (int i = 0; i < chunkSize; i++)
+            {
+              if (objects[i] instanceof ooId)
+              {
+                // TODO - this code need refactoring....
+                CDOID cdoId = null;
+                ooId objyOid = (ooId)objects[i];
+                if (objyOid.isNull())
+                {
+                  cdoId = OBJYCDOIDUtil.getCDOID(objyOid);
+                }
+                else
+                {
+                  Class_Object refClassObject = Class_Object.class_object_from_oid((ooId)objects[i]);
+
+                  if (refClassObject.type_of().name().equals(ObjyProxy.className))
+                  {
+                    // System.out.println("OBJY: Got proxy: " + refClassObject.objectID().getStoreString());
+                    ObjyProxy proxyObject = new ObjyProxy(refClassObject);
+                    // cdoList.set(i,
+                    // OBJYCDOIDUtil.createCDIDExternal(proxyObject));
+                    cdoId = OBJYCDOIDUtil.createCDIDExternal(proxyObject);
+                  }
+                  else
+                  {
+                    cdoId = OBJYCDOIDUtil.getCDOID(objyOid);
+                  }
+                  refClassObject = null;
+                }
+                list.add(cdoId);
+
+                continue;
+              }
+              else if (objects[i] instanceof ObjyFeatureMapEntry)
+              {
+                FeatureMap.Entry entry = getFeatureMapEntry(eClass, (ObjyFeatureMapEntry)objects[i]);
+                list.add(entry);
+              }
+              else
+              {
+                // different feature then.
+                // System.out.println("-->> Hmmm fetch() feature (" + i + ") -> feature:" + feature.getName()
+                // + " - value:" + objects[i]);
+                // cdoList.set(i, objects[i]);
+                list.add(objects[i]);
+              }
+            }
+            // fill the rest if needed.
+            if (featureSize - chunkSize > 0)
+            {
+              for (int i = 0; i < featureSize - chunkSize; i++)
+              {
+                list.add(InternalCDOList.UNINITIALIZED);
+              }
+            }
+          }
+        }
+        else
+        {
+          Object object = get(feature, 0);
+
+          /**
+           * TODO - verify if this is needed for 2.x if (cdoFeature.getType() == CDOType.CUSTOM) { object =
+           * EcoreUtil.convertToString((EDataType)eFeature.getEType(), object); }
+           */
+          revision.set(feature, 0, object);
+        }
+      }
+    }
+    catch (com.objy.as.asException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return bRet;
+  }
+
+  /**
+   * Fetch data for a specific feature from the store, and return a list of objects. Used by
+   * ObjectivityStoreChunkAccessor
+   */
+  public List<Object> fetchList(ObjectivityStoreAccessor storeAccessor, EStructuralFeature feature, int startIndex, int chunkSize)
+  {
+    fetchCount++;
+
+    List<Object> results = new ArrayList<Object>();
+    EClass eClass = feature.getEContainingClass();
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    try
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("ObjyObject.fetch() - feature:" + feature.getName() + "from Object: " + ooId().getStoreString() + " version:" + getVersion());
+      }
+      int featureSize = size(feature);
+      chunkSize = Math.min(featureSize - startIndex, chunkSize);
+
+      Object[] objects = getAll(feature, startIndex, chunkSize);
+      convertToCdoList(objects, results, eClass, chunkSize);
+    }
+    catch (com.objy.as.asException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return results;
+  }
+
+  /**
+   * Function thats takes a list of Objy objects and convert them to CDO IDs This function is used by queryXRefs() as
+   * well.
+   */
+  protected void convertToCdoList(Object[] objects, List<Object> results, EClass eClass, int chunkSize)
+  {
+    {
+      for (int i = 0; i < chunkSize; i++)
+      {
+        if (objects[i] instanceof ooId)
+        {
+          // TODO - this code need refactoring....
+
+          // System.out.println("-->> IS: getting Class_Object from OID: "
+          // + childObject.getStoreString());
+          CDOID cdoId = null;
+          ooId objyOid = (ooId)objects[i];
+          if (objyOid.isNull())
+          {
+            cdoId = OBJYCDOIDUtil.getCDOID(objyOid);
+          }
+          else
+          {
+            Class_Object refClassObject = Class_Object.class_object_from_oid(objyOid);
+
+            if (refClassObject.type_of().name().equals(ObjyProxy.className))
+            {
+              ObjyProxy proxyObject = new ObjyProxy(refClassObject);
+              cdoId = OBJYCDOIDUtil.createCDIDExternal(proxyObject);
+            }
+            else
+            {
+              cdoId = OBJYCDOIDUtil.getCDOID(objyOid);
+            }
+            refClassObject = null;
+          }
+
+          results.add(cdoId);
+          continue;
+
+        }
+        else if (objects[i] instanceof ObjyFeatureMapEntry)
+        {
+          FeatureMap.Entry entry = getFeatureMapEntry(eClass, (ObjyFeatureMapEntry)objects[i]);
+          results.add(entry);
+        }
+      }
+    }
+  }
+
+  private FeatureMap.Entry getFeatureMapEntry(EClass eClass, ObjyFeatureMapEntry mapEntry)
+  {
+    ooId oid = mapEntry.getObject();
+    CDOID id = null;
+    Class_Object refClassObject = Class_Object.class_object_from_oid(oid);
+    if (refClassObject.type_of().name().equals(ObjyProxy.className))
+    {
+      ObjyProxy proxyObject = new ObjyProxy(refClassObject);
+      id = OBJYCDOIDUtil.createCDIDExternal(proxyObject);
+    }
+    else
+    {
+      id = OBJYCDOIDUtil.getCDOID(oid);
+    }
+
+    EStructuralFeature entryFeature = eClass.getEStructuralFeature(mapEntry.getTagId());
+    FeatureMap.Entry entry = CDORevisionUtil.createFeatureMapEntry(entryFeature, id);
+    return entry;
+  }
+
+  /**
+   * Get the size of the composite object using the store info.
+   *
+   * @param feature
+   * @return
+   */
+  private int size(EStructuralFeature feature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+    int size = 0;
+
+    // Class_Position position = objyClass().resolve_position(feature.getName());
+    try
+    {
+      IManyTypeMapper mapper = (IManyTypeMapper)ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      size = mapper.size(this, feature);
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        // TODO - verify the message.
+        TRACER_DEBUG.trace("Size of object " + ooId().getStoreString() + " - is: " + size + " - feature: " + feature.getName());
+      }
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+    return size;
+  }
+
+  /**
+   * Get the value of an attribute from the persistent object.
+   */
+  public Object get(EStructuralFeature feature)
+  {
+    if (feature.isMany())
+    {
+      return getAll(feature, 0, CDORevision.UNCHUNKED);
+    }
+    return get(feature, 0);
+  }
+
+  /**
+   * Get the value of an attribute at index (if many) from the persistent object.
+   *
+   * @param feature
+   * @param index
+   * @return
+   */
+  private Object get(EStructuralFeature feature, int index)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+    }
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      // TODO - verify the message.
+      TRACER_DEBUG.trace("Getting object " + objectId.getStoreString() + " <feature ' " + feature.getName() + "':" + feature.getEType() + "> from " + this);
+    }
+
+    // Class_Position position =
+    // this.objyClass().resolve_position(feature.getName());
+
+    ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+    Object value = null;
+    try
+    {
+      if (feature.isMany())
+      {
+        value = ((IManyTypeMapper)mapper).getValue(this, feature, index);
+      }
+      else
+      {
+        value = ((ISingleTypeMapper)mapper).getValue(this, feature);
+      }
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+    return value;
+  }
+
+  /**
+   * Get all the values of an attribute, used for feature.isMany(). This function is also used by the
+   * ObjectivityStoreChunkReader to read chunks of data from a feature.
+   *
+   * @param feature
+   * @param size
+   * @return
+   */
+  protected Object[] getAll(EStructuralFeature feature, int startIndex, int chunkSize)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      // TODO - verify the message.
+      TRACER_DEBUG.trace("Get All objects for ID: " + ooId().getStoreString() + " <feature ' " + feature/*
+                                                                                                         * .getName( )
+                                                                                                         */
+          + "':" + feature.getEType() + "> from " + this);
+    }
+
+    assert feature.isMany();
+    Object[] values = null;
+
+    try
+    {
+      IManyTypeMapper mapper = (IManyTypeMapper)ObjyMapper.INSTANCE.getTypeMapper(feature);
+      values = mapper.getAll(this, feature, startIndex, chunkSize);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return values;
+  }
+
+  public void add(EStructuralFeature feature, int index, Object value)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      TRACER_DEBUG.trace("Adding object " + value + " to " + ooId().getStoreString());
+    }
+
+    assert feature.isMany();
+
+    try
+    {
+      IManyTypeMapper mapper = (IManyTypeMapper)ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      // -- TODO -- verify the need to this one.
+      // ensureObjectAttached(feature, value);
+
+      // I believe we do the conversion in the add()
+      // value = provider.convertToStore(ooObject, value);
+
+      mapper.add(this, feature, index, value);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  /***
+   * @param feature
+   */
+  public void clear(EStructuralFeature feature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      TRACER_DEBUG.trace("Clear List for " + ooId().getStoreString());
+    }
+
+    // Class_Position position = objyClass.resolve_position(feature.getName());
+    try
+    {
+      ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      ((IManyTypeMapper)mapper).clear(this, feature);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public void move(EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      TRACER_DEBUG.trace("Move element from " + sourceIndex + " to " + targetIndex);
+    }
+    try
+    {
+      ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      ((IManyTypeMapper)mapper).move(this, feature, targetIndex, sourceIndex);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public Object remove(EStructuralFeature feature, int index)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      TRACER_DEBUG.trace("Remove object from '" + ooId().getStoreString() + "' at index " + index);
+    }
+
+    // Class_Position position = objyClass.resolve_position(feature.getName());
+    Object retObject = null;
+
+    try
+    {
+      IManyTypeMapper mapper = (IManyTypeMapper)ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      Object value = mapper.remove(this, feature, index);
+
+      if (feature instanceof EAttribute)
+      {
+        return value;
+      }
+
+      retObject = OBJYCDOIDUtil.getCDOID((ooId)value);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return retObject;
+
+  }
+
+  public Object set(EStructuralFeature feature, int index, Object value)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      checkSession();
+      TRACER_DEBUG.trace("Set object '" + ooId().getStoreString() + "' feature : " + feature.getName());
+    }
+
+    /*
+     * int i =0; for (EClass superEClass : object.eClass().getESuperTypes()) { if
+     * (feature.getEContainingClass().isSuperTypeOf(superEClass)) { break; } i++; break; } String className = null; if
+     * (i == 0) { className = EProposedManager.getObjectivityClass(feature.getEContainingClass()); } else { className =
+     * EProposedManager.getObjectivityClass(feature.getEContainingClass(), true); } Class_Position position =
+     * ooObject.ooClass().resolve_position(className + "::" + feature.getName());
+     */
+    // Class_Position position = objyClass.resolve_position(feature.getName());
+    try
+    {
+      ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+      // --- TODO --- verify the need...
+      // ensureObjectAttached(this, feature, value);
+
+      /***
+       * I believe we do the conversion in the setValue if (feature instanceof EReference) { value =
+       * CDOIDUtil.getooId((CDOID)value); }
+       ***/
+
+      if (feature.isMany())
+      {
+        ((IManyTypeMapper)mapper).setValue(this, feature, index, value);
+      }
+      else
+      {
+        ((ISingleTypeMapper)mapper).setValue(this, feature, value);
+      }
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return value;
+  }
+
+  /***
+   * @param feature
+   */
+  public void unset(EStructuralFeature feature)
+  {
+    set(feature, 0, null);
+  }
+
+  protected void checkSession()
+  {
+    // 100610 - IS: disabled for now, since we have an issue with oojava_epl.jar "getSession()"
+    // is not available.
+    // if (TRACER_DEBUG.isEnabled())
+    // {
+    // try
+    // {
+    // if (!classObject.getPersistor().getSession().isOpen())
+    // {
+    // throw new Exception("Attempt to work on an object " + objectId.toString() + " without a trx. [Session: "
+    // + classObject.getPersistor().getSession() + "]");
+    // }
+    // }
+    // catch (Exception ex)
+    // {
+    // ex.printStackTrace();
+    // } // for debugging.
+    // }
+  }
+
+  /***
+   * Iterate over the attributes and references and mark them deleted. This will only be called in non-audit mode.
+   */
+  public void delete(ObjectivityStoreAccessor storeAccessor, ObjyObjectManager objectManager)
+  {
+    EClass eClass = ObjySchema.getEClass(storeAccessor.getStore(), objyClass());
+    try
+    {
+      for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+      {
+        if (!(feature instanceof EAttribute || feature instanceof EReference) || !isPersistent(feature))
+        {
+          continue;
+        }
+
+        if (feature.isMany())
+        {
+          deleteFeatureObjects(objectManager, feature);
+        }
+        else
+        {
+          ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+
+          if (mapper == null)
+          {
+            continue;
+          }
+          mapper.delete(this, feature);
+        }
+      }
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  private void deleteFeatureObjects(ObjyObjectManager objectManager, EStructuralFeature feature)
+  {
+    // TODO - verify that we can do this to all referenced list.
+    // I'm not sure if it's valid when you have many-many relationship.
+    Object[] objects = getAll(feature, 0, CDORevision.UNCHUNKED);
+
+    if (objects == null)
+    {
+      return;
+    }
+
+    for (int i = 0; i < objects.length; i++)
+    {
+      if (objects[i] instanceof ooId)
+      {
+        ooId oid = (ooId)objects[i];
+        // TODO - this code need refactoring....
+        ooObj obj = ooObj.create_ooObj(oid);
+        if (obj.isDead())
+        {
+          continue;
+        }
+
+        Class_Object refClassObject = Class_Object.class_object_from_oid(oid);
+
+        if (refClassObject.type_of().name().equals(ObjyProxy.className))
+        {
+          obj.delete();
+        }
+        else
+        {
+          // if this object is a parent (resourceId or
+          // containerId) for obj, then we
+          // need to mark obj version as (-1).
+          ObjyObject childObjyObject = objectManager.getObject(oid);
+          ooId containerId = childObjyObject.getEContainerAsOid();
+          ooId resourceId = childObjyObject.getEResourceAsOid();
+          int childVersion = childObjyObject.getVersion();
+          if (containerId.equals(objectId) || resourceId.equals(objectId))
+          {
+            childObjyObject.setVersion(-childVersion);
+          }
+
+        }
+      }
+      else if (objects[i] instanceof ObjyFeatureMapEntry)
+      {
+        ObjyFeatureMapEntry mapEntry = (ObjyFeatureMapEntry)objects[i];
+        ooId oid = mapEntry.getObject();
+        ooObj obj = ooObj.create_ooObj(oid);
+        obj.delete();
+      }
+      else
+      {
+        // different feature then.
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG
+              .trace("-->> No process to delete() feature (" + i + ") -> feature:" + feature.getName() + " - value:" + objects[i] + " ... nothing to do here.");
+        }
+      }
+    }
+  }
+
+  // Wrapper functions over class object.
+  // public Numeric_Value get_numeric(Class_Position position)
+  // {
+  // return classObject.get_numeric(position);
+  // }
+  public Numeric_Value get_numeric(String attributeName)
+  {
+    return classObject.nget_numeric(attributeName);
+  }
+
+  // public String_Value get_string(Class_Position position)
+  // {
+  // return classObject.get_string(position);
+  // }
+  public String_Value get_string(String attributeName)
+  {
+    return classObject.nget_string(attributeName);
+  }
+
+  // public void set_numeric(Class_Position position, Numeric_Value value)
+  // {
+  // classObject.set_numeric(position, value);
+  // }
+  public void set_numeric(String attributeName, Numeric_Value value)
+  {
+    classObject.nset_numeric(attributeName, value);
+  }
+
+  // public VArray_Object get_varray(Class_Position position)
+  // {
+  // return classObject.get_varray(position);
+  // }
+  public VArray_Object get_varray(String attributeName)
+  {
+    return classObject.nget_varray(attributeName);
+  }
+
+  // public ooId get_ooId(Class_Position position)
+  // {
+  // return classObject.get_ooId(position);
+  // }
+  public ooId get_ooId(String attributeName)
+  {
+    return classObject.nget_ooId(attributeName);
+  }
+
+  // public Class_Object get_class_obj(Class_Position position)
+  // {
+  // return classObject.get_class_obj(position);
+  // }
+
+  public Class_Object get_class_obj(String attributeName)
+  {
+    return classObject.nget_class_obj(attributeName);
+  }
+
+  // public void set_ooId(Class_Position position, ooId object)
+  // {
+  // classObject.set_ooId(position, object);
+  // }
+
+  public void set_ooId(String attributeName, ooId object)
+  {
+    classObject.nset_ooId(attributeName, object);
+  }
+
+  /**
+   * Return the CDOID for the ObjyObject, it will go up to the base revision, and return it's ID.
+   */
+  public CDOID getRevisionId()
+  {
+    if (revisionId == null)
+    {
+      if (hasBaseRelationship())
+      {
+        baseClassObject = getBaseRelationship().get_class_obj();
+        revisionId = baseClassObject.objectID();
+      }
+      else
+      {
+        revisionId = objectId;
+      }
+    }
+
+    return OBJYCDOIDUtil.getCDOID(revisionId);
+  }
+
+  public ObjyObject getBaseObject()
+  {
+    ObjyObject objyObject = null;
+    if (hasBaseRelationship())
+    {
+      baseClassObject = getBaseRelationship().get_class_obj();
+      objyObject = new ObjyObject(baseClassObject);
+    }
+    else
+    {
+      objyObject = this;
+    }
+    return objyObject;
+  }
+
+  private boolean hasBaseRelationship()
+  {
+    if (!hasBaseRelationshipChecked)
+    {
+      hasBaseRelationshipChecked = getBaseRelationship().exists();
+    }
+    return hasBaseRelationshipChecked;
+  }
+
+  // private boolean hasRevisionsRelationship()
+  // {
+  // if (!hasRevisionsRelChecked)
+  // {
+  // hasRevisionsRelChecked = getRevisionsRelationship().exists();
+  // }
+  // return hasRevisionsRelChecked;
+  // }
+  //
+  // private boolean hasLastRevisionRelationship()
+  // {
+  // if (!hasLastRevisionRelChecked)
+  // {
+  // hasLastRevisionRelChecked = getLastRevisionRelationship().exists();
+  // }
+  // return hasLastRevisionRelChecked;
+  // }
+
+  /**
+   * Return the revision that satisfies the timeStamp and branchId constrains.
+   *
+   * @param objyObjectManager
+   */
+  public ObjyObject getRevision(long timeStamp, int branchId, ObjyObjectManager objyObjectManager)
+  {
+    ObjyObject objyRevision = null;
+
+    // // evaluate current first.
+    // if (evaluateRevision(timeStamp, branchId, this))
+    // {
+    // return this;
+    // }
+    //
+    // // if we don't have other revisions.
+    // if (!getLastRevisionRelationship().exists())
+    // {
+    // return null;
+    // }
+
+    // check last revision first.
+    objyRevision = getLastRevision(objyObjectManager);
+    if (evaluateRevision(timeStamp, branchId, objyRevision))
+    {
+      return objyRevision;
+    }
+
+    ObjyObject possibleRevision = null;
+
+    // check first revision.
+    if (evaluateRevision(timeStamp, branchId, this))
+    {
+      possibleRevision = this;
+    }
+
+    @SuppressWarnings("unchecked")
+    Iterator<ooObj> itr = getRevisionsRelationship().get_iterator();
+    while (itr.hasNext())
+    {
+      // objyRevision = new ObjyObject(itr.next());
+      objyRevision = objyObjectManager.getObject(itr.next().getOid());
+      if (evaluateRevision(timeStamp, branchId, objyRevision))
+      {
+        possibleRevision = objyRevision;
+      }
+    }
+
+    return possibleRevision;
+  }
+
+  /**
+   * return true if the objyRevision satisfies the constrains. This function is only called in case of auditing, and
+   * branching.
+   */
+  protected boolean evaluateRevision(long timeStamp, int branchId, ObjyObject objyRevision)
+  {
+    // check the branchId first.
+    if (objyRevision.getBranchId() == branchId)
+    {
+      // long revisedTS = objyRevision.getRevisedTime();
+      // if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE)
+      // {
+      // long creationTS = objyRevision.getCreationTime();
+      // if (creationTS <= timeStamp && (revisedTS == CDOBranchPoint.UNSPECIFIED_DATE || revisedTS >= timeStamp))
+      // // if (creationTS >= timeStamp && (revisedTS == CDOBranchPoint.UNSPECIFIED_DATE || revisedTS <= timeStamp))
+      // {
+      // return true;
+      // }
+      // }
+      // else if (revisedTS == CDOBranchPoint.UNSPECIFIED_DATE) // return the latest version in that branch.
+      // {
+      // return true;
+      // }
+
+      long creationTS = objyRevision.getCreationTime();
+      long revisedTS = objyRevision.getRevisedTime();
+      if (CDOCommonUtil.isValidTimeStamp(timeStamp, creationTS, revisedTS))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public void detach(int version, CDOBranch branch, long timeStamp)
+  {
+    ObjyClass objyClass = ObjySchema.getObjyClass(ObjyBase.CLASS_NAME);
+    Class_Object detachedClassObject = Class_Object.new_persistent_object(objyClass.getASClass(), objectId, false);
+    if (TRACER_DEBUG.isEnabled())
+    {
+      ObjyObjectManager.newInternalObjCount++;
+    }
+    ObjyObject detachedObjyObject = null;
+
+    try
+    {
+      detachedObjyObject = new ObjyObject(detachedClassObject);
+
+      detachedObjyObject.setVersion(-(version + 1));
+      detachedObjyObject.setBranchId(branch.getID());
+      detachedObjyObject.setCreationTime(timeStamp);
+
+      // add it to the revisions.
+      addToRevisions(detachedObjyObject);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public static boolean isPersistent(EStructuralFeature feature)
+  {
+    return EMFUtil.isPersistent(feature);
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.java
new file mode 100644
index 0000000..c74a789
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyObjectManager.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2010-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.clustering.ObjyPlacementManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ObjyMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.ooId;
+
+import java.util.WeakHashMap;
+
+public class ObjyObjectManager
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyObjectManager.class);
+
+  // private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyObjectManager.class);
+
+  // private Map<Long, ObjyObject> idToObjyObjectMap = new ReferenceValueMap.Weak<Long, ObjyObject>();
+  private WeakHashMap<Long, ObjyObject> idToObjyObjectMap = new WeakHashMap<Long, ObjyObject>();
+
+  private ObjyPlacementManager globalPlacementManager = null;
+
+  public static int newObjCount = 0;
+
+  public static int newInternalObjCount = 0;
+
+  public static long getObjectTime = 0;
+
+  public static long updateObjectTime = 0;
+
+  public static long resourceCheckAndUpdateTime = 0;
+
+  public ObjyObjectManager(ObjyPlacementManager placementManager)
+  {
+    globalPlacementManager = placementManager;
+  }
+
+  public int sizeOfObjectMap()
+  {
+    return idToObjyObjectMap.size();
+  }
+
+  /**
+   *
+   */
+  public ObjyObject newObject(EClass eClass, ooId nearObject)
+  {
+    if (nearObject == null)
+    {
+      // TODO - we might need to use annotation for placement.
+      nearObject = globalPlacementManager.getNearObject(null, null, eClass);
+    }
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Create new object of type " + eClass.getName() + " near object " + (nearObject != null ? nearObject.getStoreString() : null));
+    }
+
+    Class_Object newClassObject = newClassObject(eClass, nearObject);
+    ObjyObject objyObject = new ObjyObject(newClassObject);
+    // idToObjyObjectMap.put(OBJYCDOIDUtil.getLong(objyObject.ooId()), objyObject);
+    if (TRACER_DEBUG.isEnabled())
+    {
+      newObjCount++;
+    }
+    return objyObject;
+  }
+
+  /**
+   * @param eClass
+   * @return
+   */
+  // public Class_Object newClassObject(EClass eClass, ooId nearObject)
+  // {
+  // return newClassObject(eClass, nearObject/*, null*/);
+  // }
+
+  /**
+   * Creates an Objy 'Class_Object' from an eClass. This will construct a shell Class_Object in the store using the
+   * schema.
+   */
+  private Class_Object newClassObject(EClass eClass, ooId nearObject/* , InitializeValue init */)
+  {
+
+    // we don create classes on the fly...
+    // TODO - can we pre-create using the model?
+    ObjyClass objyClass = ObjySchema.getOrCreate(eClass);
+
+    // System.out.println(">> Create new object of type " + eClass.getName() + " near object " + (nearObject != null ?
+    // nearObject
+    // .getStoreString() : null));
+
+    Class_Object newClassObject = Class_Object.new_persistent_object(objyClass.getASClass(), nearObject, false);
+    if (TRACER_DEBUG.isEnabled())
+    {
+      ObjyObjectManager.newInternalObjCount++;
+    }
+
+    // if (init != null)
+    // {
+    // init.init(newClassObject);
+    // }
+
+    // Initialize the object
+    for (EStructuralFeature feature : eClass.getEAllStructuralFeatures())
+    {
+      if (!(feature instanceof EAttribute || feature instanceof EReference) || !ObjyObject.isPersistent(feature))
+      {
+        continue;
+      }
+
+      ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+      if (mapper == null)
+      {
+        if (TRACER_DEBUG.isEnabled())
+        {
+          TRACER_DEBUG.trace("Can't find mapper for feature " + feature.getName());
+        }
+        continue;
+      }
+
+      // Class_Position attr = objyClass.resolve_position(feature.getName());
+
+      mapper.initialize(newClassObject, feature);
+
+      // TODO - verify the need for this (see ESessionImpl in the old code)
+      // if (init != null)
+      // {
+      // init.init(feature);
+      // }
+    }
+    return newClassObject;
+  }
+
+  /**
+   * return an ObjyObject based on the id passed. usually this is used for existing object when trying to modify them.
+   */
+  public ObjyObject getObject(CDOID id)
+  {
+    if (id == null)
+    {
+      return null;
+    }
+
+    ooId oid = OBJYCDOIDUtil.getooId(id);
+    return getObject(oid);
+  }
+
+  /**
+   * return an ObjyObject based on the ooId passed.
+   */
+  public ObjyObject getObject(ooId oid)
+  {
+    ObjyObject objyObject = null;
+    if (oid == null)
+    {
+      return objyObject;
+    }
+
+    // System.out.println("ObjyObjectManager.getObject_ooId("+oid.getStoreString()+")");
+    objyObject = idToObjyObjectMap.get(OBJYCDOIDUtil.getLong(oid));
+    if (objyObject == null)
+    {
+      try
+      {
+        objyObject = getObjectFromClassObject(Class_Object.class_object_from_oid(oid));
+      }
+      catch (ObjyRuntimeException ex)
+      {
+        ex.printStackTrace();
+      }
+    }
+
+    return objyObject;
+  }
+
+  /***
+   * The following are utility function that get the base attributes from the object.
+   *
+   * @param objyObject
+   * @return replaced by the ones in ObjyObject. public Object getEContainer(ObjyObject objyObject) { Class_Position
+   *         position = objyObject.objyClass().resolve_position(ooBaseClass.ClassName_containerid); ooId oid = (ooId)
+   *         SingleReferenceMapper.INSTANCE.getValue(objyObject, null, position, 0); return getObject(oid); } public
+   *         Object getEResource(ObjyObject objyObject) { Class_Position position =
+   *         objyObject.objyClass().resolve_position(ooBaseClass.ClassName_resourceid); ooId oid = (ooId)
+   *         SingleReferenceMapper.INSTANCE.getValue(objyObject, null, position, 0); return getObject(oid); } public int
+   *         getEContainingFeature(ObjyObject objyObject) { Class_Position position =
+   *         objyObject.objyClass().resolve_position(ooBaseClass.ClassName_containerfeatureid); Integer value =
+   *         (Integer)IntegerTypeMapper.INSTANCE.getValue(objyObject, null, position, 0); return value == null ? 0 :
+   *         value; } public void setEContainer(ObjyObject objyObject, Object containerID) { //containerID =
+   *         provider.convertToStore(ooObject, containerID); Class_Position position =
+   *         objyObject.objyClass().resolve_position(ooBaseClass.ClassName_containerid);
+   *         SingleReferenceMapper.INSTANCE.setValue(objyObject, null, position, 0, containerID); } public void
+   *         setEResource(ObjyObject objyObject, Object resourceID) { //resourceID = provider.convertToStore(ooObject,
+   *         resourceID); Class_Position position =
+   *         objyObject.objyClass().resolve_position(ooBaseClass.ClassName_resourceid);
+   *         SingleReferenceMapper.INSTANCE.setValue(objyObject, null, position, 0, resourceID); } public void
+   *         setEContainingFeature(ObjyObject objyObject, int containerID) { Class_Position position =
+   *         objyObject.objyClass().resolve_position(ooBaseClass.ClassName_containerfeatureid);
+   *         IntegerTypeMapper.INSTANCE.setValue(objyObject, null, position, 0, containerID); }
+   */
+
+  /**
+   * Construct an ObjyObject from an existing Class_Object and add it to the idToObjyObjectMap.
+   *
+   * @param classObject
+   * @return
+   */
+  private ObjyObject getObjectFromClassObject(Class_Object classObject)
+  {
+    ObjyObject objyObject = new ObjyObject(classObject);
+    idToObjyObjectMap.put(OBJYCDOIDUtil.getLong(objyObject.ooId()), objyObject);
+    return objyObject;
+  }
+
+  /***
+   * TODO - Remove the eClass and just use the objyObject attributes to do the clean up.
+   *
+   * @param objyObject
+   */
+  public void remove(ObjyObject objyObject)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("ObjyObjectManager.delete(" + objyObject.ooId().getStoreString() + ")");
+    }
+
+    // //remove it from it's resource.
+    // Object resource = objyObject.getEResource();
+    // // locate the ObjyObject.
+    // ObjyObject resourceObject = this.getObject((ooId)resource);
+
+    synchronized (idToObjyObjectMap)
+    {
+      idToObjyObjectMap.remove(OBJYCDOIDUtil.getLong(objyObject.ooId()));
+    }
+  }
+
+  // we could've used the CDO copy revision technique, but it will be expensive
+  // to create the new copy over the Java/JNI boundaries, doing a low level
+  // copy is faster.
+  public ObjyObject copyRevision(ObjectivityStoreAccessor storeAccessor, ObjyObject objyObject)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("ObjyObjectManager.copyRevision(" + objyObject.ooId().getStoreString() + ")");
+    }
+    EClass eClass = ObjySchema.getEClass(storeAccessor.getStore(), objyObject.objyClass());
+    ObjyObject newObjyRevision = objyObject.copy(eClass, this);
+    return newObjyRevision;
+  }
+
+  public ObjyPlacementManager getGlobalPlacementManager()
+  {
+    return globalPlacementManager;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java
new file mode 100644
index 0000000..d07fc9a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.common.model.CDOModelUtil;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageInfo;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageUnit;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.SmartLock;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
+
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import com.objy.db.app.Session;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooMap;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class ObjyPackageHandler
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyPackageHandler.class);
+
+  private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyPackageHandler.class);
+
+  protected ooId packageMapId;
+
+  private boolean zipped = true;
+
+  public ObjyPackageHandler(String repositoryName)
+  {
+    // this.store = store;
+    packageMapId = ObjyDb.getOrCreatePackageMap(repositoryName);
+  }
+
+  /***
+   * Factory method to create the PackageMap, which is an ooMap
+   */
+  public static ooId create(ooId scopeContOid)
+  {
+    ooMap map = new ooMap();
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(map);
+    return map.getOid();
+  }
+
+  public void writePackages(CDOPackageRegistry packageRegistry, InternalCDOPackageUnit packageUnit, OMMonitor monitor)
+  {
+    try
+    {
+      ooMap packageMap = getMap();
+
+      SmartLock.lock(packageMap.getContainer());
+      InternalCDOPackageInfo[] packageInfos = packageUnit.getPackageInfos();
+      monitor.begin(1 + packageInfos.length);
+
+      if (TRACER_INFO.isEnabled())
+      {
+        TRACER_INFO.format("Writing package unit: {0}", packageUnit); //$NON-NLS-1$
+      }
+
+      byte[] ePackageAsBytes = getEPackageBytes(packageRegistry, packageUnit);
+
+      ObjyPackageUnit objyPackageUnit = new ObjyPackageUnit(ePackageAsBytes.length);
+      packageMap.cluster(objyPackageUnit);
+
+      objyPackageUnit.setId(packageUnit.getID());
+      objyPackageUnit.setOrdinal(packageUnit.getOriginalType().ordinal());
+      objyPackageUnit.setTimeStamp(packageUnit.getTimeStamp());
+      objyPackageUnit.setPackageAsBytes(ePackageAsBytes);
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("... writing ObjyPackageUnit.getId(): " + objyPackageUnit.getId());
+      }
+
+      ObjyPackageInfo objyPackageInfo;
+      for (InternalCDOPackageInfo packageInfo : packageInfos)
+      {
+        objyPackageInfo = createPackageInfo(packageInfo, monitor); // Don't fork monitor
+        objyPackageUnit.addPackageInfo(objyPackageInfo);
+        // make sure we have the mapping between the Package name an the nsURI
+        // set mapping between package name and the nsURI
+        // getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageName());
+        // getStore().addPackageMapping(ooPackageInfo.getPackageName(), packageInfo.getPackageURI());
+        String objyPackageName = ObjySchema.getObjyPackageName(packageInfo.getPackageURI());
+        ObjySchema.setPackageNameMapping(packageInfo.getPackageURI(), objyPackageName);
+        ObjySchema.setPackageNameMapping(objyPackageName, packageInfo.getPackageURI());
+
+        // we might as well create the schema in Objy, although I`m not sure if we needed for the ecore pacakge.
+        EPackage ePackage = packageInfo.getEPackage();
+        ObjySchema.registerEPackage(ePackage);
+      }
+
+      // add the package unit to the map.
+      packageMap.add(objyPackageUnit, objyPackageUnit.getId());
+    }
+    finally
+    {
+      monitor.done();
+    }
+  }
+
+  private ObjyPackageInfo createPackageInfo(InternalCDOPackageInfo packageInfo, OMMonitor monitor)
+  {
+    if (TRACER_INFO.isEnabled())
+    {
+      TRACER_INFO.format("Writing package info: {0}", packageInfo); //$NON-NLS-1$
+    }
+
+    ObjyPackageInfo ooPackageInfo = new ObjyPackageInfo();
+    ooPackageInfo.setPackageURI(packageInfo.getPackageURI());
+    ooPackageInfo.setParentURI(packageInfo.getParentURI());
+    ooPackageInfo.setUnitID(packageInfo.getPackageUnit().getID());
+    ooPackageInfo.setPackageName(packageInfo.getEPackage().getName());
+
+    return ooPackageInfo;
+  }
+
+  private byte[] getEPackageBytes(CDOPackageRegistry packageRegistry, InternalCDOPackageUnit packageUnit)
+  {
+    EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage();
+    return EMFUtil.getEPackageBytes(ePackage, zipped, packageRegistry);
+  }
+
+  public Collection<InternalCDOPackageUnit> readPackageUnits()
+  {
+    final Map<ObjyPackageUnit, InternalCDOPackageUnit> packageUnitsMap = new HashMap<ObjyPackageUnit, InternalCDOPackageUnit>();
+
+    ooMap packageMap = getMap();
+
+    Iterator<?> itr = packageMap.elements();
+    while (itr.hasNext())
+    {
+      ObjyPackageUnit objyPackageUnit = (ObjyPackageUnit)itr.next();
+      InternalCDOPackageUnit packageUnit = createPackageUnit();
+      packageUnit.setOriginalType(CDOPackageUnit.Type.values()[objyPackageUnit.getOrdinal()]);
+      packageUnit.setTimeStamp(objyPackageUnit.getTimeStamp());
+      packageUnitsMap.put(objyPackageUnit, packageUnit);
+      if (TRACER_INFO.isEnabled())
+      {
+        TRACER_INFO.format("Read package unit: {0}", packageUnit); //$NON-NLS-1$
+      }
+    }
+
+    // create the package infos from the units.
+    for (Entry<ObjyPackageUnit, InternalCDOPackageUnit> entry : packageUnitsMap.entrySet())
+    {
+      // scan the relationship.
+      List<ObjyPackageInfo> objyPackageInfoList = entry.getKey().getPackageInfos();
+      List<InternalCDOPackageInfo> packageInfoList = new ArrayList<InternalCDOPackageInfo>();
+      // create the package infos.
+      for (ObjyPackageInfo objyPackageInfo : objyPackageInfoList)
+      {
+        InternalCDOPackageInfo packageInfo = createPackageInfo(objyPackageInfo);
+        packageInfoList.add(packageInfo);
+        // set mapping between package URI and the package name used in Objy Schema.
+        // getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageName());
+        // getStore().addPackageMapping(ooPackageInfo.getPackageName(), packageInfo.getPackageURI());
+        String objyPackageName = ObjySchema.getObjyPackageName(packageInfo.getPackageURI());
+        ObjySchema.setPackageNameMapping(packageInfo.getPackageURI(), objyPackageName);
+        ObjySchema.setPackageNameMapping(objyPackageName, packageInfo.getPackageURI());
+      }
+      // add the package infos to the unit.
+      InternalCDOPackageInfo[] array = packageInfoList.toArray(new InternalCDOPackageInfo[packageInfoList.size()]);
+      entry.getValue().setPackageInfos(array);
+    }
+
+    return packageUnitsMap.values();
+  }
+
+  protected InternalCDOPackageUnit createPackageUnit()
+  {
+    return (InternalCDOPackageUnit)CDOModelUtil.createPackageUnit();
+  }
+
+  protected InternalCDOPackageInfo createPackageInfo()
+  {
+    return (InternalCDOPackageInfo)CDOModelUtil.createPackageInfo();
+  }
+
+  private InternalCDOPackageInfo createPackageInfo(ObjyPackageInfo ooPackageInfo)
+  {
+    if (TRACER_INFO.isEnabled())
+    {
+      TRACER_INFO.format("create package info: {0}", ooPackageInfo); //$NON-NLS-1$
+    }
+
+    InternalCDOPackageInfo packageInfo = createPackageInfo();
+
+    packageInfo.setPackageURI(ooPackageInfo.getPackageURI());
+    packageInfo.setParentURI(ooPackageInfo.getParentURI());
+    // TODO - do we need this!!!! setUnitID(packageInfo.getPackageUnit().getID());
+
+    return packageInfo;
+  }
+
+  public byte[] readPackageBytes(InternalCDOPackageUnit packageUnit)
+  {
+    byte[] bytes = null;
+
+    ooMap map = getMap();
+    String packageUnitId = packageUnit.getID();
+    if (TRACER_INFO.isEnabled())
+    {
+      TRACER_INFO.format("Looking for package unit with ID: {0}", packageUnitId); //$NON-NLS-1$
+    }
+    if (map.isMember(packageUnitId))
+    {
+      if (TRACER_INFO.isEnabled())
+      {
+        TRACER_INFO.format("Reading package unit with ID: {0}", packageUnitId); //$NON-NLS-1$
+      }
+      ObjyPackageUnit objyPackageUnit = (ObjyPackageUnit)map.lookup(packageUnitId);
+      // this is our package...
+      bytes = objyPackageUnit.getPackageAsBytes();
+    }
+    return bytes;
+  }
+
+  /***
+   * This function assume we are in an Objy transaction.
+   */
+  private ooMap getMap()
+  {
+    ooMap map = null;
+    map = (ooMap)Session.getCurrent().getFD().objectFrom(packageMapId);
+    return map;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.java
new file mode 100644
index 0000000..725f283
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPropertyMapHandler.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProperty;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+
+import com.objy.db.app.Session;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooMap;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+public class ObjyPropertyMapHandler
+{
+  protected ooId propertyMapId;
+
+  public ObjyPropertyMapHandler(String repositoryName)
+  {
+    propertyMapId = ObjyDb.getOrCreatePropertyMap(repositoryName);
+  }
+
+  /***
+   * Factory method to create the PropertyMap, which is an ooMap
+   */
+  public static ooId create(ooId scopeContOid)
+  {
+    ooMap map = new ooMap();
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(map);
+    return map.getOid();
+  }
+
+  /***
+   * This function assume we are in an Objy trnasaction.
+   */
+  public void setPropertyValues(Map<String, String> properties)
+  {
+    // get the map.
+    ooMap propertyMap = getMap();
+    String key = null;
+    String value = null;
+    ObjyProperty property = null;
+    for (Entry<String, String> entry : properties.entrySet())
+    {
+      key = entry.getKey();
+      value = entry.getValue();
+
+      // check if we have the property
+      if (propertyMap.isMember(key))
+      {
+        property = (ObjyProperty)propertyMap.lookup(key);
+        property.setValue(value);
+      }
+      else
+      {
+        property = new ObjyProperty(key, value);
+        propertyMap.add(property, key);
+      }
+    }
+  }
+
+  /***
+   * This function assume we are in an Objy trnasaction.
+   */
+  public void removePropertyValues(Set<String> names)
+  {
+    // get the map.
+    ooMap propertyMap = getMap();
+    ObjyProperty property = null;
+    for (String key : names)
+    {
+      if (propertyMap.isMember(key))
+      {
+        property = (ObjyProperty)propertyMap.lookup(key);
+        // although removing the object will remove it from the map
+        // it's cleaner to do it explicitly.
+        propertyMap.remove(key);
+        property.delete();
+      }
+    }
+  }
+
+  /***
+   * This function assume we are in an Objy trnasaction.
+   */
+  public Map<String, String> getPropertyValues(Set<String> names)
+  {
+    Map<String, String> properties = new HashMap<String, String>();
+    // get the map.
+    ooMap propertyMap = getMap();
+    ObjyProperty property = null;
+
+    for (String key : names)
+    {
+      if (propertyMap.isMember(key))
+      {
+        property = (ObjyProperty)propertyMap.lookup(key);
+        properties.put(property.getKey(), property.getValue());
+      }
+    }
+    return properties;
+  }
+
+  /***
+   * This function assume we are in an Objy transaction.
+   */
+  private ooMap getMap()
+  {
+    ooMap map = null;
+    map = (ooMap)Session.getCurrent().getFD().objectFrom(propertyMapId);
+    return map;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.java
new file mode 100644
index 0000000..63e6020
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySchema.java
@@ -0,0 +1,507 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStore;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ObjyMapper;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListId;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListString;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBase;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyFeatureMapArrayList;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProxy;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyResourceList;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.as.app.d_Module;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Wrapper for the AS schema code with caching of the wrapped classes. This class need to be reseted by the
+ * ObjectivityStore doDeactivate().
+ *
+ * @author ibrahim
+ */
+public class ObjySchema
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjySchema.class);
+
+  // static HashMap<String, d_Class> mapOfCacheClasses = new HashMap<String, d_Class>();
+
+  private static HashMap<String, ObjyClass> mapOfObjyClasses = new HashMap<String, ObjyClass>();
+
+  private static HashMap<String, EClass> mapOfEClasses = new HashMap<String, EClass>();
+
+  private static HashMap<EClass, EClass> visitedClasses = new HashMap<EClass, EClass>();
+
+  private static HashMap<EClass, EClass> visitedStructureOnlyClasses = new HashMap<EClass, EClass>();
+
+  private static Map<String, String> packageNameMapping = new HashMap<String, String>();
+
+  private static d_Module topModule = null;
+
+  public static void resetCache()
+  {
+    topModule = null;
+    mapOfObjyClasses.clear();
+    mapOfEClasses.clear();
+    visitedClasses.clear();
+    visitedStructureOnlyClasses.clear();
+  }
+
+  public static ObjyClass getObjyClass(String name)
+  {
+    ObjyClass classObject = mapOfObjyClasses.get(name);
+    if (classObject == null)
+    {
+      d_Class newClass = getTopModule().resolve_class(name);
+      // EClass eClass = getEClass(store, name);
+      // IS:TEMP
+      if (newClass == null)
+      {
+        TRACER_DEBUG.trace("NULL..... dClass for " + name);
+      }
+      classObject = new ObjyClass(newClass);
+      mapOfObjyClasses.put(name, classObject);
+    }
+    return classObject;
+  }
+
+  public static d_Module getTopModule()
+  {
+    if (topModule == null)
+    {
+      topModule = d_Module.top_level();
+    }
+    return topModule;
+  }
+
+  /**
+   * Originally in EProposedManager.
+   */
+  static public String getObjectivityClassName(EClassifier eClassifier)
+  {
+    return formObjectivityClassName(eClassifier, false);
+  }
+
+  /**
+   * Originally in EProposedManager
+   */
+  static String formObjectivityClassName(EClassifier eClassifier, boolean onlyStructure)
+  {
+    if (eClassifier == EcorePackage.eINSTANCE.getEObject())
+    {
+      return "ooObj";
+    }
+
+    // same class names might exist in different nsUri.
+    String nsURI = eClassifier.getEPackage().getNsURI();
+    // // get the hash string for uniqueness.
+    // String nsURIHash = new Integer(Math.abs(nsURI.hashCode())).toString();
+    String objyPackageName = getObjyPackageName(nsURI);
+
+    if (onlyStructure)
+    {
+      // return "oo_" + eClassifier.getEPackage().getName() + "_" + eClassifier.getName() + "ST";
+      // return "oo_" + nsURIHash + "_" + eClassifier.getEPackage().getNsPrefix() + "_" + eClassifier.getName() + "_ST";
+      return objyPackageName + ":" + eClassifier.getName() + "_ST";
+    }
+
+    // return "oo_" + eClassifier.getEPackage().getName() + "_" + eClassifier.getName();
+    // return "oo_" + nsURIHash + "_" + eClassifier.getEPackage().getNsPrefix() + "_" + eClassifier.getName();
+    return objyPackageName + ":" + eClassifier.getName();
+  }
+
+  static public void setPackageNameMapping(String name1, String name2)
+  {
+    if (packageNameMapping.get(name1) == null)
+    {
+      packageNameMapping.put(name1, name2);
+    }
+  }
+
+  static public String getPackageNameMapping(String key)
+  {
+    return packageNameMapping.get(key);
+  }
+
+  /**
+   * Originally in EProposedManager
+   *
+   * @param ePackage
+   */
+  static public void registerEPackage(EPackage ePackage)
+  {
+    for (EClassifier eClass : ePackage.getEClassifiers())
+    {
+      if (eClass instanceof EClass)
+      {
+        getOrCreate(eClass.eClass());
+      }
+    }
+  }
+
+  /**
+   * @param eClass
+   * @return ObjyClass
+   */
+  static public ObjyClass getOrCreate(EClass eClass)
+  {
+    String className = getObjectivityClassName(eClass);
+
+    ObjyClass objyClass = mapOfObjyClasses.get(className);
+
+    if (objyClass != null)
+    {
+      return objyClass;
+    }
+
+    // create the ObjyClass and hash it.
+    synchronized (getTopModule())
+    {
+      // System.out.println("OBJY: finding class '" + className + "' in objy schema.");
+      d_Class dClass = getTopModule().resolve_class(className);
+      // System.out.println("OBJY:... got d_Class:" + dClass);
+
+      // TODO - evolving classes is partially implemented, only adding attributes is
+      // supported.
+      if (dClass == null)
+      {
+        objyClass = createObjyClass(eClass);
+      }
+      else if (!isSameClass(dClass, eClass))
+      {
+        objyClass = evolveObjyClass(eClass);
+      }
+      else
+      {
+        objyClass = new ObjyClass(dClass/* , eClass */);
+      }
+
+      if (objyClass == null)
+      {
+        throw new RuntimeException("Cannot retrieved " + eClass.getName() + " class from Objy schema as:" + className);
+      }
+      String asClassName = objyClass.getASClassName();
+      mapOfObjyClasses.put(asClassName, objyClass);
+      mapOfEClasses.put(asClassName, eClass);
+    }
+
+    return objyClass;
+  }
+
+  /**
+   * @param eClass
+   * @return
+   */
+  private static ObjyClass createObjyClass(EClass eClass)
+  {
+    try
+    {
+
+      String className = getObjectivityClassName(eClass);
+
+      // System.out.println("OBJY: calling createObjyClassSchema for class: " + className);
+      createObjyClassSchema(eClass, false);
+
+      getTopModule().activate_proposals(true, true);
+      // getTopModule().activate_proposals(true);
+
+      // System.out.println("OBJY: resolving class '" + className + "' in objy schema.");
+      d_Class dClass = getTopModule().resolve_class(className);
+      // IS:TEMP
+      if (dClass == null)
+      {
+        TRACER_DEBUG.trace("NULL..... dClass for " + className);
+      }
+
+      ObjyClass objyClass = new ObjyClass(dClass/* , eClass */);
+      return objyClass;
+    }
+    catch (Throwable throwable)
+    {
+      throwable.printStackTrace();
+    }
+    return null;
+  }
+
+  public static ObjyClass evolveObjyClass(EClass eClass)
+  {
+    try
+    {
+
+      String className = getObjectivityClassName(eClass);
+
+      evolveObjyClassSchema(eClass, false);
+
+      getTopModule().activate_proposals(true, true);
+      // getTopModule().activate_proposals(true);
+
+      // System.out.println("OBJY: resolving class '" + className + "' in objy schema.");
+      d_Class dClass = getTopModule().resolve_class(className);
+      // IS:TEMP.
+      if (dClass == null)
+      {
+        TRACER_DEBUG.trace("NULL..... dClass for " + className);
+      }
+      ObjyClass objyClass = new ObjyClass(dClass/* , eClass */);
+      return objyClass;
+    }
+    catch (Throwable throwable)
+    {
+      throwable.printStackTrace();
+    }
+    return null;
+  }
+
+  /**
+   * This function creates the schema in Objectivity, if the class is being proposed or already exist no action is
+   * happening.
+   */
+  static void createObjyClassSchema(EClass eClass, boolean onlyStructure)
+  {
+    HashMap<EClass, EClass> hashMap = onlyStructure ? visitedStructureOnlyClasses : visitedClasses;
+    if (hashMap.containsKey(eClass))
+    {
+      return;
+    }
+
+    hashMap.put(eClass, eClass);
+    String className = formObjectivityClassName(eClass, onlyStructure);
+    d_Class dClass = getTopModule().resolve_class(className);
+
+    if (dClass != null)
+    {
+      return;
+    }
+
+    // check if the class has been proposed before
+    if (getTopModule().resolve_proposed_class(className) == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Creating new class: " + className);
+      }
+
+      // start schema creation.
+      // System.out.println("OBJY: starting schema creation for class: " + className);
+      ObjyClassProposed proposedClass = new ObjyClassProposed(getTopModule(), eClass, onlyStructure);
+      proposedClass.propose();
+    }
+  }
+
+  /**
+   * @param eClass
+   * @param itrOnlyStructure
+   */
+  static void evolveObjyClassSchema(EClass eClass, boolean onlyStructure)
+  {
+    String className = formObjectivityClassName(eClass, onlyStructure);
+
+    // check if the class has been proposed before
+    if (getTopModule().resolve_proposed_class(className) == null)
+    {
+      d_Class dClass = getTopModule().resolve_class(className);
+
+      TRACER_DEBUG.trace("Evolving class: " + className);
+
+      // start schema evolution.
+      // System.out.println("OBJY: starting schema creation for class: " + className);
+      ObjyClassProposed proposedClass = new ObjyClassProposed(getTopModule(), eClass, onlyStructure);
+      proposedClass.evolve(dClass);
+    }
+  }
+
+  // From EProposedManager...
+  // For now check only the name of the attribute
+  // It only check from EMF to Objectivity... not the reverse
+  // TODO - see if we can do full cycle schema changes.
+  static boolean isSameClass(d_Class dClass, EClass eClass)
+  {
+    // Look at the hierarchy
+    for (EClass superType : eClass.getESuperTypes())
+    {
+      getOrCreate(superType);
+    }
+
+    for (EStructuralFeature feature : eClass.getEStructuralFeatures())
+    {
+      if (!(feature instanceof EAttribute || feature instanceof EReference))
+      {
+        continue;
+      }
+      ITypeMapper mapper = ObjyMapper.INSTANCE.getTypeMapper(feature);
+      if (mapper == null)
+      {
+        continue;
+      }
+
+      // identify any missing attribute.
+      d_Attribute dAttr = dClass.resolve_attribute(feature.getName());
+      if (dAttr == null)
+      {
+        return false;
+      }
+      /****
+       * TODO - actiavte this code, once ITypeMapper.validate() is implemented. ITypeMapper attributeMapper =
+       * ObjyMapper.INSTANCE.getTypeMapper(feature); if (attributeMapper.validate(dAttr, feature) == false) { if
+       * (TRACER_DEBUG.isEnabled()) { TRACER_DEBUG.trace("Feature " + feature.getName() + " for object " +
+       * eClass.getName() + " changed "); } attributeMapper.validate(dAttr, feature); return false; }
+       ****/
+    }
+    return true;
+  }
+
+  // /**
+  // * From EProposedManager.
+  // */
+  // void ensureEClassExist(EClass eClass, boolean onlyStructure)
+  // {
+  // HashMap<EClass, EClass> hashMap = onlyStructure ? visitedStructureOnlyClass : visitedClass;
+  // if (hashMap.containsKey(eClass))
+  // {
+  // return;
+  // }
+  //
+  // hashMap.put(eClass, eClass);
+  // String nameClass = getObjectivityClassName(eClass, onlyStructure);
+  // d_Class ooClass = getTopModule().resolve_class(nameClass);
+  //
+  // if (ooClass != null && isSameClass(ooClass, eClass))
+  // {
+  // return;
+  // }
+  //
+  // if (module.resolve_proposed_class(nameClass) == null)
+  // {
+  // EProposedClass proposedClass = new EProposedClass(module, eClass, onlyStructure);
+  // proposedClass.propose(this, ooClass);
+  // }
+  // }
+
+  // /**
+  // * From EProposedManager.
+  // */
+  // void ensureEClassExist(EClass eClass)
+  // {
+  // ensureEClassExist(eClass, false);
+  // }
+
+  public static EClass getEClass(ObjectivityStore store, ObjyClass objyClass)
+  {
+    String className = objyClass.getASClassName();
+    return getEClass(store, className);
+  }
+
+  public static EClass getEClass(ObjectivityStore store, String className)
+  {
+    // String className = objyObject.getASClass().name();
+    // System.out.println("OBJY: getEClass(store, " + className +")");
+    EClass eClass = mapOfEClasses.get(className);
+    if (eClass == null)
+    {
+      // the format is "<some_URI_name_used_as_package_name>:className"
+      String[] splits = className.split(":");
+      // get the mapping to the nsURI.
+      CDOPackageRegistry registry = store.getRepository().getPackageRegistry();
+      String nsURI = getPackageNameMapping(splits[0]);
+      EPackage packageObject = registry.getEPackage(nsURI);
+
+      if (packageObject == null)
+      {
+        throw new RuntimeException("Package not found " + splits[1] + " for class name " + className);
+      }
+      eClass = (EClass)packageObject.getEClassifier(splits[splits.length - 1]);
+      mapOfEClasses.put(className, eClass);
+    }
+    // else
+    // {
+    // System.out.println("***OBJY: getEClass(cached): " + eClass);
+    // }
+    return eClass;
+  }
+
+  /***
+   * identify if the class is of type Resource. TODO - why we need to pass the store, can't we keep the info we need for
+   * the package mapping here?!!!
+   */
+  public static boolean isResource(ObjectivityStore store, ObjyClass objyClass)
+  {
+    EClass eClass = getEClass(store, objyClass);
+
+    if (eClass == EresourcePackage.Literals.CDO_RESOURCE || eClass == EresourcePackage.Literals.CDO_RESOURCE_NODE
+        || eClass == EresourcePackage.Literals.CDO_RESOURCE_FOLDER)
+    {
+      return true;
+    }
+
+    return false;
+  }
+
+  /***
+   * Build initial schema for some collection classes.
+   */
+  public static void createBaseSchema()
+  {
+    ObjyArrayListId.buildSchema();
+    ObjyFeatureMapArrayList.buildSchema();
+    ObjyProxy.buildSchema();
+    ObjyArrayListString.buildSchema();
+    ObjyBase.buildSchema();
+    ObjyResourceList.buildSchema();
+  }
+
+  public static String getObjyPackageName(String packageURI)
+  {
+    String name = "";
+    boolean first = true;
+    // parse the URI, remove "http://" and replace each "." with "_"
+    String[] splits = packageURI.split("://");
+    for (String strValue : splits)
+    {
+      if (strValue.equals("http"))
+      {
+        continue;
+      }
+      if (!first)
+      {
+        name = name.concat("_");
+      }
+      else
+      {
+        first = false;
+      }
+
+      name = name.concat(strValue);
+    }
+    name = name.replace("/", ".");
+    name = name.replace(".", "_");
+    return name;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.java
new file mode 100644
index 0000000..7a27b16
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyScope.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.Session;
+import com.objy.db.app.ooContObj;
+import com.objy.db.app.ooDBObj;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyScope
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyScope.class);
+
+  private ooContObj contObj = null;
+
+  private ooDBObj dbObj = null;
+
+  private String dbName;
+
+  private String contName;
+
+  /**
+   * Static function used for initialisation of the store.
+   */
+  public static void insureScopeExist(ObjySession objySession, String dbName, String contName)
+  {
+    ooDBObj db;
+    ooContObj cont;
+    try
+    {
+      if (!objySession.getFD().hasDB(dbName))
+      {
+        db = Session.getCurrent().getFD().newDB(dbName);
+      }
+      else
+      {
+        db = Session.getCurrent().getFD().lookupDB(dbName);
+      }
+
+      if (db.hasContainer(contName))
+      {
+        cont = db.lookupContainer(contName);
+      }
+      else
+      {
+        cont = new ooContObj();
+        db.addContainer(cont, 0, contName, 0, 0);
+      }
+
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+  }
+
+  public ObjyScope(String dbName, String contName)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("ObjyScope - DB: " + dbName + " - CT: " + contName);
+    }
+    this.dbName = dbName;
+    this.contName = contName;
+    init();
+  }
+
+  // optimized version that takes an ooDBObj.
+  public ObjyScope(ooDBObj dbObj, String contName)
+  {
+    dbName = dbObj.getName();
+    this.contName = contName;
+    this.dbObj = dbObj;
+
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("ObjyScope - DB: " + dbObj.getName() + " - CT: " + contName);
+    }
+    init();
+  }
+
+  public ooId getScopeContOid()
+  {
+    return getContainerObj().getOid();
+  }
+
+  public ooId getScopeDbOid()
+  {
+    return getDatabaseObj().getOid();
+  }
+
+  private void init()
+  {
+    getContainerObj();
+  }
+
+  // /**
+  // * TODO - verify need.
+  // */
+  // private ooContObj getContainer(ooId id)
+  // {
+  // String contID = "#" + id.getDB() + "-" + id.getOC() + "-1-1";
+  //
+  // return (ooContObj)Session.getCurrent().getFD().objectFrom(contID);
+  // }
+
+  public ooContObj getContainerObj()
+  {
+
+    if (contObj == null)
+    {
+      ooDBObj db = getDatabaseObj();
+
+      if (db.hasContainer(contName))
+      {
+
+        contObj = db.lookupContainer(contName);
+
+      }
+      else
+      {
+        contObj = createNewContainer(contName);
+      }
+    }
+    return contObj;
+  }
+
+  /**
+   * Need this when scanning a scope.
+   */
+  public ooDBObj getDatabaseObj()
+  {
+    if (dbObj == null)
+    {
+      if (!Session.getCurrent().getFD().hasDB(dbName))
+      {
+        dbObj = Session.getCurrent().getFD().newDB(dbName);
+        // System.out.println("OBJY: Creating new DB ID: " + dbObj.getOid().getStoreString() +
+        // " - name:" + dbObj.getName());
+      }
+      else
+      {
+        dbObj = Session.getCurrent().getFD().lookupDB(dbName);
+      }
+      // System.out.println("OBJY: Working with DB ID: " + dbObj.getOid().getStoreString() +
+      // " - name:" + dbObj.getName());
+    }
+
+    return dbObj;
+  }
+
+  // /**
+  // * TODO - verify need.
+  // */
+  // private ooContObj createNewContainer()
+  // {
+  // return createNewContainer(null);
+  // }
+
+  /**
+   * TODO - verify need.
+   *
+   * @return
+   */
+  private ooContObj createNewContainer(String name)
+  {
+    ooDBObj db = getDatabaseObj();
+    ooContObj cont = new ooContObj();
+    db.addContainer(cont, 0, name, 0, 0);
+    return cont;
+  }
+
+  public String getDbName()
+  {
+    return dbName;
+  }
+
+  /**
+   * This function will throw an exception if the lookupObj() fails to find the named object.
+   */
+  public ObjyObject lookupObjyObject(String nameObject)
+  {
+    ObjyObject objyObject = null;
+    ooId oid = lookupObjectOid(nameObject);
+    objyObject = new ObjyObject(Class_Object.class_object_from_oid(oid));
+    return objyObject;
+  }
+
+  public ooId lookupObjectOid(String nameObject)
+  {
+    ooObj anObj = null;
+    anObj = (ooObj)getContainerObj().lookupObj(nameObject);
+    return anObj.getOid();
+  }
+
+  public ooObj lookupObject(String nameObject)
+  {
+    ooObj anObj = null;
+    anObj = (ooObj)getContainerObj().lookupObj(nameObject);
+    return anObj;
+  }
+
+  public void nameObj(String objName, ObjyObject objyObject)
+  {
+    ooId oid = objyObject.ooId();
+    nameObj(objName, oid);
+  }
+
+  public void nameObj(String objName, ooId oid)
+  {
+    ooObj object = ooObj.create_ooObj(oid);
+    nameObj(objName, object);
+  }
+
+  public void nameObj(String objName, ooObj obj)
+  {
+    // if (!obj.isPersistent())
+    // {
+    // getContainerObj().cluster(obj);
+    // }
+    getContainerObj().nameObj(obj, objName);
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.java
new file mode 100644
index 0000000..3eb5f11
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjySession.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.db;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranchManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyLockAreaManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyResourceList;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.CannotUpgradeLockException;
+import com.objy.db.app.Session;
+import com.objy.db.app.oo;
+import com.objy.db.app.ooContObj;
+import com.objy.db.app.ooId;
+
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/*
+ * @author ibrahim
+ */
+public class ObjySession extends Session
+{
+  private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjySession.class);
+
+  private ObjyObjectManager objectManger = null;
+
+  private ObjyResourceList resourceList = null;
+
+  private ObjyBranchManager branchManager = null;
+
+  private ObjyLockAreaManager lockAreaManager = null;
+
+  protected String sessionName;
+
+  protected ConcurrentHashMap<String, ObjySession> sessionPool;
+
+  protected boolean available;
+
+  public ObjySession(String name, ConcurrentHashMap<String, ObjySession> pool, ObjyConnection objyConnection)
+  {
+    super(objyConnection.getMinSessionCacheSize(), objyConnection.getMaxSessionCacheSize());
+    setThreadPolicy(oo.THREAD_POLICY_UNRESTRICTED);
+    // setHotMode(false);
+    setIndexMode(oo.EXPLICIT_UPDATE);
+    sessionName = name;
+    sessionPool = pool;
+    objectManger = new ObjyObjectManager(objyConnection.getDefaultPlacementManager());
+  }
+
+  public ObjyObjectManager getObjectManager()
+  {
+    return objectManger;
+  }
+
+  public ObjyBranchManager getBranchManager(String repositoryName)
+  {
+    if (branchManager == null)
+    {
+      branchManager = ObjyDb.getOrCreateBranchManager(repositoryName);
+    }
+    return branchManager;
+  }
+
+  public ObjyLockAreaManager getLockAreaManager(String repositoryName)
+  {
+    if (lockAreaManager == null)
+    {
+      lockAreaManager = ObjyDb.getOrCreateLockAreaManager(repositoryName);
+    }
+    return lockAreaManager;
+  }
+
+  public void setAvailable(boolean value)
+  {
+    available = value;
+  }
+
+  public boolean isAvailable()
+  {
+    return available;
+  }
+
+  public String getName()
+  {
+    return sessionName;
+  }
+
+  public void setName(String name)
+  {
+    sessionName = name;
+  }
+
+  public ConcurrentHashMap<String, ObjySession> getPool()
+  {
+    return sessionPool;
+  }
+
+  public ObjyResourceList getResourceList(String repositoryName)
+  {
+    if (resourceList == null)
+    {
+      resourceList = new ObjyResourceList(this, ObjyDb.getOrCreateResourceList(repositoryName));
+    }
+    return resourceList;
+  }
+
+  @Override
+  public synchronized void returnSessionToPool()
+  {
+    // System.out.println(">>> IS: returning session: " + session.getName());
+    leave();
+    setAvailable(true);
+  }
+
+  @Override
+  public synchronized void terminate()
+  {
+    // System.out.println("OBJY>>> Terminating session... " + sessionName + " - " + toString());
+    resourceList = null;
+    super.terminate();
+  }
+
+  public void lockContainers(Set<ooId> containerToLocks)
+  {
+    // Locks all containers for modified objects
+    if (!containerToLocks.isEmpty())
+    {
+      ooId idsToLock[] = containerToLocks.toArray(new ooId[containerToLocks.size()]);
+      // 100920 - IS: for debugging... TBR.
+      // for (ooId id : idsToLock)
+      // {
+      // TRACER_INFO.trace("Locking container: " + id.getStoreString());
+      // }
+
+      int count = 10;
+      while (0 != count--)
+      {
+        try
+        {
+          openContainers(idsToLock, oo.openReadWrite);
+          break;
+        }
+        catch (CannotUpgradeLockException cule)
+        {
+          // refresh containers.
+          for (ooId contId : idsToLock)
+          {
+            ooContObj contObj = (ooContObj)getFD().objectFrom(contId);
+            contObj.refresh(oo.WRITE);
+          }
+        }
+        catch (Exception e)
+        {
+          TRACER_INFO.trace("Locking problem try again : " + e.getMessage());
+          // this.ensureNewBeginSession();
+          if (!isOpen())
+          {
+            TRACER_INFO.trace("Objy session is not open");
+          }
+          try
+          {
+            wait(500);
+          }
+          catch (InterruptedException ex)
+          {
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.java
new file mode 100644
index 0000000..ff3a4ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BasicTypeMapper.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+//import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+//import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * mapping between Objy AS class/type and EMF types.
+ *
+ * @author ibrahim
+ */
+public abstract class BasicTypeMapper
+{
+
+  // private static final ContextTracer TRACER_DEBUG = new ContextTracer(
+  // OM.DEBUG, BasicTypeMapper.class);
+
+  protected String getAttributeName(EStructuralFeature feature)
+  {
+    return feature.getName();
+  }
+
+  protected String getNullAttributeName(EStructuralFeature feature)
+  {
+    return feature.getName() + "_isNull";
+  }
+
+  // protected Class_Position getAttributePosition(ObjyObject objyObject, EStructuralFeature feature)
+  // {
+  // return objyObject.objyClass().resolve_position(getAttributeName(feature));
+  // }
+
+  // protected Class_Position getNullAttributePosition(ObjyObject objyObject, EStructuralFeature feature)
+  // {
+  // return objyObject.objyClass().resolve_position(getNullAttributeName(feature));
+  // }
+
+  // ---------------------------------
+  // Object
+  // ---------------------------------
+  // public void initialize(Class_Object class_Object,
+  // EStructuralFeature feature, Class_Position attr)
+  // {
+  //
+  // }
+  //
+  // public void delete(ObjyObject objyObject,
+  // EStructuralFeature feature, Class_Position position)
+  // {
+  // }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.java
new file mode 100644
index 0000000..2f2bdbc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigDecimalTypeMapper.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.d_Attribute;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Simon McDuff
+ */
+public class BigDecimalTypeMapper extends StringTypeMapper
+{
+  public static BigDecimalTypeMapper INSTANCE = new BigDecimalTypeMapper();
+
+  @Override
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+    Object value = null;
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+
+      String_Value stringValue = objyObject.get_string(attributeName/* position */);
+      value = new BigDecimal(stringValue.toString());
+    }
+    // else if (feature.isUnsettable())
+    // {
+    // value = CDORevisionData.NIL;
+    // }
+
+    return value;
+  }
+
+  @Override
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    boolean isNull = newValue == null || newValue == CDORevisionData.NIL;
+    Numeric_Value isNullValue = isNull ? numericTrue : numericFalse;
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+      String_Value stringValue = objyObject.get_string(attributeName/* position */);
+      stringValue.update();
+      String strValue = ((BigDecimal)newValue).toString();
+      stringValue.set(strValue == null ? "" : strValue);
+    }
+    objyObject.set_numeric(nullAttributeName/* nullPosition */, isNullValue);
+  }
+
+  @Override
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  @Override
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  @Override
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    return false;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.java
new file mode 100644
index 0000000..ac5281b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/BigIntegerTypeMapper.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.d_Attribute;
+
+import java.math.BigInteger;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class BigIntegerTypeMapper extends StringTypeMapper
+{
+  public static BigIntegerTypeMapper INSTANCE = new BigIntegerTypeMapper();
+
+  @Override
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+    Object value = null;
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+
+      String_Value stringValue = objyObject.get_string(attributeName/* position */);
+      value = new BigInteger(stringValue.toString());
+    }
+    // else if (feature.isUnsettable())
+    // {
+    // value = CDORevisionData.NIL;
+    // }
+
+    return value;
+  }
+
+  @Override
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    String nullAttributeName = getNullAttributeName(feature);
+
+    boolean isNull = newValue == null || newValue == CDORevisionData.NIL;
+    Numeric_Value isNullValue = newValue == null ? numericTrue : numericFalse;
+
+    if (!isNull)
+    {
+      String attributeName = getAttributeName(feature);
+
+      String_Value stringValue = objyObject.get_string(attributeName/* position */);
+      stringValue.update();
+      String strValue = newValue.toString();
+      stringValue.set(strValue);
+    }
+    objyObject.set_numeric(nullAttributeName/* nullPosition */, isNullValue);
+  }
+
+  @Override
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  @Override
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    return false;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.java
new file mode 100644
index 0000000..364a94c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ByteArrayTypeMapper.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2010-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.VArray_Object;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Type;
+import com.objy.as.app.ooBaseType;
+
+/**
+ * @author Simon McDuff
+ */
+// This is a special class compared to the other array of simple types.
+public class ByteArrayTypeMapper extends BasicTypeMapper implements ISingleTypeMapper
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ByteArrayTypeMapper.class);
+
+  static ByteArrayTypeMapper INSTANCE = new ByteArrayTypeMapper();
+
+  protected ooBaseType getObjyBaseType()
+  {
+    return ooBaseType.ooINT8;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    VArray_Object vArray = objyObject.get_varray(attributeName/* position */);
+
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+
+    if (isNull)
+    {
+      return null;
+    }
+
+    int size = (int)vArray.size();
+    byte byteArray[] = new byte[size];
+    for (int i = 0; i < size; i++)
+    {
+      Numeric_Value value = vArray.get_numeric(i);
+      byteArray[i] = value.byteValue();
+    }
+    return byteArray;
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    VArray_Object vArray = objyObject.get_varray(attributeName/* position */);
+
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    Numeric_Value isNullValue = newValue == null ? numericTrue : numericFalse;
+
+    objyObject.set_numeric(nullAttributeName /* nullPosition */, isNullValue);
+
+    // System.out.println("OID: " + objyObject.ooId().getStoreString() + " - START work");
+    if (newValue == null)
+    {
+      vArray.resize(0);
+      return;
+    }
+
+    byte byteArray[] = (byte[])newValue;
+
+    if (vArray.size() != byteArray.length)
+    {
+      vArray.resize(byteArray.length);
+    }
+
+    for (int i = 0; i < byteArray.length; i++)
+    {
+      Byte byteValue = byteArray[i];
+      Numeric_Value numericValue = new Numeric_Value(byteValue);
+      vArray.set_numeric(i, numericValue);
+    }
+    // System.out.println("OID: " + objyObject.ooId().getStoreString() + " - DONE.");
+  }
+
+  /**
+   *
+   */
+  public boolean createSchema(Proposed_Class proposedClass, EStructuralFeature feature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Adding attribute " + feature.getName() + "  " + this.getClass().getName());
+    }
+
+    proposedClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        getAttributeName(feature), // Attribute name
+        1, // # elements in fixed-size array
+        getObjyBaseType()); // Default value
+
+    proposedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        getNullAttributeName(feature), // Attribute name
+        1, // # elements in fixed-size array
+        ooBaseType.ooBOOLEAN // Default value
+    );
+
+    return false;
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    d_Type type = ooAttribute.type_of();
+
+    return type.is_varray_basic_type();
+  }
+
+  // TODO - this is not the most optimized version fo the code.
+  // we are trying to finish functionality for now 100202:IS
+  // public void add(ObjyObject objyObject, EStructuralFeature feature,
+  // Class_Position position, int index, Object value)
+  // {
+  // if (index < size(objyObject, feature, position))
+  // {
+  // throw new UnsupportedOperationException("adding object inside VArray... Implement Me!!!");
+  // }
+  //
+  // VArray_Object vArray = objyObject.ooClassObject().get_varray(position);
+  // Numeric_Value numericValue = new Numeric_Value((Byte)value);
+  // vArray.extend(numericValue);
+  // }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    // throw new UnsupportedOperationException("Implement me!!");
+    // at least rest the varray...
+    // Class_Position position = classObject.type_of().position_in_class(feature.getName());
+    VArray_Object vArray = classObject.nget_varray(feature.getName());
+    vArray.resize(0);
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.java
new file mode 100644
index 0000000..abe517c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataManyTypeMapper.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/***
+ * Overrides StringManyTypeMapper, and implement the two functions to convert a string to an object and vice versa.
+ *
+ * @author Ibrahim Sallam
+ */
+public class CustomDataManyTypeMapper extends StringManyTypeMapper
+{
+
+  public static CustomDataManyTypeMapper INSTANCE = new CustomDataManyTypeMapper();
+
+  @Override
+  protected String stringFromObject(EStructuralFeature feature, Object objectValue)
+  {
+    EDataType dataType = (EDataType)feature.getEType();
+    EFactory factory = dataType.getEPackage().getEFactoryInstance();
+    String stringValue = factory.convertToString(dataType, objectValue);
+    return stringValue;
+  }
+
+  @Override
+  protected Object objectFromString(EStructuralFeature feature, String stringValue)
+  {
+    EDataType dataType = (EDataType)feature.getEType();
+    EFactory factory = dataType.getEPackage().getEFactoryInstance();
+    Object value = null;
+    value = factory.createFromString(dataType, stringValue);
+    return value;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.java
new file mode 100644
index 0000000..10f6d44
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/CustomDataTypeMapper.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.d_Attribute;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class CustomDataTypeMapper extends StringTypeMapper
+{
+  public static CustomDataTypeMapper INSTANCE = new CustomDataTypeMapper();
+
+  @Override
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    String_Value stringValue = objyObject.get_string(attributeName/* position */);
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+
+    // EDataType dataType = (EDataType)feature.getEType();
+    // EFactory factory = dataType.getEPackage().getEFactoryInstance();
+    // Object value = null;
+    // if (!isNull)
+    // {
+    // value = factory.createFromString(dataType, stringValue.toString());
+    // }
+    //
+    // return value;
+    if (isNull)
+    {
+      return null;
+    }
+
+    return stringValue.toString();
+  }
+
+  @Override
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    String_Value stringValue = objyObject.get_string(attributeName/* position */);
+    stringValue.update();
+
+    // EDataType dataType = (EDataType)feature.getEType();
+    // EFactory factory = dataType.getEPackage().getEFactoryInstance();
+    // String valueAsString = factory.convertToString(dataType, newValue);
+    //
+    Numeric_Value isNullValue = newValue == null ? numericTrue : numericFalse;
+    // String strValue = newValue == null ? null : valueAsString;
+    stringValue.set(newValue == null ? "" : newValue.toString());
+    objyObject.set_numeric(nullAttributeName/* nullPosition */, isNullValue);
+  }
+
+  @Override
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  @Override
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  @Override
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    return false;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.java
new file mode 100644
index 0000000..000c4e2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/EnumTypeMapper.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author Simon McDuff
+ */
+public class EnumTypeMapper extends NumericTypeMapper.TMInteger
+{
+  static EnumTypeMapper INSTANCE = new EnumTypeMapper();
+
+  @Override
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Integer intValue = (Integer) super.getValue(objyObject, feature);
+    // /*
+    // EEnum enumType = (EEnum)feature.getEType();
+    // EEnumLiteral literal = enumType.getEEnumLiteral(intValue);
+    // if (literal == null)
+    // {
+    // throw new IllegalStateException();
+    // }
+    // return literal.getInstance();
+    // */
+    // return intValue;
+    return super.getValue(objyObject, feature);
+  }
+
+  @Override
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    Integer enumLiteral = (Integer)newValue;
+    if (enumLiteral == null)
+    {
+      return;
+    }
+    super.setValue(objyObject, feature, enumLiteral);
+    // Numeric_Value numericValue = new Numeric_Value(enumLiteral.intValue());
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.java
new file mode 100644
index 0000000..04f4f63
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/FeatureMapTypeMapper.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyFeatureMapArrayList;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyFeatureMapEntry;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+/**
+ * @author Simon McDuff
+ */
+public class FeatureMapTypeMapper extends BasicTypeMapper implements IManyTypeMapper
+{
+  static FeatureMapTypeMapper INSTANCE = new FeatureMapTypeMapper();
+
+  static d_Class dClassObject = null;
+
+  private static d_Class getArrayListClass()
+  {
+    if (dClassObject == null)
+    {
+      dClassObject = ObjySchema.getTopModule().resolve_class(ObjyFeatureMapArrayList.ClassName);
+    }
+    return dClassObject;
+  }
+
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature)
+  {
+    proposedClasses.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+        d_Access_Kind.d_PUBLIC, // Access kind
+        feature.getName(), // Attribute name
+        1, // # elements in fixed-size array
+        ObjyFeatureMapArrayList.ClassName, false); // Default value // Default value
+
+    return true;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    return getList(objyObject, feature).get(index);
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, int index, Object newValue)
+  {
+    getList(objyObject, feature).set(index, (ObjyFeatureMapEntry)newValue);
+  }
+
+  public ObjyFeatureMapArrayList getList(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    ObjyFeatureMapArrayList list = (ObjyFeatureMapArrayList)objyObject.getFeatureList(attributeName/* position */);
+    if (list == null)
+    {
+      list = new ObjyFeatureMapArrayList(objyObject.get_class_obj(attributeName/* position */));
+      objyObject.setFeatureList(attributeName/* position */, list);
+    }
+    return list;
+  }
+
+  public int size(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    return (int)getList(objyObject, feature).size();
+  }
+
+  public void add(ObjyObject objyObject, EStructuralFeature feature, int index, Object value)
+  {
+    getList(objyObject, feature).add(index, (ObjyFeatureMapEntry)value);
+  }
+
+  public void addAll(ObjyObject classObject, EStructuralFeature feature, int index, Object[] values)
+  {
+    getList(classObject, feature).addAll(index, values);
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // create the reference.
+    Class_Object newClassObject = Class_Object.new_persistent_object(getArrayListClass(), classObject.objectID(), false);
+    // {
+    // ObjyObjectManager.newInternalObjCount++;
+    // }
+    // Class_Position position = classObject.type_of().position_in_class(getAttributeName(feature));
+    classObject.nset_ooId(getAttributeName(feature), newClassObject.objectID());
+    // initialize the list structure.
+    ObjyFeatureMapArrayList.initObject(newClassObject);
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    ooId tobeDeleted = objyObject.get_ooId(getAttributeName(feature)/* position */);
+    ooObj objectToDelete = ooObj.create_ooObj(tobeDeleted);
+    objectToDelete.delete();
+  }
+
+  public void clear(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    getList(objyObject, feature).clear();
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    Object oldValue = getValue(objyObject, feature, index);
+
+    getList(objyObject, feature).remove(index);
+
+    return oldValue;
+  }
+
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    // throw new UnsupportedOperationException("Implement me!!");
+    int size = (int)getList(objyObject, feature).size();
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+    Object[] objects = new Object[size - index];
+    for (int i = 0; i < size; i++)
+    {
+      objects[i] = getValue(objyObject, feature, i + index);
+    }
+    return objects;
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValues)
+  {
+    for (int i = 0; i < newValues.length; i++)
+    {
+      add(objyObject, feature, i, newValues[i]);
+    }
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.java
new file mode 100644
index 0000000..68756c4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IManyTypeMapper.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * Mapper for composite types (featureMap, manyReference, Multiple...)
+ *
+ * @author ibrahim
+ */
+public interface IManyTypeMapper extends ITypeMapper
+{
+
+  final String embeddedAttributeName = "value";
+
+  final String embeddedAttributeNull = "isNull";
+
+  final int valueAttributePosition = 0; // caution, we assume position index here!!!
+
+  final int nullAttributePosition = 1; // caution, we assume position index here!!!
+
+  // set a single object/value at index.
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, int index, Object newValue);
+
+  // get a single object/value at index.
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature, int index);
+
+  // remove a single value at index, it will set the value to default, and mark it
+  // as "null", i.e. unset.
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index);
+
+  // add value at index (extend the collection size).
+  public void add(ObjyObject objyObject, EStructuralFeature feature, int index, Object value);
+
+  // add all objects starting from an index. (extend the collection size).
+  public void addAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] value);
+
+  // clear all collection.
+  public void clear(ObjyObject objyObject, EStructuralFeature feature);
+
+  // this is similar to addAll, but it replaces the existing ones.
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValue);
+
+  // get all objects/values starting from an index.
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize);
+
+  // return the size of the collection.
+  public int size(ObjyObject objyObject, EStructuralFeature feature);
+
+  // move element in the feature from sourceIndex to targetIndex
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex);
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.java
new file mode 100644
index 0000000..6056a72
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ISingleTypeMapper.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+public interface ISingleTypeMapper extends ITypeMapper
+{
+
+  // Instance
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue);
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature);
+
+  // remove the entry.
+  // 100204:IS - Hmmm. I'm not sure what the usage...
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature);
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.java
new file mode 100644
index 0000000..b4aac85
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ITypeMapper.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Attribute;
+
+/**
+ * Maps between Objy types (classes and objects), and EMF types.
+ *
+ * @author ibrahim
+ */
+public interface ITypeMapper
+{
+
+  final Numeric_Value numericTrue = new Numeric_Value(true);
+
+  final Numeric_Value numericFalse = new Numeric_Value(false);
+
+  // Model
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature);
+
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature);
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature);
+
+  // Instance
+  public void initialize(Class_Object class_Object, EStructuralFeature feature);
+
+  // delete the entry.
+  // 100204:IS - Hmmm. I'm not sure what the usage...
+  public void delete(ObjyObject objyObject, EStructuralFeature feature);
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.java
new file mode 100644
index 0000000..5e68999
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/IndexesReferenceMapper.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Attribute;
+
+/**
+ * @author Simon McDuff
+ */
+
+// TODO - need implementation.
+public class IndexesReferenceMapper implements IManyTypeMapper
+{
+
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature)
+  {
+    EAnnotation annotation = feature.getEAnnotation("ooindex");
+    if (annotation != null)
+    {
+      // String oclString = annotation.getDetails().get("key");
+
+    }
+    return true;
+  }
+
+  public Object getValue(ObjyObject internal, EStructuralFeature feature, int index)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public void setValue(ObjyObject internal, EStructuralFeature feature, int index, Object newValue)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    return true;
+  }
+
+  public void add(ObjyObject classObject, EStructuralFeature feature, int index, Object value)
+  {
+    // Index element!!!
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void addAll(ObjyObject classObject, EStructuralFeature feature, int index, Object[] value)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public int size(ObjyObject classObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException();
+  }
+
+  public void initialize(Class_Object class_Object, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void clear(ObjyObject classObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public Object remove(ObjyObject classObject, EStructuralFeature feature, int index)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void delete(ObjyObject class_Object, EStructuralFeature feature)
+  {
+  }
+
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValue)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.java
new file mode 100644
index 0000000..ccc5e5c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ManyReferenceMapper.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListId;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.TypeConvert;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeListX;
+
+/**
+ * @author Simon McDuff
+ */
+public class ManyReferenceMapper extends BasicTypeMapper implements IManyTypeMapper
+{
+  static d_Class dClassObject = null;
+
+  static ManyReferenceMapper INSTANCE = new ManyReferenceMapper();
+
+  @SuppressWarnings("unused")
+  private static d_Class getArrayListClass()
+  {
+    if (dClassObject == null)
+    {
+      dClassObject = ObjySchema.getTopModule().resolve_class(ObjyArrayListId.className);
+    }
+    return dClassObject;
+  }
+
+  public boolean createSchema(Proposed_Class propClass, EStructuralFeature feature)
+  {
+    try
+    {
+      // ooArrayListId.buildSchema();
+
+      propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          feature.getName(), // Attribute name
+          1, // # elements in fixed-size array
+          ObjyArrayListId.className, false); // Default value // Default value
+
+      return true;
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+      return false;
+    }
+  }
+
+  public Object getValue(ObjyObject internal, EStructuralFeature feature, int index)
+  {
+    ObjyArrayListId list = getList(internal, feature);
+    if (list != null)
+    {
+      return list.get(index);
+    }
+
+    try
+    {
+      throw new Exception("Trying to getValue of object while the list is null.");
+    }
+    catch (Exception e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return null;
+  }
+
+  public void setValue(ObjyObject internal, EStructuralFeature feature, int index, Object newValue)
+  {
+    ObjyArrayListId list = getList(internal, feature);
+
+    try
+    {
+      if (list != null)
+      {
+        list.set(index, TypeConvert.toOoId(newValue));
+      }
+      else
+      {
+        throw new Exception("Trying to setValue for object while the list is null.");
+      }
+    }
+    catch (Exception e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+  }
+
+  public ObjyArrayListId getList(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // System.out.println("getList() for : " + objyObject.ooId().getStoreString() + " feature: " + feature.getName());
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    ObjyArrayListId list = (ObjyArrayListId)objyObject.getFeatureList(attributeName/* position */);
+    if (list == null)
+    {
+      try
+      {
+        ooId oid = objyObject.get_ooId(attributeName/* position */);
+        if (!oid.isNull())
+        {
+          list = new ObjyArrayListId(Class_Object.class_object_from_oid(oid));
+          objyObject.setFeatureList(attributeName/* position */, list);
+        }
+        // System.out.println("... getList() -> gotOID: " + oid.getStoreString());
+      }
+      catch (ObjyRuntimeException e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+    return list;
+  }
+
+  public int size(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    ObjyArrayListId list = getList(objyObject, feature);
+
+    return (int)(list == null ? 0 : list.size());
+  }
+
+  public void add(ObjyObject objyObject, EStructuralFeature feature, int index, Object value)
+  {
+    ooId obj = TypeConvert.toOoId(value);
+    ObjyArrayListId list = getList(objyObject, feature);
+    if (list != null)
+    {
+      list.add(index, obj);
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to add objects while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+  }
+
+  public void addAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] value)
+  {
+    ObjyArrayListId list = getList(objyObject, feature);
+    if (list != null)
+    {
+      list.addAll(index, value);
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to addAll objects while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    System.out.println("OBJYIMPL: ManyReferenceMapper.validate() - not implemented.");
+    return true;
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // Class_Position position = classObject.position_in_class(getAttributeName(feature));
+    // Class_Object newClassObject = Class_Object
+    // .new_persistent_object(getArrayListClass(), classObject.objectID(), false);
+    ooTreeListX list = new ooTreeListX(2, false);
+    // ObjyObjectManager.newInternalObjCount++;
+    ooObj anObj = ooObj.create_ooObj(classObject.objectID());
+    anObj.cluster(list);
+    classObject.nset_ooId(getAttributeName(feature), list.getOid());
+    // classObject.set_ooId(position, newClassObject.objectID());
+    // ObjyArrayListId.initObject(newClassObject);
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // System.out.println("delete() for : " + objyObject.ooId().getStoreString() + " feature: " + feature.getName());
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    ooId tobeDeleted = objyObject.get_ooId(attributeName/* position */);
+    ooObj objectToDelete = ooObj.create_ooObj(tobeDeleted);
+    objectToDelete.delete();
+    // set the reference to null.
+    objyObject.set_ooId(getAttributeName(feature)/* position */, null);
+    objyObject.setFeatureList(attributeName/* position */, null);
+  }
+
+  public void clear(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    ObjyArrayListId list = getList(objyObject, feature);
+    if (list != null)
+    {
+      list.clear();
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to clear objects while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    // System.out.println("remove() for : " + objyObject.ooId().getStoreString() + " feature: " + feature.getName() +
+    // " index: "+index);
+    Object oldValue = getValue(objyObject, feature, index);
+    ObjyArrayListId list = getList(objyObject, feature);
+
+    if (list != null)
+    {
+      list.remove(index);
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to remove element while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+
+    return oldValue;
+  }
+
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    int size = size(objyObject, feature);
+
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+
+    // CDOList cdoList = CDOListFactory.DEFAULT.createList(size, size, 0);
+    ooId[] ooIds = null;
+    ObjyArrayListId list = getList(objyObject, feature);
+
+    if (list != null)
+    {
+      ooIds = list.getAll(index, size);
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to getAll objects while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+
+    return ooIds;
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValues)
+  {
+    addAll(objyObject, feature, 0, newValues);
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    ObjyArrayListId list = getList(objyObject, feature);
+
+    if (list != null)
+    {
+      list.move(targetIndex, sourceIndex);
+    }
+    else
+    {
+      try
+      {
+        throw new Exception("Trying to move element while the list is null.");
+      }
+      catch (Exception e)
+      {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.java
new file mode 100644
index 0000000..15afc9a
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/MultipleTypeMapper.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Attribute;
+
+import java.util.ArrayList;
+
+// TODO - verify the need for this, and perhaps extend the implementation to the
+//        colletion of mappers.
+public class MultipleTypeMapper extends BasicTypeMapper implements IManyTypeMapper
+{
+  ArrayList<IManyTypeMapper> mapperList = new ArrayList<IManyTypeMapper>();
+
+  public void add(IManyTypeMapper attributeBridge)
+  {
+    mapperList.add(attributeBridge);
+  }
+
+  // @Override
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature)
+  {
+    boolean result = true;
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      result &= manyMapper.createSchema(proposedClasses, feature);
+    }
+    return result;
+  }
+
+  // @Override
+  public Object getValue(ObjyObject class_Object, EStructuralFeature feature, int index)
+  {
+    return mapperList.get(0).getValue(class_Object, feature, index);
+  }
+
+  // @Override
+  public void initialize(Class_Object class_Object, EStructuralFeature feature)
+  {
+    for (ITypeMapper manyMapper : mapperList)
+    {
+      manyMapper.initialize(class_Object, feature);
+    }
+  }
+
+  // @Override
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      manyMapper.modifySchema(proposedooClass, feature);
+    }
+  }
+
+  // @Override
+  public void setValue(ObjyObject class_Object, EStructuralFeature feature, int index, Object newValue)
+  {
+    mapperList.get(0).setValue(class_Object, feature, index, newValue);
+  }
+
+  // @Override
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+
+    boolean result = true;
+    for (ITypeMapper manyMapper : mapperList)
+    {
+      result &= manyMapper.validate(ooAttribute, feature);
+    }
+    return result;
+
+  }
+
+  // @Override
+  public void add(ObjyObject classObject, EStructuralFeature feature, int index, Object value)
+  {
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      manyMapper.add(classObject, feature, index, value);
+    }
+
+  }
+
+  public void addAll(ObjyObject classObject, EStructuralFeature feature, int index, Object[] value)
+  {
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      manyMapper.addAll(classObject, feature, index, value);
+    }
+  }
+
+  // @Override
+  public int size(ObjyObject classObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    return mapperList.get(0).size(classObject, feature);
+  }
+
+  // @Override
+  public void clear(ObjyObject classObject, EStructuralFeature feature)
+  {
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      manyMapper.clear(classObject, feature);
+    }
+
+  }
+
+  // @Override
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    Object returnValue = null;
+    int i = 0;
+    for (IManyTypeMapper manyMapper : mapperList)
+    {
+      Object object = manyMapper.remove(objyObject, feature, index);
+      if (i == 0)
+      {
+        returnValue = object;
+      }
+    }
+    return returnValue;
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+  }
+
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    return mapperList.get(0).getAll(objyObject, feature, index, chunkSize);
+  }
+
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValues)
+  {
+    mapperList.get(0).setAll(objyObject, feature, index, newValues);
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    mapperList.get(0).move(objyObject, feature, targetIndex, sourceIndex);
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.java
new file mode 100644
index 0000000..b898bc5
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericManyTypeMapper.java
@@ -0,0 +1,701 @@
+/*
+ * Copyright (c) 2010-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Basic_Attribute;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.Proposed_Property;
+import com.objy.as.app.VArray_Object;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Class;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+
+import java.util.Date;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public abstract class NumericManyTypeMapper extends BasicTypeMapper implements IManyTypeMapper
+{
+
+  protected abstract Object fromNumericValue(Numeric_Value numericValue, boolean isNull);
+
+  protected abstract Numeric_Value toNumericValue(Object value);
+
+  protected abstract ooBaseType getObjyBaseType();
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, NumericManyTypeMapper.class);
+
+  public static NumericManyTypeMapper.TMBoolean TMBOOLEAN = new TMBoolean();
+
+  public static NumericManyTypeMapper.TMByte TMBYTE = new TMByte();
+
+  public static NumericManyTypeMapper.TMChar TMCHAR = new TMChar();
+
+  public static NumericManyTypeMapper.TMDate TMDATE = new TMDate();
+
+  public static NumericManyTypeMapper.TMDouble TMDOUBLE = new TMDouble();
+
+  public static NumericManyTypeMapper.TMFloat TMFLOAT = new TMFloat();
+
+  public static NumericManyTypeMapper.TMInteger TMINTEGER = new TMInteger();
+
+  public static NumericManyTypeMapper.TMLong TMLONG = new TMLong();
+
+  public static NumericManyTypeMapper.TMShort TMSHORT = new TMShort();
+
+  // ---------------------------------
+  // Schema
+  // ---------------------------------
+
+  private String embeddedClassName()
+  {
+    return "oo_" + getObjyBaseType() + "_Class";
+  }
+
+  private d_Class getEmbeddedClass()
+  {
+    d_Class embeddedClass = ObjySchema.getTopModule().resolve_class(embeddedClassName());
+    // System.out.println("OBJY: Resolving className: " + embeddedClassName() + " - d_Class: " + embeddedClass);
+    return embeddedClass;
+  }
+
+  private boolean createEmbeddedClass()
+  {
+    boolean bDone = true;
+
+    d_Module top_mod = ObjySchema.getTopModule();
+    boolean inProcess = top_mod.proposed_classes().hasNext();
+
+    Proposed_Class propClass = top_mod.propose_new_class(embeddedClassName());
+
+    propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        embeddedAttributeName, // Attribute name
+        1, // # elements in fixed-size array
+        getObjyBaseType() // Type of numeric data
+    ); // Default value
+
+    propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        embeddedAttributeNull, // Attribute name
+        1, // # elements in fixed-size array
+        ooBaseType.ooBOOLEAN// Type of numeric data
+    ); // Default value
+
+    // System.out.println("OBJY: Propose Creating new class: " + embeddedClassName());
+
+    // ObjySchema.getTopModule().propose_new_class(propClass);
+    if (!inProcess)
+    {
+      top_mod.activate_proposals(true, true);
+    }
+
+    return bDone;
+  }
+
+  /**
+   *
+   */
+  public boolean createSchema(Proposed_Class proposedClass, EStructuralFeature feature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Adding attribute " + feature.getName() + "  " + this.getClass().getName());
+    }
+
+    // create an embedded class (attributeType, attributeIsNull).
+    // TODO - we might need to move this to the .objectivity.schema, since it's
+    // independent of the model classes.
+
+    if (getEmbeddedClass() == null && !createEmbeddedClass())
+    {
+      return false;
+    }
+
+    // create array of embedded class type.
+    proposedClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        getAttributeName(feature), // Attribute name
+        1, embeddedClassName());
+
+    return false;
+  }
+
+  /**
+   * TODO - this is a simple change to the attribute, make it handle more complex cases. I also don't think it does
+   * handle the arrays.
+   *
+   * @param proposedooClass
+   * @param feature
+   */
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    Proposed_Property prop = proposedooClass.resolve_property(getAttributeName(feature));
+
+    if (prop instanceof Proposed_Basic_Attribute)
+    {
+      Proposed_Basic_Attribute attr = (Proposed_Basic_Attribute)prop;
+      attr.change_base_type(getObjyBaseType());
+    }
+  }
+
+  /**
+   * TBD - Fixed size array attributes can't be accessed, so we can't validate This!!! OFJ (Fix it)
+   */
+  public boolean validate(d_Attribute dAttribute, EStructuralFeature feature)
+  {
+    System.out.println(">>>OBJYIMPL: NumericManyTypeMapper.validate() - not implemented.");
+    return true;
+    // d_Class varrayClass = dAttribute.class_type_of();
+    // d_Class embeddedClass = varrayClass.
+    // Class_Position position = embeddedClass.position_in_class(getAttributeName(feature));
+    // //d_Type type = ooAttribute.type_of();
+    // d_Type type = embeddedClass.attribute_at_position(position).type_of();
+    // if (TRACER_DEBUG.isEnabled()) {
+    // TRACER_DEBUG.trace(getAttributeName(feature) + " "
+    // + ((Basic_Type) type).base_type() + " basic type "
+    // + type.is_basic_type() + " - " + getObjyBaseType());
+    // }
+    // return type.is_basic_type()
+    // && ((Basic_Type) type).base_type() == getObjyBaseType();
+  }
+
+  // ---------------------------------
+  // Object
+  // ---------------------------------
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, int index, Object newValue)
+  {
+    // System.out.println("OBJY: Set value in VArray at index: "+ index + " - value: " + newValue);
+    boolean isNull = newValue == null;
+    Numeric_Value numericValue = toNumericValue(newValue);
+    Numeric_Value isNullValue = isNull ? numericTrue : numericFalse;
+
+    Class_Object embedded = getArray(objyObject, feature).get_class_obj(index);
+
+    embedded.set_numeric(valueAttributePosition, numericValue);
+    embedded.set_numeric(nullAttributePosition, isNullValue);
+  }
+
+  // get a single object/value at index.
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    Numeric_Value numericValue = null;
+
+    Class_Object embedded = getArray(objyObject, feature).get_class_obj(index);
+
+    numericValue = embedded.get_numeric(valueAttributePosition);
+    boolean isNull = embedded.get_numeric(nullAttributePosition).booleanValue();
+
+    return fromNumericValue(numericValue, isNull);
+  }
+
+  // remove a single value at index, it will set the value to default, and mark it
+  // as "null", i.e. unset.
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    // we'll just get the original value, and set the value to null.
+    // Numeric_Value numericValue = null;
+
+    long size = (int)getArray(objyObject, feature).size();
+    for (int i = index; i < size - 1; i++)
+    {
+      setValue(objyObject, feature, i, getValue(objyObject, feature, i + 1));
+    }
+    // resize the array.
+    getArray(objyObject, feature).resize(size - 1);
+    /*
+     * Class_Object embedded = getArray(objyObject, feature).get_class_obj(index); numericValue =
+     * embedded.get_numeric(valueAttributePosition); boolean isNull =
+     * embedded.get_numeric(nullAttributePosition).booleanValue(); Object oldValue = fromNumericValue(numericValue,
+     * isNull); numericValue = toNumericValue(null); embedded.set_numeric(valueAttributePosition, numericValue);
+     * embedded.set_numeric(nullAttributePosition, numericTrue);
+     */
+    return null;
+  }
+
+  // add value at index (extend the collection size).
+  public void add(ObjyObject objyObject, EStructuralFeature feature, int index, Object value)
+  {
+    int arraySize = size(objyObject, feature);
+    // System.out.println("OBJY: Adding object inside VArray at index: "+ index + " - value: " + value);
+    if (index < arraySize - 1)
+    {
+      // throw new UnsupportedOperationException("adding object inside VArray?!!... Implement Me!!!");
+      // resize the VArray.
+      VArray_Object array = getArray(objyObject, feature);
+      array.resize(arraySize + 1);
+      for (int i = arraySize; i > index; i--)
+      {
+        Class_Object newEmbedded = array.get_class_obj(i);
+        Class_Object oldEmbedded = array.get_class_obj(i - 1);
+        newEmbedded.set_numeric(valueAttributePosition, oldEmbedded.get_numeric(valueAttributePosition));
+        newEmbedded.set_numeric(nullAttributePosition, oldEmbedded.get_numeric(nullAttributePosition));
+      }
+    }
+    if (index != -1 && index > arraySize)
+    {
+      throw new UnsupportedOperationException("adding object beyond VArray size()?!!... Implement Me!!!");
+    }
+
+    getArray(objyObject, feature).resize(arraySize + 1);
+
+    setValue(objyObject, feature, index, value);
+  }
+
+  public// add all objects starting from an index. (extend the collection size).
+  void addAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] values)
+  {
+    // System.out.println("OBJY: AddAll objects inside VArray at index: "+ index + " - values: " + values);
+    int arraySize = size(objyObject, feature);
+    if (index < arraySize - 1)
+    {
+      throw new UnsupportedOperationException("adding objects inside VArray?!!... Implement Me!!!");
+    }
+
+    if (index != -1 && index > arraySize)
+    {
+      throw new UnsupportedOperationException("adding objects beyond VArray size()?!!... Implement Me!!!");
+    }
+
+    int newSize = arraySize + values.length;
+    getArray(objyObject, feature).resize(newSize);
+
+    for (int i = 0; i < values.length; i++)
+    {
+      setValue(objyObject, feature, arraySize + i, values[i]);
+    }
+  }
+
+  // clear all collection.
+  public void clear(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // set the varray size to 0.
+    getArray(objyObject, feature).resize(0);
+  }
+
+  // this is similar to addAll, but it replaces the existing ones.
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValues)
+  {
+
+    VArray_Object array = getArray(objyObject, feature);
+
+    array.resize(newValues.length);
+    for (int i = 0; i < newValues.length; i++)
+    {
+      // TODO - we might need to optimize this!!!
+      setValue(objyObject, feature, i, newValues[i]);
+    }
+  }
+
+  // get all objects/values starting from an index.
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    int size = size(objyObject, feature);
+
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+
+    Object[] values = new Object[size];
+
+    // TODO - we might need to optimize this!!!!
+    for (int i = 0; i < size; i++)
+    {
+      values[i] = getValue(objyObject, feature, i + index);
+    }
+    return values;
+  }
+
+  // return the size of the collection.
+  public int size(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    return (int)getArray(objyObject, feature).size();
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    if (targetIndex == sourceIndex)
+    {
+      return;
+    }
+
+    // get the object at sourceIndex.
+    Object value = getValue(objyObject, feature, sourceIndex);
+
+    // long size = (int)getArray(objyObject, feature).size();
+    // TODO - check boundaries...
+
+    if (sourceIndex > targetIndex)
+    {
+      for (int i = sourceIndex; i > targetIndex; i--)
+      {
+        setValue(objyObject, feature, i, getValue(objyObject, feature, i - 1));
+      }
+    }
+    else if (sourceIndex < targetIndex)
+    {
+      for (int i = sourceIndex; i < targetIndex; i++)
+      {
+        setValue(objyObject, feature, i, getValue(objyObject, feature, i + 1));
+      }
+    }
+    // set the saved value at target
+    setValue(objyObject, feature, targetIndex, value);
+
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // TODO - verify if we need to do any initialization!!!
+  }
+
+  protected VArray_Object getArray(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    return objyObject.get_varray(attributeName/* position */);
+  }
+
+  // ------------------------------------------------------------------------
+  // ------------------- Various types --------------------------
+  // ------------------------------------------------------------------------
+
+  // ---------------------------
+  // Boolean
+  // ---------------------------
+  public static class TMBoolean extends NumericManyTypeMapper
+  {
+    @Override
+    protected ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooBOOLEAN;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Boolean value = null;
+      if (!isNull)
+      {
+        value = numericValue.booleanValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(false);
+      }
+
+      return new Numeric_Value(((Boolean)value).booleanValue());
+    }
+  }
+
+  // ---------------------------
+  // Byte
+  // ---------------------------
+  public static class TMByte extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT8;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Byte value = null;
+      if (!isNull)
+      {
+        value = numericValue.byteValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Byte)value).byteValue());
+    }
+  }
+
+  // ---------------------------
+  // Char
+  // ---------------------------
+  public static class TMChar extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT8;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Character value = null;
+      if (!isNull)
+      {
+        value = numericValue.charValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Character)value).charValue());
+    }
+  }
+
+  // ---------------------------
+  // Date
+  // ---------------------------
+  public static class TMDate extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Date value = null;
+      if (!isNull)
+      {
+        value = new Date(numericValue.longValue());
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Date)value).getTime());
+    }
+  }
+
+  // ---------------------------
+  // Double
+  // ---------------------------
+  public static class TMDouble extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooFLOAT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Double value = null;
+      if (!isNull)
+      {
+        value = numericValue.doubleValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0.0);
+      }
+
+      return new Numeric_Value(((Double)value).doubleValue());
+    }
+  }
+
+  // ---------------------------
+  // Float
+  // ---------------------------
+  public static class TMFloat extends NumericManyTypeMapper
+  {
+    @Override
+    protected ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooFLOAT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Float value = null;
+      if (!isNull)
+      {
+        value = numericValue.floatValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0.0);
+      }
+
+      return new Numeric_Value(((Float)value).floatValue());
+    }
+  }
+
+  // ---------------------------
+  // Integer
+  // ---------------------------
+  public static class TMInteger extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT32;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Integer value = null;
+      if (!isNull)
+      {
+        value = numericValue.intValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Integer)value).intValue());
+    }
+  }
+
+  // ---------------------------
+  // Long
+  // ---------------------------
+  public static class TMLong extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Long value = null;
+      if (!isNull)
+      {
+        value = numericValue.longValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Long)value).longValue());
+    }
+  }
+
+  // ---------------------------
+  // Short
+  // ---------------------------
+  public static class TMShort extends NumericManyTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT16;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Short value = null;
+      if (!isNull)
+      {
+        value = numericValue.shortValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Short)value).shortValue());
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.java
new file mode 100644
index 0000000..9e05451
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/NumericTypeMapper.java
@@ -0,0 +1,522 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Basic_Type;
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Basic_Attribute;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.Proposed_Property;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.d_Type;
+import com.objy.as.app.ooBaseType;
+
+import java.util.Date;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public abstract class NumericTypeMapper extends BasicTypeMapper implements ISingleTypeMapper
+{
+
+  abstract protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull);
+
+  abstract protected Numeric_Value toNumericValue(Object value);
+
+  abstract protected ooBaseType getObjyBaseType();
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, NumericTypeMapper.class);
+
+  public static NumericTypeMapper.TMBoolean TMBOOLEAN = new TMBoolean();
+
+  public static NumericTypeMapper.TMByte TMBYTE = new TMByte();
+
+  public static NumericTypeMapper.TMChar TMCHAR = new TMChar();
+
+  public static NumericTypeMapper.TMDate TMDATE = new TMDate();
+
+  public static NumericTypeMapper.TMDouble TMDOUBLE = new TMDouble();
+
+  public static NumericTypeMapper.TMFloat TMFLOAT = new TMFloat();
+
+  public static NumericTypeMapper.TMInteger TMINTEGER = new TMInteger();
+
+  public static NumericTypeMapper.TMLong TMLONG = new TMLong();
+
+  public static NumericTypeMapper.TMShort TMSHORT = new TMShort();
+
+  // ---------------------------------
+  // Schema
+  // ---------------------------------
+  /**
+   *
+   */
+  public boolean createSchema(Proposed_Class proposedClass, EStructuralFeature feature)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace("Adding attribute " + feature.getName() + "  " + this.getClass().getName());
+    }
+
+    proposedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        getAttributeName(feature), // Attribute name
+        1, // # elements in fixed-size array
+        getObjyBaseType() // Default value
+    );
+
+    proposedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        getNullAttributeName(feature), // Attribute name
+        1, // # elements in fixed-size array
+        ooBaseType.ooBOOLEAN // Default value
+    );
+    return false;
+  }
+
+  /**
+   * TODO - this is a simple change to the attribute, make it handle more complex cases.
+   *
+   * @param proposedooClass
+   * @param feature
+   */
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    Proposed_Property prop = proposedooClass.resolve_property(getAttributeName(feature));
+
+    if (prop instanceof Proposed_Basic_Attribute)
+    {
+      Proposed_Basic_Attribute attr = (Proposed_Basic_Attribute)prop;
+      attr.change_base_type(getObjyBaseType());
+    }
+  }
+
+  /**
+   *
+   */
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    d_Type type = ooAttribute.type_of();
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.trace(getAttributeName(feature) + " " + ((Basic_Type)type).base_type() + " basic type " + type.is_basic_type() + " - " + getObjyBaseType());
+    }
+    return type.is_basic_type() && ((Basic_Type)type).base_type() == getObjyBaseType();
+  }
+
+  /**
+   * The numeric attribute is an embedded class with (basic/boolean) pair. The boolean represent objects of basic types
+   * with null value. TODO - I thought this should work.... find out why not!!!
+   */
+  // public boolean validate(d_Attribute dAttribute, EStructuralFeature feature)
+  // {
+  // d_Class embeddedClass = dAttribute.class_type_of();
+  // Class_Position position = embeddedClass.position_in_class(getAttributeName(feature));
+  // //d_Type type = ooAttribute.type_of();
+  // d_Type type = embeddedClass.attribute_at_position(position).type_of();
+  // if (TRACER_DEBUG.isEnabled()) {
+  // TRACER_DEBUG.trace(getAttributeName(feature) + " "
+  // + ((Basic_Type) type).base_type() + " basic type "
+  // + type.is_basic_type() + " - " + getObjyBaseType());
+  // }
+  // return type.is_basic_type()
+  // && ((Basic_Type) type).base_type() == getObjyBaseType();
+  // }
+
+  // ---------------------------------
+  // Object
+  // ---------------------------------
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    Numeric_Value numericValue = null;
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+
+    // if (isNull && feature.isUnsettable())
+    // return CDORevisionData.NIL;
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+      numericValue = objyObject.get_numeric(attributeName/* position */);
+    }
+
+    return fromNumericValue(numericValue, isNull);
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    boolean isNull = newValue == null || newValue == CDORevisionData.NIL;
+    Numeric_Value isNullValue = isNull ? numericTrue : numericFalse;
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+      Numeric_Value numericValue = toNumericValue(newValue);
+      objyObject.set_numeric(attributeName/* position */, numericValue);
+    }
+
+    objyObject.set_numeric(nullAttributeName/* nullPosition */, isNullValue);
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // throw new UnsupportedOperationException("Implement me!!");
+    // we just set the numeric _null to "true"
+    // Class_Position position = getNullAttributePosition(objyObject, feature);
+    // String nullAttributeName = getNullAttributeName(feature);
+    objyObject.set_numeric(getNullAttributeName(feature)/* position */, numericTrue);
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // Class_Position position = classObject.type_of().position_in_class(getNullAttributeName(feature));
+    classObject.nset_numeric(getNullAttributeName(feature) /* position */, numericTrue);
+  }
+
+  // various numeric types....
+  // ---------------------------
+  // Boolean
+  // ---------------------------
+  public static class TMBoolean extends NumericTypeMapper
+  {
+    @Override
+    protected ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooBOOLEAN;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Boolean value = null;
+      if (!isNull)
+      {
+        value = numericValue.booleanValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(false);
+      }
+
+      return new Numeric_Value(((Boolean)value).booleanValue());
+    }
+  }
+
+  // ---------------------------
+  // Byte
+  // ---------------------------
+  public static class TMByte extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT8;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Byte value = null;
+      if (!isNull)
+      {
+        value = numericValue.byteValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Byte)value).byteValue());
+    }
+  }
+
+  // ---------------------------
+  // Char
+  // ---------------------------
+  public static class TMChar extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT8;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Character value = null;
+      if (!isNull)
+      {
+        value = numericValue.charValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Character)value).charValue());
+    }
+  }
+
+  // ---------------------------
+  // Date
+  // ---------------------------
+  public static class TMDate extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Date value = null;
+      if (!isNull)
+      {
+        value = new Date(numericValue.longValue());
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Date)value).getTime());
+    }
+  }
+
+  // ---------------------------
+  // Double
+  // ---------------------------
+  public static class TMDouble extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooFLOAT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Double value = null;
+      if (!isNull)
+      {
+        value = numericValue.doubleValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0.0);
+      }
+
+      return new Numeric_Value(((Double)value).doubleValue());
+    }
+  }
+
+  // ---------------------------
+  // Float
+  // ---------------------------
+  public static class TMFloat extends NumericTypeMapper
+  {
+    @Override
+    protected ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooFLOAT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Float value = null;
+      if (!isNull)
+      {
+        value = numericValue.floatValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0.0);
+      }
+
+      return new Numeric_Value(((Float)value).floatValue());
+    }
+  }
+
+  // ---------------------------
+  // Integer
+  // ---------------------------
+  public static class TMInteger extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT32;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Integer value = null;
+      if (!isNull)
+      {
+        value = numericValue.intValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Integer)value).intValue());
+    }
+  }
+
+  // ---------------------------
+  // Long
+  // ---------------------------
+  public static class TMLong extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT64;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Long value = null;
+      if (!isNull)
+      {
+        value = numericValue.longValue();
+      }
+      return value;
+
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Long)value).longValue());
+    }
+  }
+
+  // ---------------------------
+  // Short
+  // ---------------------------
+  public static class TMShort extends NumericTypeMapper
+  {
+    @Override
+    public ooBaseType getObjyBaseType()
+    {
+      return ooBaseType.ooINT16;
+    }
+
+    @Override
+    protected Object fromNumericValue(Numeric_Value numericValue, boolean isNull)
+    {
+      Short value = null;
+      if (!isNull)
+      {
+        value = numericValue.shortValue();
+      }
+      return value;
+    }
+
+    @Override
+    protected Numeric_Value toNumericValue(Object value)
+    {
+      if (value == null)
+      {
+        return new Numeric_Value(0);
+      }
+
+      return new Numeric_Value(((Short)value).shortValue());
+    }
+  }
+
+  // ---------------------------
+  // Boolean
+  // ---------------------------
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.java
new file mode 100644
index 0000000..fd00c8e
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/ObjyMapper.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2010-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.util.HashMap;
+
+public class ObjyMapper
+{
+  public static ObjyMapper INSTANCE = new ObjyMapper();
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyMapper.class);
+
+  protected HashMap<EClassifier, ITypeMapper> typeMap = new HashMap<EClassifier, ITypeMapper>();
+
+  protected HashMap<EClassifier, ITypeMapper> manyTypeMap = new HashMap<EClassifier, ITypeMapper>();
+
+  private ITypeMapper manyRef = ManyReferenceMapper.INSTANCE;
+
+  // private AttributeBridge manyRef = new ManyReferenceMapperTreeListX();
+  private ITypeMapper singleRef = new SingleReferenceMapper();
+
+  // private ITypeMapper singleContRef = new SingleContainementReferenceMapper();
+
+  public ObjyMapper()
+  {
+    // TODO - this is from the old code. Verify if we still need it?!!!!
+    // MultipleTypeMapper multipleMapper = new MultipleTypeMapper();
+    // multipleMapper.add((IManyTypeMapper)manyRef);
+    // multipleMapper.add(new IndexesReferenceMapper());
+    // manyRef = multipleMapper;
+
+    initMap();
+    initManyMap();
+  }
+
+  public ITypeMapper getTypeMapper(EStructuralFeature feature)
+  {
+    if (feature == null || !ObjyObject.isPersistent(feature))
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("feature is transient " + feature);
+      }
+      return null;
+    }
+
+    boolean isMany = false;
+
+    if (feature.isMany())
+    {
+      isMany = true;
+    }
+
+    if (feature instanceof EAttribute)
+    {
+      // PROBLEM
+      EObject type = feature.getEType();
+      if (type.eIsProxy())
+      {
+        URI a = EcoreUtil.getURI(type);
+        type = EcorePackage.eINSTANCE.eResource().getEObject(a.fragment());
+      }
+      ITypeMapper attrMapper = null;
+      if (isMany)
+      {
+        attrMapper = manyTypeMap.get(type);
+      }
+      else
+      {
+        attrMapper = typeMap.get(type);
+      }
+      if (attrMapper != null)
+      {
+        return attrMapper;
+      }
+
+      if (type instanceof EEnum)
+      {
+        return EnumTypeMapper.INSTANCE;
+      }
+
+      /*** handle custom types... ***/
+      if (type instanceof EDataType)
+      {
+        if (isMany)
+        {
+          return CustomDataManyTypeMapper.INSTANCE;
+        }
+
+        return CustomDataTypeMapper.INSTANCE;
+      }
+    }
+    else if (feature instanceof EReference)
+    {
+      if (isMany)
+      {
+        return manyRef;
+      }
+
+      return singleRef;
+    }
+
+    TRACER_DEBUG
+        .trace("ERROR: " + feature.getEType() + " not supported for feature " + ((EClassifier)feature.eContainer()).getName() + "." + feature.getName());
+    throw new RuntimeException(feature.getEType() + " not supported for feature " + ((EClassifier)feature.eContainer()).getName() + "." + feature.getName());
+  }
+
+  protected void initMap()
+  {
+    // TODO Do not support these type yet
+    typeMap.put(EcorePackage.eINSTANCE.getEBoolean(), NumericTypeMapper.TMBOOLEAN);
+    typeMap.put(EcorePackage.eINSTANCE.getEByte(), NumericTypeMapper.TMBYTE);
+    typeMap.put(EcorePackage.eINSTANCE.getEChar(), NumericTypeMapper.TMCHAR);
+    typeMap.put(EcorePackage.eINSTANCE.getEDate(), NumericTypeMapper.TMDATE);
+    typeMap.put(EcorePackage.eINSTANCE.getEDouble(), NumericTypeMapper.TMDOUBLE);
+    typeMap.put(EcorePackage.eINSTANCE.getEFloat(), NumericTypeMapper.TMFLOAT);
+    typeMap.put(EcorePackage.eINSTANCE.getEInt(), NumericTypeMapper.TMINTEGER);
+    typeMap.put(EcorePackage.eINSTANCE.getELong(), NumericTypeMapper.TMLONG);
+    typeMap.put(EcorePackage.eINSTANCE.getEShort(), NumericTypeMapper.TMSHORT);
+    typeMap.put(EcorePackage.eINSTANCE.getEString(), StringTypeMapper.INSTANCE);
+
+    typeMap.put(EcorePackage.eINSTANCE.getEBooleanObject(), NumericTypeMapper.TMBOOLEAN);
+    typeMap.put(EcorePackage.eINSTANCE.getEByteObject(), NumericTypeMapper.TMBYTE);
+    typeMap.put(EcorePackage.eINSTANCE.getECharacterObject(), NumericTypeMapper.TMCHAR);
+    typeMap.put(EcorePackage.eINSTANCE.getEDoubleObject(), NumericTypeMapper.TMDOUBLE);
+    typeMap.put(EcorePackage.eINSTANCE.getEIntegerObject(), NumericTypeMapper.TMINTEGER);
+    typeMap.put(EcorePackage.eINSTANCE.getELongObject(), NumericTypeMapper.TMLONG);
+    typeMap.put(EcorePackage.eINSTANCE.getEFloatObject(), NumericTypeMapper.TMFLOAT);
+
+    // the EByteArray doesn't show us as isMany()== true?!!!!
+    typeMap.put(EcorePackage.eINSTANCE.getEByteArray(), ByteArrayTypeMapper.INSTANCE);
+    typeMap.put(EcorePackage.eINSTANCE.getEBigDecimal(), BigDecimalTypeMapper.INSTANCE);
+    typeMap.put(EcorePackage.eINSTANCE.getEBigInteger(), BigIntegerTypeMapper.INSTANCE);
+
+  }
+
+  private void initManyMap()
+  {
+    // TODO Do not support these type yet
+    // typeMap.put(EcorePackage.eINSTANCE.getEBigDecimal()
+    // typeMap.put(EcorePackage.eINSTANCE.getEBigInteger()
+
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEBoolean(), NumericManyTypeMapper.TMBOOLEAN);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEByte(), NumericManyTypeMapper.TMBYTE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEChar(), NumericManyTypeMapper.TMCHAR);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEDate(), NumericManyTypeMapper.TMDATE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEDouble(), NumericManyTypeMapper.TMDOUBLE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEFloat(), NumericManyTypeMapper.TMFLOAT);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEInt(), NumericManyTypeMapper.TMINTEGER);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getELong(), NumericManyTypeMapper.TMLONG);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEShort(), NumericManyTypeMapper.TMSHORT);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEString(), StringManyTypeMapper.INSTANCE);
+
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEBooleanObject(), NumericManyTypeMapper.TMBOOLEAN);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEByteObject(), NumericManyTypeMapper.TMBYTE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getECharacterObject(), NumericManyTypeMapper.TMCHAR);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEDoubleObject(), NumericManyTypeMapper.TMDOUBLE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEFloatObject(), NumericManyTypeMapper.TMFLOAT);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEIntegerObject(), NumericManyTypeMapper.TMINTEGER);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getELongObject(), NumericManyTypeMapper.TMLONG);
+
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEByteArray(), NumericManyTypeMapper.TMBYTE);
+    manyTypeMap.put(EcorePackage.eINSTANCE.getEFeatureMapEntry(), FeatureMapTypeMapper.INSTANCE);
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.java
new file mode 100644
index 0000000..264091b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleContainementReferenceMapper.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring comments for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.db.app.ooId;
+
+/**
+ * @author Simon McDuff
+ */
+// 100202:IS - this is leftover from the refactoring... verify if we need it.
+@Deprecated
+public class SingleContainementReferenceMapper extends BasicTypeMapper implements ISingleTypeMapper
+{
+
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature)
+  {
+    EClassifier destination = feature.getEType();
+
+    String destinationClassName = ObjySchema.getObjectivityClassName(destination);
+    // Containment relationship
+    // We do not detect recursive embedded relationship
+    proposedClasses.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+        d_Access_Kind.d_PUBLIC, // Access kind
+        feature.getName(), // Attribute name
+        1, // # elements in fixed-size array
+        destinationClassName); // Default value
+    return false;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    // TODO Auto-generated method stub
+    ooId id2 = objyObject.get_ooId(attributeName/* position */);
+    if (id2 == null || id2.isNull())
+    {
+      return null;
+    }
+    Class_Object childObject = objyObject.get_class_obj(attributeName/* position */);
+    return childObject;
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    objyObject.set_ooId(attributeName/* position */, (ooId)newValue);
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void delete(ObjyObject class_Object, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.java
new file mode 100644
index 0000000..398e566
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/SingleReferenceMapper.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProxy;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.TypeConvert;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.db.app.ooId;
+
+/**
+ * @author Simon McDuff
+ */
+// TODO - we ignore the boolean value for null references....
+public class SingleReferenceMapper extends BasicTypeMapper implements ISingleTypeMapper
+{
+  static public SingleReferenceMapper INSTANCE = new SingleReferenceMapper();
+
+  public boolean createSchema(Proposed_Class proposedClasses, EStructuralFeature feature)
+  {
+    EClassifier destination = feature.getEType();
+
+    String destinationClassName = ObjySchema.getObjectivityClassName(destination);
+
+    proposedClasses.add_ref_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+        feature.getName(), // Attribute name
+        1, // # elements in fixed-size array
+        destinationClassName, // Type of numeric data
+        false); // Short reference
+    return false;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    /***
+     * ooId id2 = internal.ooClassObject().get_ooId(position); if (id2 == null || id2.isNull()) { return null; }
+     ***/
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    return getValue(objyObject, attributeName/* position */);
+  }
+
+  // called by ObjyObject to get some resource elements.
+  public Object getValue(ObjyObject objyObject, String attributeName/* Class_Position position */)
+  {
+    ooId childObject = objyObject.get_ooId(attributeName/* position */);
+
+    if (!childObject.isNull())
+    {
+      // check for external reference.
+      // TODO -
+      // we can optimize this by making sure the object is flagged by having external
+      // references, and only do the following if true.
+      // System.out.println("-->> IS: getting Class_Object from OID: " + childObject.getStoreString());
+      Class_Object refClassObject = Class_Object.class_object_from_oid(childObject);
+
+      if (refClassObject.type_of().name().equals(ObjyProxy.className))
+      {
+        ObjyProxy proxyObject = new ObjyProxy(refClassObject);
+        return OBJYCDOIDUtil.createCDIDExternal(proxyObject);
+      }
+    }
+    // convert to CDOID, revese of the setValue()
+    return OBJYCDOIDUtil.getCDOID(childObject);
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    setValue(objyObject, attributeName/* position */, newValue);
+  }
+
+  // called by ObjyObject to set resource elements.
+  public void setValue(ObjyObject objyObject, String attributeName/* Class_Position position */, Object newValue)
+  {
+    ooId ooid = null;
+
+    if (newValue instanceof CDOIDExternal)
+    {
+      System.out.println("... CDOIDExternal inserted, content:" + ((CDOIDExternal)newValue).getURI());
+      // create an ObjyProxy object to hold the the value.
+      ObjyProxy proxyObject = ObjyProxy.createObject(objyObject.ooId());
+      proxyObject.setUri(((CDOIDExternal)newValue).getURI());
+      ooid = proxyObject.ooId();
+    }
+    else
+    {
+      ooid = TypeConvert.toOoId(newValue);
+    }
+
+    objyObject.set_ooId(attributeName/* position */, ooid);
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    System.out.println(">>>OBJYIMPL: SingleRefernceMapper.validate() - not implemented.");
+    return true;
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    ooId childOid = objyObject.get_ooId(attributeName/* position */);
+    if (!childOid.isNull())
+    {
+      // This is a single reference, so we shouldn't be deleting the reference
+      // object, just set the reference to NULL.
+      // ooObj childObject = ooObj.create_ooObj(childOid);
+      // childObject.delete();
+      setValue(objyObject, feature, null);
+    }
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // TODO Implement the initialization, if any....
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.java
new file mode 100644
index 0000000..9a1114f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringManyTypeMapper.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayListString;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.db.ObjyRuntimeException;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class StringManyTypeMapper extends BasicTypeMapper implements IManyTypeMapper
+{
+  public static StringManyTypeMapper INSTANCE = new StringManyTypeMapper();
+
+  public boolean createSchema(Proposed_Class proposedClass, EStructuralFeature feature)
+  {
+    try
+    {
+
+      ObjyArrayListString.buildSchema();
+
+      proposedClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          getAttributeName(feature), // Attribute name
+          1, // # elements in fixed-size array
+          ObjyArrayListString.ClassName, false); // Default value // Default value
+
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+    return false;
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Need to implement this.
+    // throw new UnsupportedOperationException("Implement me!!");
+    System.out.println(">>>OBJYIMPL: StringManyTypeMapper.validate() - not implemented.");
+    return true;
+  }
+
+  protected String stringFromObject(EStructuralFeature feature, Object objectValue)
+  {
+    if (objectValue instanceof String)
+    {
+      return (String)objectValue;
+    }
+
+    return null;
+  }
+
+  protected Object objectFromString(EStructuralFeature feature, String stringValue)
+  {
+    return stringValue;
+  }
+
+  protected ObjyArrayListString getList(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+
+    ObjyArrayListString list = (ObjyArrayListString)objyObject.getFeatureList(attributeName/* position */);
+    if (list == null)
+    {
+      list = new ObjyArrayListString(objyObject.get_class_obj(attributeName/* position */));
+      objyObject.setFeatureList(attributeName/* position */, list);
+    }
+    return list;
+  }
+
+  public void add(ObjyObject objyObject, EStructuralFeature feature, int index, Object value)
+  {
+    assert value instanceof String;
+    getList(objyObject, feature).add(stringFromObject(feature, value));
+  }
+
+  public void addAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] values)
+  {
+    // CDOList list = (CDOList) value;
+    String[] strings = new String[values.length];
+    for (int i = 0; i < values.length; i++)
+    {
+      // strings[i] = stringFromObject(feature, values[i]);
+      strings[i] = (String)values[i];
+    }
+    getList(objyObject, feature).addAll(index, strings);
+  }
+
+  public void clear(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    getList(objyObject, feature).clear();
+  }
+
+  public Object[] getAll(ObjyObject objyObject, EStructuralFeature feature, int index, int chunkSize)
+  {
+    int size = size(objyObject, feature);
+
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+
+    String[] strings = getList(objyObject, feature).getAll(index, size);
+
+    Object[] objects = new Object[strings.length];
+
+    for (int i = 0; i < strings.length; i++)
+    {
+      objects[i] = objectFromString(feature, strings[i]);
+    }
+
+    return strings;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    return objectFromString(feature, getList(objyObject, feature).get(index));
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature, int index)
+  {
+    Object oldValue = objectFromString(feature, getList(objyObject, feature).get(index));
+    getList(objyObject, feature).remove(index);
+    return oldValue;
+  }
+
+  public void setAll(ObjyObject objyObject, EStructuralFeature feature, int index, Object[] newValues)
+  {
+    addAll(objyObject, feature, 0, newValues);
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, int index, Object newValue)
+  {
+    assert newValue instanceof String;
+
+    getList(objyObject, feature).set(index, stringFromObject(feature, newValue));
+  }
+
+  public int size(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    return (int)getList(objyObject, feature).size();
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // Class_Position position = classObject.type_of().position_in_class(getAttributeName(feature));
+    Class_Object newClassObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(ObjyArrayListString.ClassName).getASClass(),
+        classObject.objectID(), false);
+    // ObjyObjectManager.newInternalObjCount++;
+    classObject.nset_ooId(getAttributeName(feature), newClassObject.objectID());
+    ObjyArrayListString.initObject(newClassObject);
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void move(ObjyObject objyObject, EStructuralFeature feature, int targetIndex, int sourceIndex)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.java
new file mode 100644
index 0000000..a2a95f8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/mapper/StringTypeMapper.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.mapper;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionData;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Attribute;
+import com.objy.as.app.ooBaseType;
+import com.objy.db.ObjyRuntimeException;
+
+/**
+ * @author Simon McDuff
+ */
+public class StringTypeMapper extends BasicTypeMapper implements ISingleTypeMapper
+{
+  public static StringTypeMapper INSTANCE = new StringTypeMapper();
+
+  @Override
+  protected String getNullAttributeName(EStructuralFeature feature)
+  {
+    return feature.getName() + "_isNull";
+  }
+
+  public boolean createSchema(Proposed_Class proposedClass, EStructuralFeature feature)
+  {
+    try
+    {
+
+      proposedClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          feature.getName(), // Attribute name
+          1, // # elements in fixed-size array
+          "ooUtf8String"); // Default value
+
+      proposedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          getNullAttributeName(feature), // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooBOOLEAN // Default value
+      );
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+    return false;
+  }
+
+  public Object getValue(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // Class_Position position = getAttributePosition(objyObject, feature);
+    String attributeName = getAttributeName(feature);
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+    String_Value stringValue = objyObject.get_string(attributeName/* position */);
+    boolean isNull = objyObject.get_numeric(nullAttributeName/* nullPosition */).booleanValue();
+    Object value = null;
+
+    if (!isNull)
+    {
+      value = stringValue.toString();
+      // else if (feature.isUnsettable())
+      // value = CDORevisionData.NIL;
+    }
+
+    return value;
+  }
+
+  public void setValue(ObjyObject objyObject, EStructuralFeature feature, Object newValue)
+  {
+    boolean isNull = newValue == null || newValue == CDORevisionData.NIL;
+    // Class_Position nullPosition = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+
+    if (!isNull)
+    {
+      // Class_Position position = getAttributePosition(objyObject, feature);
+      String attributeName = getAttributeName(feature);
+      String_Value stringValue = objyObject.get_string(attributeName/* position */);
+      stringValue.update();
+      stringValue.set((String)newValue);
+    }
+    Numeric_Value isNullValue = newValue == null ? numericTrue : numericFalse;
+    objyObject.set_numeric(nullAttributeName/* nullPosition */, isNullValue);
+  }
+
+  public Object remove(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void delete(ObjyObject objyObject, EStructuralFeature feature)
+  {
+    // we could set the string value to "", but it would be easier to just set
+    // the numeric _null to "true"
+    // Class_Position position = getNullAttributePosition(objyObject, feature);
+    String nullAttributeName = getNullAttributeName(feature);
+    objyObject.set_numeric(nullAttributeName/* position */, numericTrue);
+    // throw new UnsupportedOperationException("Implement me!!");
+  }
+
+  public void initialize(Class_Object classObject, EStructuralFeature feature)
+  {
+    // Class_Position position = classObject.type_of().position_in_class(getNullAttributeName(feature));
+    classObject.nset_numeric(getNullAttributeName(feature), numericTrue);
+  }
+
+  public void modifySchema(Proposed_Class proposedooClass, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+
+  }
+
+  public boolean validate(d_Attribute ooAttribute, EStructuralFeature feature)
+  {
+    // TODO Auto-generated method stub
+    System.out.println(">>>OBJYIMPL: StringTypeMapper.validate() - not implemented.");
+    return true;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.java
new file mode 100644
index 0000000..1b7c816
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayList.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (c) 2010-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.VArray_Object;
+import com.objy.db.app.ooId;
+
+/**
+ * @author Simon McDuff
+ */
+public abstract class ObjyArrayList<T>
+{
+  static final String sizeName = "elementCount";
+
+  static final String arrayName = "curr";
+
+  protected Class_Object classObject;
+
+  private VArray_Object vArray;
+
+  protected transient long cacheSize;
+
+  transient long position;
+
+  public static void initObject(Class_Object classObject)
+  {
+    // set the size to 0;
+    classObject.nset_numeric(sizeName, new Numeric_Value(0));
+  }
+
+  public ObjyArrayList(Class_Object classObject)
+  {
+    this.classObject = classObject;
+    this.cacheSize = -1;
+
+  }
+
+  public ooId getID()
+  {
+    return classObject.objectID();
+  }
+
+  // /**
+  // * TODO - verify need.
+  // */
+  // private Class_Object getClassObject()
+  // {
+  // return classObject;
+  // }
+
+  public void clear()
+  {
+    getVArray().resize(0);
+    cacheSize = 0;
+    saveSize();
+  }
+
+  private void shiftRight(int index)
+  {
+    shiftRight(index, 1);
+  }
+
+  private void shiftRight(int index, int sizeToShift)
+  {
+    long size = this.cachedSize();
+
+    for (long i = size - 1; i >= index; i--)
+    {
+      setValue(i + sizeToShift, getValue(i));
+    }
+
+    cacheSize += sizeToShift;
+    saveSize();
+  }
+
+  private void shiftLeft(int index)
+  {
+    long size = this.cachedSize();
+    for (long i = index; i < size - 1; i++)
+    {
+      setValue(i, getValue(i + 1));
+    }
+
+    cacheSize--;
+    saveSize();
+  }
+
+  /**
+   *
+   */
+  protected void grow(int item)
+  {
+    getVArray().resize(getVArraySize() + Math.max(item + 10, 10));
+  }
+
+  /**
+   *
+   */
+  private void prepareToInsert(int numberToAdd)
+  {
+    long size = cachedSize();
+    update();
+
+    if (size + numberToAdd > getVArraySize())
+    {
+      grow(numberToAdd);
+    }
+  }
+
+  protected long getVArraySize()
+  {
+    return getVArray().size();
+  }
+
+  protected void update()
+  {
+    getVArray().update();
+  }
+
+  protected VArray_Object getVArray()
+  {
+    if (vArray == null)
+    {
+      vArray = classObject.nget_varray(arrayName);
+    }
+    return vArray;
+  }
+
+  public void add(int index, T newValue)
+  {
+    prepareToInsert(1);
+    shiftRight(index);
+    basicSet(index, newValue);
+  }
+
+  public void addAll(int index, Object[] newValue)
+  {
+    prepareToInsert(newValue.length);
+    shiftRight(index, newValue.length);
+
+    for (int i = 0; i < newValue.length; i++)
+    {
+      @SuppressWarnings("unchecked")
+      T value = (T)newValue[i];
+      basicSet(index + i, value);
+    }
+  }
+
+  public void remove(int index)
+  {
+    shiftLeft(index);
+  }
+
+  public void add(T newValue)
+  {
+    long size = cachedSize();
+
+    prepareToInsert(1);
+    setValue(size, newValue);
+    cacheSize++;
+    saveSize();
+  }
+
+  public void set(long index, T newValue)
+  {
+    basicSet(index, newValue);
+    // cacheSize = -1;
+  }
+
+  public void move(long newPosition, long oldPosition)
+  {
+    if (oldPosition == newPosition)
+    {
+      return;
+    }
+
+    // get the object at oldPosition.
+    T value = getValue(oldPosition);
+    // remove the oldPosition.
+    remove((int)oldPosition);
+    // make a space at the newPosition by shifting elements
+    shiftRight((int)newPosition);
+    set(newPosition, value);
+  }
+
+  protected void basicSet(long index, T newValue)
+  {
+    if (index >= cachedSize())
+    {
+      throw new ArrayIndexOutOfBoundsException();
+    }
+
+    update();
+
+    setValue(index, newValue);
+  }
+
+  public T get(long index)
+  {
+    if (index >= size())
+    {
+      throw new ArrayIndexOutOfBoundsException();
+    }
+
+    return getValue(index);
+  }
+
+  protected abstract void setValue(long index, T newValue);
+
+  protected abstract T getValue(long index);
+
+  protected void saveSize()
+  {
+    // System.out.println(">>> classObject: " + classObject.objectID().getStoreString() + " <<<");
+    // System.out.println("ooArrayList.saveSize() - value to store in objy is: " + cacheSize);
+    classObject.nset_numeric(sizeName, new Numeric_Value(cacheSize));
+    resetCachedSize();
+  }
+
+  protected void resetCachedSize()
+  {
+    cacheSize = -1;
+  }
+
+  protected long cachedSize()
+  {
+    if (cacheSize == -1)
+    {
+      cacheSize = classObject.nget_numeric(sizeName).longValue();
+      // System.out.println(">>> classObject: " + classObject.objectID().getStoreString() + " <<<");
+      // System.out.println("ooArrayList.privateSize() - cacheSize was -1, value from objy is: " + cacheSize);
+    }
+    return cacheSize;
+  }
+
+  public long size()
+  {
+    // System.out.println(">>> classObject: " + classObject.objectID().getStoreString() + " <<<");
+    // Numeric_Value nValue = classObject.nget_numeric(sizeName);
+    // System.out.println("ooArrayList.size() - nValue: " + nValue.toString());
+    // return classObject.nget_numeric(sizeName).longValue();
+    return cachedSize();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.java
new file mode 100644
index 0000000..523a3bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListId.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+
+import com.objy.as.app.Class_Object;
+import com.objy.db.app.Session;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeListX;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Simon McDuff
+ * @author ibrahim 100920 - IS: modified to use ooTreeListX instead of ObjyArrayList<ooId>. minimize the changes for the
+ *         3.0.x build. 100927 - IS: changed to wrap ooTreeListX to avoid using extra class/Class_Object creation
+ */
+public class ObjyArrayListId
+{
+
+  static public String className = "ooTreeListX";
+
+  private ooTreeListX list = null;
+
+  // private int size = 0;
+
+  public static void buildSchema()
+  {
+    return;
+    // d_Module top_mod = ObjySchema.getTopModule();
+    // if (top_mod.resolve_class(ObjyArrayListId.className) == null
+    // && top_mod.resolve_proposed_class(ObjyArrayListId.className) == null)
+    // {
+    //
+    // if (TRACER_DEBUG.isEnabled())
+    // {
+    // TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
+    // }
+    //
+    // boolean inProcess = top_mod.proposed_classes().hasNext();
+    //
+    // // Proposed_Class A = new Proposed_Class(ooArrayListId.ClassName);
+    // Proposed_Class A = top_mod.propose_new_class(ObjyArrayListId.className);
+    //
+    // A.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj" /* "ooObj" */);
+    //
+    // A.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+    // ObjyArrayList.sizeName, // Attribute name
+    // 1, // # elements in fixed-size array
+    // ooBaseType.ooINT32 // Type of numeric data
+    // ); // Default value
+    //
+    // A.add_ref_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+    // ObjyArrayList.arrayName, // Attribute name
+    // 1, // # elements in fixed-size array
+    // "ooTreeListX", false);
+    //
+    // // top_mod.propose_new_class(A);
+    // if (!inProcess)
+    // {
+    // top_mod.activate_proposals(true, true);
+    // }
+    //
+    // if (TRACER_DEBUG.isEnabled())
+    // {
+    // TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added");
+    // }
+    // }
+
+  }
+
+  public static void initObject(Class_Object classObject)
+  {
+    return;
+    // // set the size to 0;
+    // classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(0));
+    // // create the ooTreeListX.
+    // ooTreeListX list = new ooTreeListX();
+    // ooObj anObj = ooObj.create_ooObj(classObject.objectID());
+    // anObj.cluster(list);
+    // // System.out.println("initObject: " + anObj.getOid().getStoreString() + " treeListX: "
+    // // + list.getOid().getStoreString());
+    // classObject.nset_ooId(ObjyArrayList.arrayName, list.getOid());
+  }
+
+  public ObjyArrayListId(Class_Object classObject)
+  {
+    // get the ooTreeList object.
+    ooId listId = classObject.objectID();
+    list = (ooTreeListX)Session.getCurrent().getFD().objectFrom(listId);
+  }
+
+  protected void setValue(long index, ooObj newValue)
+  {
+    list.set((int)index, newValue);
+  }
+
+  protected ooObj getValue(long index)
+  {
+    return (ooObj)list.get((int)index);
+  }
+
+  protected ooId getOidValue(long index)
+  {
+    // System.out.println(" - ooArrayListId.getValue() at index: " + index +
+    // " for classObject: " + classObject.objectID().getStoreString() );
+    return getValue(index).getOid();
+  }
+
+  public ooId get(long index)
+  {
+    if (index >= size())
+    {
+      throw new ArrayIndexOutOfBoundsException();
+    }
+
+    return getOidValue(index);
+  }
+
+  public void set(long index, ooId newValue)
+  {
+    setValue(index, ooObj.create_ooObj(newValue));
+    setSize();
+  }
+
+  public ooId[] getAll(int index, int chunkSize)
+  {
+    long size = size();
+
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+    if (size == 0)
+    {
+      return null;
+    }
+
+    ooId[] ooIds = new ooId[(int)size];
+    for (int i = 0; i < size; i++)
+    {
+      ooIds[i] = getOidValue(i + index);
+    }
+    return ooIds;
+  }
+
+  public void add(ooId newValue)
+  {
+    list.add(ooObj.create_ooObj(newValue));
+    // size++;
+  }
+
+  public void add(int index, ooId newValue)
+  {
+    try
+    {
+      list.add(index, ooObj.create_ooObj(newValue));
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    // size++;
+  }
+
+  public void addAll(int index, Object[] newValue)
+  {
+    List<Object> objList = new ArrayList<Object>();
+    for (int i = 0; i < newValue.length; i++)
+    {
+      objList.add(ooObj.create_ooObj((ooId)newValue[i]));
+    }
+
+    list.addAll(index, objList);
+    // setSize();
+  }
+
+  public void move(long newPosition, long oldPosition)
+  {
+    if (oldPosition == newPosition)
+    {
+      return;
+    }
+
+    // get the object at oldPosition.
+    ooObj value = getValue(oldPosition);
+
+    // remove the oldPosition.
+    remove((int)oldPosition);
+    list.add((int)newPosition, value);
+  }
+
+  public void remove(int index)
+  {
+    list.remove(index);
+    // setSize();
+  }
+
+  public void clear()
+  {
+    list.clear();
+    // size = 0;
+    // setSize();
+  }
+
+  protected void setSize()
+  {
+    // System.out.println(">>> classObject: " + classObject.objectID().getStoreString() + " <<<");
+    // System.out.println("ooArrayList.saveSize() - value to store in objy is: " + cacheSize);
+    // classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(size));
+  }
+
+  public long size()
+  {
+    // size = (int)classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
+    int size = list.size();
+    return size;
+  }
+
+  public ooObj copy(ooObj nearObj)
+  {
+
+    ooTreeListX newList = new ooTreeListX(2/* (int)size() */, false);
+    // ObjyObjectManager.newInternalObjCount++;
+
+    nearObj.cluster(newList);
+    if (size() > 0)
+    {
+      newList.addAll(list);
+    }
+
+    // Class_Object newClassObject = new Class_Object(newObj);
+    // newClassObject.nset_ooId(ObjyArrayList.arrayName, newList.getOid());
+
+    return newList;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.java
new file mode 100644
index 0000000..90ffe76
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListLong.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+
+/**
+ * @author Simon McDuff
+ */
+public class ObjyArrayListLong extends ObjyArrayList<Long>
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyArrayListLong.class);
+
+  static public String ArrayName = "ObjyArrayListLong";
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(ObjyArrayListLong.ArrayName) == null)
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      // Proposed_Class A = new Proposed_Class(ooArrayListLong.ArrayName);
+      Proposed_Class A = top_mod.propose_new_class(ObjyArrayListLong.ArrayName);
+
+      A.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      A.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.sizeName, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+
+      A.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.arrayName, // Attribute name
+          1, ooBaseType.ooINT64);
+
+      // top_mod.propose_new_class(A);
+
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added");
+      }
+    }
+  }
+
+  public ObjyArrayListLong(Class_Object classObject)
+  {
+    super(classObject);
+  }
+
+  @Override
+  protected void setValue(long index, Long newValue)
+  {
+    getVArray().set_numeric(index, new Numeric_Value(newValue.longValue()));
+  }
+
+  @Override
+  protected Long getValue(long index)
+  {
+    return getVArray().get_numeric(index).longValue();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java
new file mode 100644
index 0000000..126bc49
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2010-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyClass;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.VArray_Object;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+/**
+ * @author Simon McDuff
+ */
+/***
+ * This class we use VArray of fixed array of Strings, otherwise we have to create strigns as objects, which is
+ * expensive.
+ */
+public class ObjyArrayListString
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyArrayListString.class);
+
+  public static String ClassName = "ObjyArrayListString";
+
+  // embedded class parts.
+  private static String embeddedClassName = "oo_StringElement";
+
+  private static String embeddedAttributeName = "value";
+
+  private static String embeddedAttributeNull = "isNull";
+
+  // fixed array class parts.
+  private static String FixedArrayClassName = "ObjyFixedStringArray";
+
+  private static String FixedElementsName = "elements";
+
+  private static final long FixedElementsSize = 10;
+
+  protected Class_Object classObject;
+
+  private VArray_Object vArray;
+
+  transient long cacheSize = -1;
+
+  transient long position;
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+
+    if (top_mod.resolve_class(ObjyArrayListString.ClassName) == null)
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooArrayListString. Adding ooArrayListString");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      // using embedded class (string, isNull)
+      // Proposed_Class embeddedClass = new Proposed_Class(embeddedClassName);
+      Proposed_Class embeddedClass = top_mod.propose_new_class(embeddedClassName);
+
+      embeddedClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          embeddedAttributeName, // Attribute name
+          1, // # elements in fixed-size array
+          "ooUtf8String" // Type of numeric data
+      ); // Default value
+
+      embeddedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          embeddedAttributeNull, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooBOOLEAN // Type of numeric data
+      ); // Default value
+
+      // top_mod.propose_new_class(embeddedClass);
+
+      // first the child class.
+      // Proposed_Class fixedArrayClass = new Proposed_Class(ooArrayListString.FixedArrayClassName);
+      Proposed_Class fixedArrayClass = top_mod.propose_new_class(ObjyArrayListString.FixedArrayClassName);
+
+      fixedArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      fixedArrayClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayListString.FixedElementsName, // Attribute name
+          ObjyArrayListString.FixedElementsSize, // # elements in fixed-size array
+          embeddedClassName // Type of numeric data
+      ); // Default value
+
+      // top_mod.propose_new_class(fixedArrayClass);
+
+      // Proposed_Class StringArrayClass = new Proposed_Class(ooArrayListString.ClassName);
+      Proposed_Class StringArrayClass = top_mod.propose_new_class(ObjyArrayListString.ClassName);
+
+      StringArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      StringArrayClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.sizeName, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+
+      StringArrayClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.arrayName, // Attribute name
+          1, false, ObjyArrayListString.FixedArrayClassName);
+
+      // top_mod.propose_new_class(StringArrayClass);
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooArrayListString added");
+      }
+    }
+  }
+
+  public static void initObject(Class_Object classObject)
+  {
+    // set the size to 0;
+    classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(0));
+  }
+
+  public ObjyArrayListString(Class_Object classObject)
+  {
+    this.classObject = classObject;
+  }
+
+  // TODO - there is no check if the index is out of bound.
+  protected void setValue(long index, String newValue)
+  {
+    // find the chunk.
+    long chunkItem = index / FixedElementsSize;
+    long chunkIndex = index % FixedElementsSize;
+    Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
+    // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
+    Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex);
+    // TODO - I don't like using magic numbers!!! we are using "1" to index into the embedded object.
+    embeddedElement.set_numeric(1, newValue == null ? ITypeMapper.numericTrue : ITypeMapper.numericFalse);
+    // String_Value value = embeddedElement.get_string(0); // TODO - I don't like using magic numbers!!!
+    String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+    value.update();
+    if (newValue == null)
+    {
+      newValue = "";
+    }
+    value.set(newValue);
+  }
+
+  protected String getValue(long index)
+  {
+    // find the chunk.
+    long chunkItem = index / FixedElementsSize;
+    long chunkIndex = index % FixedElementsSize;
+    Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
+    // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
+    Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex); // TODO - I don't like
+    // using magic numbers!!!
+    String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+    Numeric_Value isNull = embeddedElement.get_numeric(1);
+    return isNull == ITypeMapper.numericTrue ? null : value.toString();
+  }
+
+  public String[] getAll(int index, int chunkSize)
+  {
+    int size = (int)cachedSize();
+
+    if (chunkSize != CDORevision.UNCHUNKED)
+    {
+      size = Math.min(size, chunkSize);
+    }
+
+    String[] strings = new String[size];
+    Class_Object currentChunkObject = null;
+    long currentChunkItem = -1;
+
+    for (int i = 0; i < size; i++)
+    {
+      // find the chunk.
+      long chunkItem = (i + index) / FixedElementsSize;
+      long chunkIndex = (i + index) % FixedElementsSize;
+      if (currentChunkItem != chunkItem)
+      {
+        currentChunkItem = chunkItem;
+        currentChunkObject = getVArray().get_class_obj(currentChunkItem);
+      }
+      Class_Object embeddedElement = currentChunkObject.nget_class_obj(FixedElementsName, chunkIndex);
+      String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+      Numeric_Value isNull = embeddedElement.get_numeric(1);
+      if (isNull == ITypeMapper.numericTrue)
+      {
+        strings[i] = null;
+      }
+      else
+      {
+        strings[i] = value.toString();
+      }
+    }
+    return strings;
+  }
+
+  public void clear()
+  {
+    // remove all the fixed array objects...
+    for (int i = 0; i < getVArray().size(); i++)
+    {
+      ooId oid = getVArray().get_ooId(i);
+      ooObj.create_ooObj(oid).delete();
+    }
+    getVArray().resize(0);
+    cacheSize = 0;
+    saveSize();
+  }
+
+  private void shiftRight(int index)
+  {
+    shiftRight(index, 1);
+  }
+
+  private void shiftRight(int index, int sizeToShift)
+  {
+    long size = cachedSize();
+
+    for (long i = size - 1; i >= index; i--)
+    {
+      setValue(i + sizeToShift, getValue(i));
+    }
+
+    cacheSize += sizeToShift;
+  }
+
+  private void shiftLeft(int index)
+  {
+    long size = cachedSize();
+    for (long i = index; i < size - 1; i++)
+    {
+      setValue(i, getValue(i + 1));
+    }
+
+    cacheSize--;
+
+    saveSize();
+  }
+
+  /**
+   *
+   */
+  private void grow(int numToAdd)
+  {
+    long arraySize = cachedSize();
+    long numChunks = (numToAdd + (int)arraySize) / FixedElementsSize + 1;
+    long newChunks = numChunks - arraySize;
+    if (newChunks > 0)
+    {
+      getVArray().resize(numChunks);
+      // TODO - this could be cached somewhere...
+      ObjyClass chunkClass = ObjySchema.getObjyClass(FixedArrayClassName);
+      for (int i = 0; i < newChunks; i++)
+      {
+        // create a new chunk.
+        Class_Object newChunk = Class_Object.new_persistent_object(chunkClass.getASClass(), classObject.objectID(), false);
+        getVArray().set_ooId(arraySize + i, newChunk.objectID());
+      }
+      cacheSize = -1;
+    }
+  }
+
+  /**
+   *
+   */
+  private void prepareToInsert(int numberToAdd)
+  {
+    long size = cachedSize();
+    getVArray().update();
+
+    if (size + numberToAdd > getVArray().size())
+    {
+      grow(numberToAdd);
+    }
+  }
+
+  protected VArray_Object getVArray()
+  {
+    if (vArray == null)
+    {
+      vArray = classObject.nget_varray(ObjyArrayList.arrayName);
+    }
+    return vArray;
+  }
+
+  public void add(int index, String newValue)
+  {
+    prepareToInsert(1);
+
+    shiftRight(index);
+
+    basicSet(index, newValue);
+
+    saveSize();
+  }
+
+  public void addAll(int index, Object[] newValue)
+  {
+    prepareToInsert(newValue.length);
+    shiftRight(index, newValue.length);
+
+    for (int i = 0; i < newValue.length; i++)
+    {
+      basicSet(index + i, (String)newValue[i]);
+    }
+
+    saveSize();
+  }
+
+  public void remove(int index)
+  {
+    shiftLeft(index);
+  }
+
+  public void add(String newValue)
+  {
+    long size = cachedSize();
+
+    prepareToInsert(1);
+
+    setValue(size, newValue);
+
+    cacheSize++;
+
+    saveSize();
+  }
+
+  public void set(long index, String newValue)
+  {
+    basicSet(index, newValue);
+    cacheSize = -1;
+  }
+
+  protected void basicSet(long index, String newValue)
+  {
+    if (index >= cachedSize())
+    {
+      throw new ArrayIndexOutOfBoundsException();
+    }
+
+    getVArray().update();
+
+    setValue(index, newValue);
+  }
+
+  public String get(long index)
+  {
+    if (index >= size())
+    {
+      throw new ArrayIndexOutOfBoundsException();
+    }
+
+    return getValue(index);
+  }
+
+  private void saveSize()
+  {
+    classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(cacheSize));
+    cacheSize = -1;
+  }
+
+  public long cachedSize()
+  {
+    if (cacheSize == -1)
+    {
+      cacheSize = classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
+    }
+    return cacheSize;
+  }
+
+  public long size()
+  {
+    return classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.java
new file mode 100644
index 0000000..6c86efc
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBase.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.Rel_Copy;
+import com.objy.as.app.Rel_Propagation;
+import com.objy.as.app.Rel_Versioning;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+
+/**
+ * EMF Classes in Objectivity are enhanced with this base class. This class is use for the revision data as a base for
+ * other classes created.
+ *
+ * @author ibrahim
+ */
+public class ObjyBase
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyBase.class);
+
+  public static final String CLASS_NAME = "ObjyBase";
+
+  public static final String ATT_CONTAINERID = "oo_containerId";
+
+  public static final String ATT_CONTAINER_FEATUERID = "oo_containerFeatureId";
+
+  public static final String ATT_RESOURCEID = "oo_resourceId";
+
+  public static final String ATT_VERSION = "oo_version";
+
+  public static final String ATT_REVISED_TIME = "oo_revisedTime";
+
+  public static final String ATT_CREATION_TIME = "oo_creationTime";
+
+  public static final String ATT_REVISIONS = "oo_revisions";
+
+  public static final String ATT_BRANCHID = "oo_branchId";
+
+  public static final String ATT_BASE = "oo_base";
+
+  public static final String ATT_LAST_REVISION = "oo_lastRevision";
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(ObjyBase.CLASS_NAME) == null && top_mod.resolve_proposed_class(ObjyBase.CLASS_NAME) == null)
+    {
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooBase. Adding it.");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      Proposed_Class propClass = top_mod.propose_new_class(ObjyBase.CLASS_NAME);
+
+      propClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      propClass.add_bidirectional_relationship(d_Module.LAST, d_Access_Kind.d_PUBLIC, ObjyBase.ATT_REVISIONS, ObjyBase.CLASS_NAME, false, false, true,
+          Rel_Copy.DELETE, Rel_Versioning.COPY, Rel_Propagation.LOCK_YES_DELETE_YES, ObjyBase.ATT_BASE, false);
+
+      // propClass.add_bidirectional_relationship(position, visibility,
+      // name, destinationClassName, isInline, isShort, isToMany,
+      // copyMode, versioning, propagation, inverseName, inverseIsToMany)
+
+      propClass.add_bidirectional_relationship(d_Module.LAST, d_Access_Kind.d_PUBLIC, ObjyBase.ATT_BASE, ObjyBase.CLASS_NAME, false, false, false,
+          Rel_Copy.DELETE, Rel_Versioning.COPY, Rel_Propagation.LOCK_YES_DELETE_YES, ObjyBase.ATT_REVISIONS, true);
+
+      propClass.add_unidirectional_relationship(d_Module.LAST, d_Access_Kind.d_PUBLIC, ObjyBase.ATT_LAST_REVISION, ObjyBase.CLASS_NAME, true, false, false,
+          Rel_Copy.DELETE, Rel_Versioning.COPY, Rel_Propagation.LOCK_YES_DELETE_YES);
+
+      propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_CONTAINER_FEATUERID, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+
+      propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_CONTAINERID, // Attribute name
+          1, // # elements in fixed-size array
+          "ooObj", false); // Default value // Default value
+
+      propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_RESOURCEID, // Attribute name
+          1, // # elements in fixed-size array
+          "ooObj", false); // Default value // Default value
+
+      propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_VERSION, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+
+      propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_BRANCHID, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+
+      propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_CREATION_TIME, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT64 // Type of numeric data
+      ); // Default value
+
+      propClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyBase.ATT_REVISED_TIME, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT64 // Type of numeric data
+      ); // Default value
+
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooBaseClass added");
+      }
+    }
+
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.java
new file mode 100644
index 0000000..4ea9c5c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranch.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
+
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeSetX;
+
+import java.util.SortedSet;
+
+/**
+ * @author Ibrahim Sallam
+ */
+
+/**
+ * @author Ibrahim Sallam
+ */
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyBranch extends ooObj
+{
+  protected int branchId;
+
+  protected int baseBranchId;
+
+  protected long baseBranchTimeStamp;
+
+  protected String branchName;
+
+  protected ooTreeSetX revisions;
+
+  public static ObjyBranch create(ooObj clusterObj, int branchId, int baseBranchId, String branchName, long timeStamp)
+  {
+    ObjyBranch objyBranch = new ObjyBranch(branchId, baseBranchId, branchName, timeStamp);
+    clusterObj.cluster(objyBranch);
+    objyBranch.createRevisionsSet();
+    return objyBranch;
+  }
+
+  public static ObjyBranch create(ooObj clusterObj, int branchId, BranchInfo branchInfo)
+  {
+    ObjyBranch objyBranch = new ObjyBranch(branchId, branchInfo);
+    clusterObj.cluster(objyBranch);
+    objyBranch.createRevisionsSet();
+    return objyBranch;
+  }
+
+  private ObjyBranch(int id, BranchInfo branchInfo)
+  {
+    branchId = id;
+    baseBranchId = branchInfo.getBaseBranchID();
+    baseBranchTimeStamp = branchInfo.getBaseTimeStamp();
+    branchName = branchInfo.getName();
+    revisions = null;
+  }
+
+  private ObjyBranch(int branchId, int baseBranchId, String branchName, long timeStamp)
+  {
+    this.branchId = branchId;
+    this.baseBranchId = baseBranchId;
+    baseBranchTimeStamp = timeStamp;
+    this.branchName = branchName;
+    revisions = null;
+  }
+
+  public int getBranchId()
+  {
+    fetch();
+    return branchId;
+  }
+
+  public int getBaseBranchId()
+  {
+    fetch();
+    return baseBranchId;
+  }
+
+  public long getBaseBranchTimeStamp()
+  {
+    fetch();
+    return baseBranchTimeStamp;
+  }
+
+  public String getBranchName()
+  {
+    fetch();
+    return branchName;
+  }
+
+  public void addRevision(ooObj anObj)
+  {
+    markModified();
+    if (revisions == null) // we'll only allocate if needed.
+    {
+      revisions = new ooTreeSetX();
+      this.cluster(revisions);
+    }
+    revisions.add(anObj);
+  }
+
+  public int numberOfRevisions()
+  {
+    fetch();
+    return revisions.size();
+  }
+
+  public SortedSet<?> getRevisions()
+  {
+    fetch();
+    // // we don't want to allocate the ooTreeSetX object if the branch is empty.
+    // if (revisions == null)
+    // {
+    // return new ArrayList<Object>().iterator();
+    // }
+
+    return revisions;
+  }
+
+  public BranchInfo getBranchInfo()
+  {
+    fetch();
+    BranchInfo branchInfo = new BranchInfo(getBranchName(), getBaseBranchId(), getBaseBranchTimeStamp());
+    return branchInfo;
+  }
+
+  public boolean deleteRevision(Object anObject)
+  {
+    markModified();
+    return revisions.remove(anObject);
+  }
+
+  private void createRevisionsSet()
+  {
+    if (revisions == null) // we'll only allocate if needed.
+    {
+      revisions = new ooTreeSetX();
+      this.cluster(revisions);
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.java
new file mode 100644
index 0000000..789bcc4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyBranchManager.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2010-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
+
+import org.eclipse.net4j.util.collection.Pair;
+
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeSetX;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyBranchManager extends ooObj
+{
+  protected int nextBranchId;
+
+  protected int nextLocalBranchId;
+
+  protected ooTreeSetX branchSet;
+
+  private ObjyBranchManager()
+  {
+    nextBranchId = 0;
+    nextLocalBranchId = 0;
+  }
+
+  protected void createTreeSet(ooObj clusterObject)
+  {
+    branchSet = new ooTreeSetX();
+    clusterObject.cluster(branchSet);
+  }
+
+  public int getLastBranchId()
+  {
+    fetch();
+    return nextBranchId;
+  }
+
+  public int nextBranchId()
+  {
+    markModified();
+    return ++nextBranchId;
+  }
+
+  public int getlastLocalBranchId()
+  {
+    fetch();
+    return nextLocalBranchId;
+  }
+
+  public int nextLocalBranchId()
+  {
+    markModified();
+    return --nextLocalBranchId;
+  }
+
+  public Pair<Integer, Long> createBranch(int branchId, BranchInfo branchInfo)
+  {
+    markModified();
+
+    if (branchId == BranchLoader.NEW_BRANCH)
+    {
+      branchId = nextBranchId();
+    }
+    else if (branchId == BranchLoader.NEW_LOCAL_BRANCH)
+    {
+      branchId = nextLocalBranchId();
+    }
+
+    ObjyBranch newObjyBranch = ObjyBranch.create(this, branchId, branchInfo);
+    // if the baseBranchId is 0, then we just added to our branchSet, otherwise
+    // we'll lookup the ObjyBranch with the id, and add the newly created
+    // ObjyBranch to it's sub-branches set.
+    // int baseBranchId = branchInfo.getBaseBranchID();
+
+    // Initially I thought we could make a tree of branches, but for the
+    // first implementation we can just create a TreeSet of all branches,
+    // then resolve sub-branches dynamically by checking baseBranchId.
+    branchSet.add(newObjyBranch); // implicit clustering.
+
+    // if (baseBranchId == 0) // main branch.
+    // {
+    // branchSet.add(newObjyBranch); // implicit clustering.
+    // }
+    // else
+    // {
+    // Iterator<ObjyBranch> treeItr = branchSet.iterator();
+    // ObjyBranch objyBranch = null;
+    // boolean found = false;
+    // while (treeItr.hasNext() && !found)
+    // {
+    // objyBranch = treeItr.next();
+    // if (baseBranchId == objyBranch.getBaseBranchId())
+    // {
+    // found = true;
+    // continue;
+    // }
+    // objyBranch = null;
+    // }
+    //
+    // objyBranch.addSubBranch(newObjyBranch);
+    // }
+
+    return Pair.create(branchId, branchInfo.getBaseTimeStamp());
+  }
+
+  public ObjyBranch getBranch(int branchId)
+  {
+    fetch();
+
+    @SuppressWarnings("unchecked")
+    Iterator<ObjyBranch> treeItr = branchSet.iterator();
+    ObjyBranch objyBranch = null;
+    while (treeItr.hasNext())
+    {
+      ObjyBranch tempObjyBranch = treeItr.next();
+      if (branchId == tempObjyBranch.getBranchId())
+      {
+        objyBranch = tempObjyBranch;
+        break;
+      }
+    }
+
+    return objyBranch;
+  }
+
+  public static ObjyBranchManager create(ooId scopeContOid)
+  {
+    ObjyBranchManager branchManager = new ObjyBranchManager();
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(branchManager);
+
+    branchManager.createTreeSet(branchManager);
+    branchManager.createMainBranch();
+
+    return branchManager;
+  }
+
+  public void createMainBranch()
+  {
+    ObjyBranch newObjyBranch = ObjyBranch.create(this, CDOBranch.MAIN_BRANCH_ID, CDOBranch.MAIN_BRANCH_ID, CDOBranch.MAIN_BRANCH_NAME, 0);
+    branchSet.add(newObjyBranch); // implicit clustering.
+  }
+
+  public boolean deleteBranch(int branchId)
+  {
+    boolean done = false;
+
+    markModified();
+
+    @SuppressWarnings("unchecked")
+    Iterator<ObjyBranch> treeItr = branchSet.iterator();
+    ObjyBranch objyBranch = null;
+    while (treeItr.hasNext())
+    {
+      objyBranch = treeItr.next();
+      if (branchId == objyBranch.getBranchId())
+      {
+        done = branchSet.remove(objyBranch);
+        break;
+      }
+    }
+
+    return done;
+  }
+
+  public List<ObjyBranch> getSubBranches(int baseBranchId)
+  {
+    fetch();
+    List<ObjyBranch> objyBranchList = new ArrayList<ObjyBranch>();
+
+    Iterator<?> treeItr = branchSet.iterator();
+    ObjyBranch objyBranch = null;
+    while (treeItr.hasNext())
+    {
+      objyBranch = (ObjyBranch)treeItr.next();
+      if (objyBranch.getBranchId() == objyBranch.getBaseBranchId())
+      {
+        continue;
+      }
+      if (objyBranch.getBaseBranchId() == baseBranchId)
+      {
+        objyBranchList.add(objyBranch);
+      }
+    }
+    return objyBranchList;
+  }
+
+  public List<ObjyBranch> getBranches(int startId, int endId)
+  {
+    fetch();
+    List<ObjyBranch> objyBranchList = new ArrayList<ObjyBranch>();
+
+    int lastId = endId != 0 ? endId : Integer.MAX_VALUE;
+
+    @SuppressWarnings("unchecked")
+    Iterator<ObjyBranch> treeItr = branchSet.iterator();
+    ObjyBranch objyBranch = null;
+    while (treeItr.hasNext())
+    {
+      objyBranch = treeItr.next();
+      int id = objyBranch.getBranchId();
+      if (id >= startId && id <= lastId)
+      {
+        objyBranchList.add(objyBranch);
+      }
+    }
+    return objyBranchList;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.java
new file mode 100644
index 0000000..9d4835f
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyCommitInfo.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.db.app.ooObj;
+
+public class ObjyCommitInfo extends ooObj
+{
+  protected int branchId;
+
+  protected long timeStamp;
+
+  protected long previousTimeStamp;
+
+  protected String userId;
+
+  protected String comment;
+
+  /***
+   * OoCommitInfo will be a readonly object.
+   */
+  public ObjyCommitInfo(int branchId, long timeStamp, long previousTimeStamp, String userId, String comment)
+  {
+    this.branchId = branchId;
+    this.timeStamp = timeStamp;
+    this.previousTimeStamp = previousTimeStamp;
+    this.userId = userId;
+    this.comment = comment;
+  }
+
+  public int getBranchId()
+  {
+    fetch();
+    return branchId;
+  }
+
+  public long getTimeStamp()
+  {
+    fetch();
+    return timeStamp;
+  }
+
+  public long getPreviousTimeStamp()
+  {
+    fetch();
+    return previousTimeStamp;
+  }
+
+  public String getUserId()
+  {
+    fetch();
+    return userId;
+  }
+
+  public String getComment()
+  {
+    fetch();
+    return comment;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.java
new file mode 100644
index 0000000..da36680
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapArrayList.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+
+/**
+ * @author Simon McDuff
+ */
+public class ObjyFeatureMapArrayList extends ObjyArrayList<ObjyFeatureMapEntry>
+{
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyFeatureMapArrayList.class);
+
+  static public String ClassName = "ObjyFeatureMapArrayList";
+
+  // public class FeatureMapEntry
+  // {
+  // private org.eclipse.emf.cdo.server.internal.objectivity.schema.FeatureMapEntry data = new
+  // org.eclipse.emf.cdo.server.internal.objectivity.schema.FeatureMapEntry();
+  //
+  // public FeatureMapEntry(String featureName, ooId object)
+  // {
+  // super();
+  // this.data.featureName = featureName;
+  // this.data.object = object;
+  // }
+  //
+  // public String getFeatureName()
+  // {
+  // return data.featureName;
+  // }
+  //
+  // public ooId getObject()
+  // {
+  // return data.object;
+  // }
+  // };
+
+  public static void buildSchema()
+  {
+    // Connection.current().registerClass(MapEntryClassName);
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(ObjyFeatureMapArrayList.ClassName) == null && top_mod.resolve_proposed_class(ObjyFeatureMapArrayList.ClassName) == null)
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      ObjyFeatureMapEntry.buildSchema();
+
+      // Proposed_Class A = new Proposed_Class(ooFeatureMapArrayList.ClassName);
+      Proposed_Class A = top_mod.propose_new_class(ObjyFeatureMapArrayList.ClassName);
+
+      A.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      A.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.sizeName, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32 // Type of numeric data
+      ); // Default value
+      A.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyArrayList.arrayName, // Attribute name
+          1, false, ObjyFeatureMapEntry.MapEntryClassName);
+
+      // top_mod.propose_new_class(A);
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added");
+      }
+    }
+  }
+
+  public ObjyFeatureMapArrayList(Class_Object classObject)
+  {
+    super(classObject);
+  }
+
+  @Override
+  protected void setValue(long index, ObjyFeatureMapEntry featureMapEntry)
+  {
+
+    getVArray().set_ooId(index, featureMapEntry.getOid());
+
+    // String_Value value2 = classObject.nget_string("uri");
+    // System.out.println(value2);
+  }
+
+  @Override
+  protected ObjyFeatureMapEntry getValue(long index)
+  {
+    Class_Object classObject = getVArray().get_class_obj(index);
+
+    return new ObjyFeatureMapEntry(classObject);
+
+    /***
+     * FeatureMapEntry featureMapEntry = (FeatureMapEntry) ooObj.create_ooObj(getVArray().get_ooId(index)); return
+     * featureMapEntry;
+     ***/
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java
new file mode 100644
index 0000000..35695ff
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyFeatureMapEntry.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+import com.objy.db.app.ooId;
+
+public class ObjyFeatureMapEntry
+{
+  protected int tagId;
+
+  protected ooId object;
+
+  protected Class_Object classObject;
+
+  public static final String MapEntryClassName = "ObjyFeatureMapEntry";
+
+  public static final String EntryName = "tagId";
+
+  public static final String EntryObject = "object";
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(MapEntryClassName) == null && top_mod.resolve_proposed_class(MapEntryClassName) == null)
+    {
+      // Proposed_Class B = new Proposed_Class(MapEntryClassName);
+      Proposed_Class B = top_mod.propose_new_class(MapEntryClassName);
+      B.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      B.add_basic_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyFeatureMapEntry.EntryName, // Attribute name
+          1, // # elements in fixed-size array
+          ooBaseType.ooINT32); // type
+      B.add_ref_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyFeatureMapEntry.EntryObject, // Attribute name
+          1, // # elements in fixed-size array
+          "ooObj", // Type of numeric data
+          false); // Short reference
+
+      // top_mod.propose_new_class(B);
+    }
+  }
+
+  /****
+   * Factory.
+   *
+   * @param tagId
+   * @param oid
+   */
+  public ObjyFeatureMapEntry(int tagId, ooId oid, ooId near)
+  {
+    this.tagId = tagId;
+    object = oid;
+
+    classObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(MapEntryClassName).getASClass(), near, false);
+
+    classObject.nset_ooId(EntryObject, object);
+    classObject.nset_numeric(EntryName, new Numeric_Value(tagId));
+  }
+
+  public ObjyFeatureMapEntry(Class_Object classObject)
+  {
+    this.classObject = classObject;
+    tagId = classObject.nget_numeric(EntryName).intValue();
+    object = classObject.nget_ooId(EntryObject);
+  }
+
+  protected void fetchObject()
+  {
+    tagId = classObject.nget_numeric(EntryName).intValue();
+    object = classObject.nget_ooId(EntryObject);
+  }
+
+  public int getTagId()
+  {
+    fetchObject();
+    return tagId;
+  }
+
+  public void setTagId(int tagId)
+  {
+    classObject.nset_numeric(EntryName, new Numeric_Value(tagId));
+    this.tagId = tagId;
+  }
+
+  public ooId getObject()
+  {
+    fetchObject();
+    return object;
+  }
+
+  public void setObject(ooId object)
+  {
+    classObject.nset_ooId(EntryObject, object);
+    this.object = object;
+  }
+
+  public ooId getOid()
+  {
+    return classObject.objectID();
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.java
new file mode 100644
index 0000000..03e3730
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockArea.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2011-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockGrade;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil;
+
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeSetX;
+
+import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyLockArea extends ooObj
+{
+
+  public static final int DEFAULT_DURABLE_LOCKING_ID_BYTES = 32;
+
+  private String durableLockingID;
+
+  private String userID;
+
+  private ObjyBranch branchPoint;
+
+  private boolean readOnly;
+
+  private ooTreeSetX readLockSet;
+
+  private ooTreeSetX writeLockSet;
+
+  private ooTreeSetX readWriteLockSet;
+
+  protected ObjyLockArea(String durableLockingID, String userID, ObjyBranch branchPoint, boolean readOnly)
+  {
+    this.durableLockingID = durableLockingID;
+    this.userID = userID;
+    this.branchPoint = branchPoint;
+    this.readOnly = readOnly;
+  }
+
+  public static ObjyLockArea create(ooId scopeContOid, String durableLockingID, String userID, ObjyBranch branchPoint, boolean readOnly,
+      Map<CDOID, LockGrade> locks)
+  {
+    ObjyLockArea objyLockArea = new ObjyLockArea(durableLockingID, userID, branchPoint, readOnly);
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(objyLockArea);
+
+    objyLockArea.createLockSets(locks);
+
+    return objyLockArea;
+  }
+
+  protected void createLockSets(Map<CDOID, LockGrade> locks)
+  {
+    readLockSet = new ooTreeSetX();
+    this.cluster(readLockSet);
+    writeLockSet = new ooTreeSetX();
+    this.cluster(writeLockSet);
+    readWriteLockSet = new ooTreeSetX();
+    this.cluster(readWriteLockSet);
+
+    for (Entry<CDOID, LockGrade> entry : locks.entrySet())
+    {
+      CDOID id = entry.getKey();
+      LockGrade grade = entry.getValue();
+
+      switch (grade)
+      {
+      case READ_WRITE:
+        readWriteLockSet.add(id);
+        break;
+      case READ:
+        readLockSet.add(id);
+        break;
+      case WRITE:
+        writeLockSet.add(id);
+        break;
+      }
+    }
+
+  }
+
+  public String getDurableLockingID()
+  {
+    fetch();
+    return durableLockingID;
+  }
+
+  public String getUserID()
+  {
+    fetch();
+    return userID;
+  }
+
+  public ObjyBranch getBranch()
+  {
+    fetch();
+    return branchPoint;
+  }
+
+  public long getTimeStamp()
+  {
+    fetch();
+    return branchPoint.getBranchInfo().getBaseTimeStamp();
+  }
+
+  public boolean isReadOnly()
+  {
+    fetch();
+    return readOnly;
+  }
+
+  public Map<CDOID, LockGrade> getLocks()
+  {
+    fetch();
+
+    Map<CDOID, LockGrade> locks = CDOIDUtil.createMap();
+
+    @SuppressWarnings("rawtypes")
+    Iterator itr = readLockSet.iterator();
+    while (itr.hasNext())
+    {
+      locks.put(OBJYCDOIDUtil.getCDOID(((ooObj)itr.next()).getOid()), LockGrade.READ);
+    }
+
+    itr = writeLockSet.iterator();
+    while (itr.hasNext())
+    {
+      locks.put(OBJYCDOIDUtil.getCDOID(((ooObj)itr.next()).getOid()), LockGrade.WRITE);
+    }
+
+    itr = readWriteLockSet.iterator();
+    while (itr.hasNext())
+    {
+      locks.put(OBJYCDOIDUtil.getCDOID(((ooObj)itr.next()).getOid()), LockGrade.READ_WRITE);
+    }
+
+    return locks;
+  }
+
+  @Override
+  public String toString()
+  {
+    fetch();
+    return MessageFormat.format("ObjyLockArea[id={0}, user={1}, branchPoint={2}, readOnly={3}, readlocks={4}, writeLocks{5}, readWriteLocks{6}",
+        durableLockingID, userID, branchPoint, readOnly, readLockSet.size(), writeLockSet.size(), readWriteLockSet.size());
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.java
new file mode 100644
index 0000000..460e566
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyLockAreaManager.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2011, 2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.lock.CDOLockUtil;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea;
+import org.eclipse.emf.cdo.common.lock.IDurableLockingManager.LockArea.Handler;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+
+import com.objy.db.app.Iterator;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooMap;
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyLockAreaManager extends ooObj
+{
+
+  private ooMap lockAreasMap;
+
+  private ObjyLockAreaManager()
+  {
+  }
+
+  protected void createMap(ooObj clusterObject)
+  {
+    lockAreasMap = new ooMap();
+    clusterObject.cluster(lockAreasMap);
+  }
+
+  public static ObjyLockAreaManager create(ooId scopeContOid)
+  {
+    ObjyLockAreaManager manager = new ObjyLockAreaManager();
+    ooObj clusterObject = ooObj.create_ooObj(scopeContOid);
+    clusterObject.cluster(manager);
+
+    manager.createMap(manager);
+
+    return manager;
+  }
+
+  public void getLockAreas(InternalCDOBranchManager branchManager, String userIDPrefix, Handler handler)
+  {
+    fetch();
+    Iterator itr = lockAreasMap.elements();
+    while (itr.hasNext())
+    {
+      ObjyLockArea objyLockArea = (ObjyLockArea)itr.next();
+      String userID = objyLockArea.getUserID();
+      if (userID != null && userID.startsWith(userIDPrefix))
+      {
+        if (!handler.handleLockArea(makeLockArea(branchManager, objyLockArea)))
+        {
+          return;
+        }
+      }
+    }
+  }
+
+  private LockArea makeLockArea(InternalCDOBranchManager branchManager, ObjyLockArea objyLockArea)
+  {
+    ObjyBranch objyBranch = objyLockArea.getBranch();
+    CDOBranchPoint branchPoint = branchManager.getBranch(objyBranch.getBranchId()).getPoint(objyLockArea.getTimeStamp());
+    return CDOLockUtil.createLockArea(objyLockArea.getDurableLockingID(), objyLockArea.getUserID(), branchPoint, objyLockArea.isReadOnly(),
+        objyLockArea.getLocks());
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java
new file mode 100644
index 0000000..aa00aa8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageInfo.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.db.app.ManyToOne;
+import com.objy.db.app.Relationship;
+import com.objy.db.app.ToOneRelationship;
+import com.objy.db.app.ooObj;
+
+public class ObjyPackageInfo extends ooObj
+{
+
+  protected String packageURI;
+
+  protected String parentURI;
+
+  protected String unitID;
+
+  protected ToOneRelationship packageUnit;
+
+  private String name;
+
+  public static ManyToOne packageUnit_Relationship()
+  {
+    return new ManyToOne("packageUnit", // field name
+        "org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageUnit", // name of related class
+        "packageInfos", // inverse relationship field name
+        Relationship.COPY_DELETE, Relationship.VERSION_DELETE, false, false, Relationship.INLINE_NONE); // none-inline
+    // association
+  }
+
+  /**
+   * set parent packageUnit
+   */
+  public void setPackageUnit(ObjyPackageUnit objyPackageUnit)
+  {
+    markModified();
+    packageUnit.form(objyPackageUnit);
+  }
+
+  /**
+   * get related parent Node
+   */
+  public ObjyPackageUnit getPackageUnit()
+  {
+    fetch();
+    return (ObjyPackageUnit)packageUnit.get();
+  }
+
+  /**
+   * clear parent relationship
+   */
+  public void removePackageUnit()
+  {
+    markModified();
+    packageUnit.clear();
+  }
+
+  public String getPackageURI()
+  {
+    fetch();
+    return packageURI;
+  }
+
+  public void setPackageURI(String packageURI)
+  {
+    markModified();
+    this.packageURI = packageURI;
+  }
+
+  public String getParentURI()
+  {
+    fetch();
+    return parentURI;
+  }
+
+  public void setParentURI(String parentURI)
+  {
+    markModified();
+    this.parentURI = parentURI;
+  }
+
+  public String getUnitID()
+  {
+    fetch();
+    return unitID;
+  }
+
+  public void setUnitID(String unitID)
+  {
+    markModified();
+    this.unitID = unitID;
+  }
+
+  public void setPackageName(String name)
+  {
+    markModified();
+    this.name = name;
+  }
+
+  public String getPackageName()
+  {
+    fetch();
+    return name;
+  }
+
+  // package unique name is Hash of the URI.
+  public String getPackageUniqueName()
+  {
+    fetch();
+    String uriHash = new Integer(Math.abs(getPackageURI().hashCode())).toString();
+    return uriHash;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.java
new file mode 100644
index 0000000..537236c
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyPackageUnit.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.db.app.OneToMany;
+import com.objy.db.app.Relationship;
+import com.objy.db.app.ToManyRelationship;
+import com.objy.db.app.ooObj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ObjyPackageUnit extends ooObj
+{
+
+  protected String id;
+
+  protected int ordinal;
+
+  protected long timeStamp;
+
+  protected byte[] packageAsBytes;
+
+  private ToManyRelationship packageInfos;
+
+  public ObjyPackageUnit(int bufferSize)
+  {
+    packageAsBytes = new byte[bufferSize];
+  }
+
+  public static OneToMany packageInfos_Relationship()
+  {
+    return new OneToMany("packageInfos", // field name
+        "org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageInfo", // name of related class
+        "packageUnit", // inverse relationship field name
+        Relationship.COPY_DELETE, Relationship.VERSION_DELETE, false, false, Relationship.INLINE_NONE); // none-inline
+    // association
+  }
+
+  /**
+   * get all related children
+   *
+   * @return list of ObjyPackageInfo objects.
+   */
+  public List<ObjyPackageInfo> getPackageInfos()
+  {
+    List<ObjyPackageInfo> list = new ArrayList<ObjyPackageInfo>();
+    fetch();
+    com.objy.db.app.Iterator itr;
+    itr = packageInfos.scan();
+    while (itr.hasNext())
+    {
+      list.add((ObjyPackageInfo)itr.next());
+    }
+
+    return list;
+  }
+
+  /**
+   * add packageInfo
+   */
+  public void addPackageInfo(ObjyPackageInfo packageInfo)
+  {
+    markModified();
+    packageInfos.add(packageInfo);
+  }
+
+  /**
+   * clear all related packageInfo
+   */
+  public void clearChildren()
+  {
+    markModified();
+    packageInfos.clear();
+  }
+
+  /**
+   * removePackageInfo.
+   */
+  public void removePackageInfo(ObjyPackageInfo packageInfo)
+  {
+    markModified();
+    packageInfos.remove(packageInfo);
+  }
+
+  public String getId()
+  {
+    fetch();
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    markModified();
+    this.id = id;
+  }
+
+  public int getOrdinal()
+  {
+    fetch();
+    return ordinal;
+  }
+
+  public void setOrdinal(int ordinal)
+  {
+    markModified();
+    this.ordinal = ordinal;
+  }
+
+  public long getTimeStamp()
+  {
+    fetch();
+    return timeStamp;
+  }
+
+  public void setTimeStamp(long timeStamp)
+  {
+    markModified();
+    this.timeStamp = timeStamp;
+  }
+
+  public byte[] getPackageAsBytes()
+  {
+    fetch();
+    return packageAsBytes;
+  }
+
+  public void setPackageAsBytes(byte[] packageAsBytes)
+  {
+    markModified();
+    this.packageAsBytes = packageAsBytes;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.java
new file mode 100644
index 0000000..492aeae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProperty.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.db.app.ooObj;
+
+public class ObjyProperty extends ooObj
+{
+  protected String name;
+
+  protected String value;
+
+  public ObjyProperty(String name, String value)
+  {
+    this.name = name;
+    this.value = value;
+  }
+
+  public String getKey()
+  {
+    fetch();
+    return name;
+  }
+
+  public void setName(String name)
+  {
+    markModified();
+    this.name = name;
+  }
+
+  public String getValue()
+  {
+    fetch();
+    return value;
+  }
+
+  public void setValue(String value)
+  {
+    markModified();
+    this.value = value;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.java
new file mode 100644
index 0000000..6f61694
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyProxy.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.db.app.ooId;
+
+public class ObjyProxy
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyProxy.class);
+
+  static public String className = "ObjyProxy";
+
+  static public String uriAttributeName = "uri";
+
+  protected Class_Object classObject;
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(ObjyProxy.className) == null && top_mod.resolve_proposed_class(ObjyProxy.className) == null)
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      Proposed_Class propClass = top_mod.propose_new_class(ObjyProxy.className);
+
+      propClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+      // propClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+      // ooProxy.uriAttributeName, // Attribute name
+      // 1, // # elements in fixed-size array
+      // ooBaseType.ooCHAR// Type of string data
+      // );
+      //
+      propClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PROTECTED, // access kind
+          ObjyProxy.uriAttributeName, // Attribute name
+          1, // # elements in fixed-size array
+          "ooUtf8String" // name of embedded class
+      );
+
+      // top_mod.propose_new_class(propClass);
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooProxy added");
+      }
+    }
+
+  }
+
+  // factory.
+  public static ObjyProxy createObject(ooId nearObject)
+  {
+    Class_Object newClassObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(ObjyProxy.className).getASClass(), nearObject, false);
+    ObjyProxy proxyObject = new ObjyProxy(newClassObject);
+    return proxyObject;
+  }
+
+  public ObjyProxy(Class_Object classObject)
+  {
+    this.classObject = classObject;
+  }
+
+  public void setUri(String uri)
+  {
+    String_Value stringValue = classObject.nget_string(ObjyProxy.uriAttributeName);
+    stringValue.set(uri);
+  }
+
+  public String getUri()
+  {
+    String_Value stringValue = classObject.nget_string(ObjyProxy.uriAttributeName);
+    return stringValue.toString();
+  }
+
+  public ooId ooId()
+  {
+    return classObject.objectID();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java
new file mode 100644
index 0000000..0c43bae
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (c) 2010-2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObjectManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+import com.objy.db.util.ooTreeListX;
+
+/***
+ * OoResouceList is a specialized ooArrayListId, where all elements are of type Resourc(Node|Folder). The class will
+ * allow adding, validating and removing resources From the list.
+ *
+ * @author ibrahim
+ */
+public class ObjyResourceList
+{
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyProxy.class);
+
+  static public String className = "ooResourceList";
+
+  static public String Attribute_arrayName = "oo_array";
+
+  private ObjySession objySession;
+
+  protected Class_Object classObject;
+
+  protected ObjyArrayListId list = null;
+
+  protected ooId objectId;
+
+  private static final EStructuralFeature featureName = EresourcePackage.Literals.CDO_RESOURCE_NODE__NAME;
+
+  // we could use this "EresourcePackage.eINSTANCE.getCDOResourceNode_Name()" instead of above.
+
+  public static void buildSchema()
+  {
+    d_Module top_mod = ObjySchema.getTopModule();
+    if (top_mod.resolve_class(ObjyResourceList.className) == null && top_mod.resolve_proposed_class(ObjyResourceList.className) == null)
+    {
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
+      }
+
+      boolean inProcess = top_mod.proposed_classes().hasNext();
+
+      // Proposed_Class A = new Proposed_Class(ooArrayListId.ClassName);
+      Proposed_Class propClass = top_mod.propose_new_class(ObjyResourceList.className);
+
+      propClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, ObjyBase.CLASS_NAME /* "ooObj" */);
+
+      propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
+          d_Access_Kind.d_PUBLIC, // Access kind
+          ObjyResourceList.Attribute_arrayName, // Attribute name
+          1, // # elements in fixed-size array
+          ObjyArrayListId.className, false); // Default value // Default value
+
+      // top_mod.propose_new_class(A);
+      if (!inProcess)
+      {
+        top_mod.activate_proposals(true, true);
+      }
+
+      if (TRACER_DEBUG.isEnabled())
+      {
+        TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added");
+      }
+    }
+
+  }
+
+  public ObjyResourceList(ObjySession objySession, ObjyObject objyObject)
+  {
+    classObject = objyObject.ooClassObject();
+    this.objySession = objySession;
+    objectId = objyObject.ooId();
+  }
+
+  // public OoResourceList(ObjySession objySession, Class_Object classObject)
+  // {
+  // this.classObject = classObject;
+  // this.objySession = objySession;
+  // }
+
+  private ObjyArrayListId getList()
+  {
+    if (list != null)
+    {
+      return list;
+    }
+
+    try
+    {
+      // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName);
+      ooId oid = classObject.nget_ooId(ObjyResourceList.Attribute_arrayName);
+      if (!oid.isNull())
+      {
+        list = new ObjyArrayListId(Class_Object.class_object_from_oid(oid));
+      }
+    }
+    catch (ObjyRuntimeException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    return list;
+  }
+
+  public void remove(ObjyObject objyObject)
+  {
+    int size = (int)getList().size();
+    for (int i = 0; i < size; i++)
+    {
+      if (objyObject.ooId().equals(getList().get(i)))
+      {
+        getList().remove(i);
+        break;
+      }
+    }
+  }
+
+  public void add(ObjyObject objyObject)
+  {
+    // TODO - we need to make sure that objyObject is a resource!!!
+    getList().add(objyObject.ooId());
+  }
+
+  // public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, CDORevision revision)
+  // throws IllegalStateException
+  // {
+  // CDOID folderID = (CDOID)revision.data().getContainerID();
+  // String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
+  // CDOID existingID = storeAccessor.readResourceID(folderID, name, revision.getBranch().getHead());
+  // if (existingID != CDOID.NULL && !existingID.equals(revision.getID()))
+  // {
+  // throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$
+  // //$NON-NLS-2$
+  // }
+  // }
+
+  public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision) throws IllegalStateException
+  {
+    // CDOID folderID = (CDOID)revision.data().getContainerID();
+    CDOID folderId = (CDOID)revision.data().getContainerID();
+    String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
+
+    // ooId folderId = objyObject.getEContainerAsOid();
+    // String name = OoResourceList.getResourceName(objyObject);
+
+    // iterate over all resource in the list, and verify if we have both name and folderID.
+    int size = (int)getList().size();
+    ObjyObjectManager objyObjectManager = storeAccessor.getObjySession().getObjectManager();
+    for (int i = 0; i < size; i++)
+    {
+      ObjyObject resource = getResource(i);
+      ObjyObject resourceRevision = resource;
+      // get the proper revision of the resource (might need to refactor this code, see readRevision())
+      if (storeAccessor.getStore().isRequiredToSupportBranches())
+      {
+        try
+        {
+          resourceRevision = resource.getRevision(revision.getTimeStamp(), revision.getBranch().getID(), objyObjectManager);
+        }
+        catch (RuntimeException ex)
+        {
+          ex.printStackTrace();
+        }
+      }
+      else if (storeAccessor.getStore().isRequiredToSupportAudits())
+      {
+        try
+        {
+          resourceRevision = resource.getRevision(revision.getTimeStamp(), CDOBranch.MAIN_BRANCH_ID, objyObjectManager);
+        }
+        catch (RuntimeException ex)
+        {
+          ex.printStackTrace();
+        }
+      }
+
+      if (resourceRevision == null || resourceRevision.getVersion() < 0)
+      {
+        continue;
+      }
+
+      // int v = resource.getVersion();
+      CDOID resourceFolderId = (CDOID)resourceRevision.getEContainer();
+      String resourceName = ObjyResourceList.getResourceName(resourceRevision);
+      if (resourceFolderId != null && resourceFolderId.equals(folderId) && resourceName != null && resourceName.equals(name))
+      {
+        throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder: " + folderId); //$NON-NLS-1$
+      }
+    }
+  }
+
+  public ObjyObject getResource(int index)
+  {
+    return objySession.getObjectManager().getObject(getList().get(index));
+  }
+
+  public static String getResourceName(ObjyObject objyObject)
+  {
+    String name = (String)objyObject.get(featureName);
+    return name;
+  }
+
+  public static ObjyObject create(ooId nearOid)
+  {
+    Class_Object classObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(ObjyResourceList.className).getASClass(), nearOid, false);
+    // ObjyObjectManager.newInternalObjCount++;
+    // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName);
+    // Class_Object arrayClassObject = Class_Object.new_persistent_object(
+    // ObjySchema.getTopModule().resolve_class(ObjyArrayListId.className), classObject.objectID(), false);
+    // // ooId arrayOid = arrayClassObject.objectID();
+    ooTreeListX list = new ooTreeListX(10, false);
+    // ObjyObjectManager.newInternalObjCount++;
+    ooObj anObj = ooObj.create_ooObj(classObject.objectID());
+    anObj.cluster(list);
+    // System.out.println("initObject: " + anObj.getOid().getStoreString() + " treeListX: "
+    // // + list.getOid().getStoreString());
+    classObject.nset_ooId(ObjyResourceList.Attribute_arrayName, list.getOid());
+
+    // classObject.set_ooId(position, arrayClassObject.objectID());
+    // ObjyArrayListId.initObject(arrayClassObject);
+    ObjyObject objyObject = null;
+    try
+    {
+      objyObject = new ObjyObject(classObject);
+    }
+    catch (RuntimeException ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return objyObject;
+  }
+
+  public ooId ooId()
+  {
+    return objectId;
+  }
+
+  public int size()
+  {
+    return (int)getList().size();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.java
new file mode 100644
index 0000000..61c5be2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyStoreInfo.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import com.objy.db.app.ooObj;
+
+public class ObjyStoreInfo extends ooObj
+{
+  protected long creationTime;
+
+  protected String comment;
+
+  /***
+   * ObjyStoreInfo is a read only object.
+   */
+  public ObjyStoreInfo(long creationTime, String comment)
+  {
+    this.creationTime = creationTime;
+    this.comment = comment;
+  }
+
+  public long getCreationTime()
+  {
+    fetch();
+    return creationTime;
+  }
+
+  public String getComment()
+  {
+    fetch();
+    return comment;
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java
new file mode 100644
index 0000000..dc359ed
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/OBJYCDOIDUtil.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.utils;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDExternal;
+import org.eclipse.emf.cdo.common.id.CDOIDObject;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyProxy;
+
+import com.objy.db.app.ooId;
+
+/**
+ * TODO - this file was taken from the old code without verification for
+ *        all its functionality's requirement to the new code.
+ *
+ *      - We might need to cleanup the various CDOID transformations.
+ *
+ *      * The idea is to convert the OID parts into long value, except that
+ *        we only use the 6-bits from the DB, the rest is used to mark
+ *        the OID as
+ */
+
+/**
+ * @author Simon McDuff
+ */
+public class OBJYCDOIDUtil
+{
+
+  public static CDOID createLong(long value)
+  {
+    if (value == 0L)
+    {
+      return CDOID.NULL;
+    }
+    return CDOIDUtil.createLong(value);
+  }
+
+  public static CDOID getCDOID(ooId id)
+  {
+    return createLong(getLong(id));
+  }
+
+  public static CDOID getCDOID(long id)
+  {
+    return createLong(id);
+  }
+
+  public static long getLong(ooId id)
+  {
+    long value = 0;
+
+    if (id != null)
+    {
+      value = (long)id.getSlot() << 48 | (long)id.getPage() << 32 | (long)id.getOC() << 16 | id.getDB();
+    }
+
+    return value;
+  }
+
+  public static long addProxy(long ooid)
+  {
+    return ooid | (long)1 << 63;
+  }
+
+  public static long removeProxy(long ooid)
+  {
+    return ooid << 1 >>> 1;
+  }
+
+  public static boolean isProxy(long ooid)
+  {
+    return ooid >>> 63 == 1;
+  }
+
+  public static long adaptOOID(long ooid)
+  {
+    return removeProxy(ooid);
+  }
+
+  // 2.0 code
+  public static boolean isValidObjyId(CDOID id)
+  {
+    if (id instanceof CDOIDObject)
+    {
+      try
+      {
+        return CDOIDUtil.getLong(id) > 1717828929;
+      }
+      catch (Exception ignore)
+      {
+        // Fall through
+      }
+    }
+
+    return false;
+  }
+
+  public static ooId getooId(long longCdoID)
+  {
+    int slot = (int)(longCdoID >> 48 & 0xFFFF);
+    int page = (int)(longCdoID >> 32 & 0xFFFF);
+    int OC = (int)(longCdoID >> 16 & 0xFFFF);
+    int DB = (int)(longCdoID & 0xFFFF);
+    return new com.objy.pm.ooId(DB, OC, page, slot, 0);
+  }
+
+  public static ooId getContainerId(long longCdoID)
+  {
+    int slot = 1;
+    int page = 1;
+    int OC = (int)(longCdoID >> 16 & 0xFFFF);
+    int DB = (int)(longCdoID & 0xFFFF);
+    return new com.objy.pm.ooId(DB, OC, page, slot, 0);
+  }
+
+  public static ooId getooId(CDOID id)
+  {
+    long longCdoID = CDOIDUtil.getLong(id);
+    return getooId(longCdoID);
+  }
+
+  public static ooId getContainerId(CDOID id)
+  {
+    long longCdoID = org.eclipse.emf.cdo.common.id.CDOIDUtil.getLong(id);
+    return getContainerId(longCdoID);
+  }
+
+  public static CDOIDExternal createCDIDExternal(ObjyProxy proxyObject)
+  {
+    return CDOIDUtil.createExternal(proxyObject.getUri());
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.java
new file mode 100644
index 0000000..f87d0e8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/ObjyDb.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.utils;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyCommitInfoHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyPackageHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyPropertyMapHandler;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyScope;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranchManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyLockAreaManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyResourceList;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.ooId;
+
+public class ObjyDb
+{
+
+  public static final String CONFIGDB_NAME = "ConfigDb";
+
+  public static final String RESOURCELIST_NAME = "ResourceList";
+
+  public static final String RESOURCELIST_CONT_NAME = "ResourceListCont";
+
+  public static final String PACKAGESTORE_CONT_NAME = "PackageCont";
+
+  public static final String COMMITINFOSET_CONT_NAME = "CommitInfoCont";
+
+  public static final String COMMITINFOSET_NAME = "CommitInfoSet";
+
+  public static final String PROPERTYMAP_NAME = "PropertyMap";
+
+  public static final String PROPERTYMAP_CONT_NAME = "PropertyCont";
+
+  public static final String OBJYSTOREINFO_NAME = "ObjyStoreInfo";
+
+  public static final String DEFAULT_CONT_NAME = "_ooDefaultContObj"; // this is objy default cont name.
+
+  public static final String BRANCHMANAGER_NAME = "BranchManager";
+
+  public static final String BRANCHING_CONT_NAME = "BranchingCont";
+
+  public static final String LOCKAREAMANAGER_NAME = "LockAreaManager";
+
+  public static final String LOCKAREA_CONT_NAME = "LockAreaCont";
+
+  private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyDb.class);
+
+  // private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyDb.class);
+
+  private static final String PACKAGEMAP_NAME = "PackageMap";
+
+  /***
+   * Unitily functions..
+   */
+
+  /***
+   * This function will return the resourceList after creation. Each repository (stored in its own DB) will have its own
+   * ResourceList.
+   */
+  public static ObjyObject getOrCreateResourceList(String repositoryName)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("getOrCreateResourceList() for " + repositoryName); //$NON-NLS-1$
+    }
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.RESOURCELIST_CONT_NAME);
+    ObjyObject objyObject = null;
+    try
+    {
+      objyObject = objyScope.lookupObjyObject(ObjyDb.RESOURCELIST_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      // we need to create the resource.
+      objyObject = createResourceList(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+
+    return objyObject;
+  }
+
+  protected static ObjyObject createResourceList(ObjyScope objyScope)
+  {
+    if (TRACER_DEBUG.isEnabled())
+    {
+      TRACER_DEBUG.format("createResourceList()"); //$NON-NLS-1$
+    }
+    // TODO - this need refactoring...
+    ObjyObject resourceList = ObjyResourceList.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.RESOURCELIST_NAME, resourceList);
+    return resourceList;
+  }
+
+  protected static ooId createCommitInfoList(ObjyScope objyScope)
+  {
+    // TODO - this need refactoring...
+    ooId commitInfoListId = ObjyCommitInfoHandler.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.COMMITINFOSET_NAME, commitInfoListId);
+    return commitInfoListId;
+  }
+
+  public static ooId getOrCreateCommitInfoList(String repositoryName)
+  {
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.COMMITINFOSET_CONT_NAME);
+    ooId commitInfoListId = null;
+    try
+    {
+      commitInfoListId = objyScope.lookupObjectOid(ObjyDb.COMMITINFOSET_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      commitInfoListId = createCommitInfoList(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    return commitInfoListId;
+  }
+
+  protected static ooId createPropertyMap(ObjyScope objyScope)
+  {
+    // TODO - this need refactoring...
+    ooId propertyMapId = ObjyPropertyMapHandler.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.PROPERTYMAP_NAME, propertyMapId);
+    return propertyMapId;
+  }
+
+  public static ooId getOrCreatePropertyMap(String repositoryName)
+  {
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.PROPERTYMAP_CONT_NAME);
+    ooId propertyMapId = null;
+    try
+    {
+      propertyMapId = objyScope.lookupObjectOid(ObjyDb.PROPERTYMAP_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      propertyMapId = createPropertyMap(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    return propertyMapId;
+  }
+
+  protected static ObjyBranchManager createBranchManager(ObjyScope objyScope)
+  {
+    ObjyBranchManager objyBranchManager = ObjyBranchManager.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.BRANCHMANAGER_NAME, objyBranchManager.getOid());
+    return objyBranchManager;
+  }
+
+  public static ObjyBranchManager getOrCreateBranchManager(String repositoryName)
+  {
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.BRANCHING_CONT_NAME);
+    ObjyBranchManager objyBranchManager = null;
+    try
+    {
+      objyBranchManager = (ObjyBranchManager)objyScope.lookupObject(ObjyDb.BRANCHMANAGER_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      objyBranchManager = createBranchManager(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    return objyBranchManager;
+  }
+
+  protected static ObjyLockAreaManager createLockAreaManager(ObjyScope objyScope)
+  {
+    ObjyLockAreaManager objyLockAreaManager = ObjyLockAreaManager.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.LOCKAREAMANAGER_NAME, objyLockAreaManager.getOid());
+    return objyLockAreaManager;
+  }
+
+  public static ObjyLockAreaManager getOrCreateLockAreaManager(String repositoryName)
+  {
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.LOCKAREA_CONT_NAME);
+    ObjyLockAreaManager objyLockAreaManager = null;
+    try
+    {
+      objyLockAreaManager = (ObjyLockAreaManager)objyScope.lookupObject(ObjyDb.LOCKAREAMANAGER_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      objyLockAreaManager = createLockAreaManager(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    return objyLockAreaManager;
+  }
+
+  protected static ooId createPackageMap(ObjyScope objyScope)
+  {
+    // TODO - this need refactoring...
+    ooId packageMapId = ObjyPackageHandler.create(objyScope.getScopeContOid());
+    objyScope.nameObj(ObjyDb.PACKAGEMAP_NAME, packageMapId);
+    return packageMapId;
+  }
+
+  public static ooId getOrCreatePackageMap(String repositoryName)
+  {
+    ObjyScope objyScope = new ObjyScope(repositoryName, ObjyDb.PACKAGESTORE_CONT_NAME);
+    ooId packageMapId = null;
+    try
+    {
+      packageMapId = objyScope.lookupObjectOid(ObjyDb.PACKAGEMAP_NAME);
+    }
+    catch (ObjyRuntimeException ex)
+    {
+      packageMapId = createPackageMap(objyScope);
+    }
+    catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    return packageMapId;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.java
new file mode 100644
index 0000000..8c0fa1d
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/SmartLock.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.server.internal.objectivity.utils;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.db.FetchCompletedWithErrors;
+import com.objy.db.ObjyRuntimeException;
+import com.objy.db.app.Session;
+import com.objy.db.app.oo;
+import com.objy.db.app.ooContObj;
+import com.objy.db.app.ooObj;
+import com.objy.db.iapp.ActivateInfo;
+import com.objy.db.iapp.FetchErrorInfo;
+
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Vector;
+
+/**
+ * @author Simon McDuff To change the template for this generated type comment go to
+ *         Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
+public class SmartLock
+{
+  // private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, SmartLock.class);
+
+  private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, SmartLock.class);
+
+  private static final ContextTracer TRACER_ERROR = new ContextTracer(OM.ERROR, SmartLock.class);
+
+  public static boolean lock(ObjyObject objyObject)
+  {
+    ooObj objectToLock = (ooObj)Session.getCurrent().getFD().objectFrom(objyObject.ooId());
+    if (!objectToLock.isPersistent())
+    {
+      return false;
+    }
+    ooContObj container = null;
+    if (objectToLock instanceof ooContObj)
+    {
+      container = (ooContObj)objectToLock;
+    }
+    else
+    {
+      container = objectToLock.getContainer();
+    }
+    return lock(container);
+  }
+
+  public static boolean readLock(ooContObj container)
+  {
+    container.fetch();
+    if (container.isUpdated())
+    {
+      container.refresh(oo.READ);
+      return true;
+    }
+
+    try
+    {
+      container.lock(oo.READ);
+    }
+    catch (Exception e)
+    {
+      // In MROW Mode, an Exception occur if we try to upgrade the lock from read to write when the container is
+      // Locked by someone else.
+      container.refresh(oo.READ);
+    }
+
+    return false;
+  }
+
+  public static boolean lock(ooContObj container)
+  {
+    container.fetch();
+    if (container.isUpdated())
+    {
+      container.refresh(oo.WRITE);
+      return true;
+    }
+
+    try
+    {
+      container.lock(oo.WRITE);
+    }
+    catch (Exception e)
+    {
+      // In MROW Mode, an Exception occur if we try to upgrade the lock from read to write when the container is
+      // Locked by someone else.
+      container.refresh(oo.WRITE);
+    }
+
+    return false;
+  }
+
+  public static boolean unlock(ooObj objectToLock)
+  {
+    // ooContObj container = objectToLock.getContainer();
+    Session.getCurrent().checkpoint(oo.DOWNGRADE_ALL);
+    return false;
+  }
+
+  /**
+   * This should replace ooObj.activate. We do not need to call super.activate because we implemented the code in
+   * ooObj.activate in here. This safeActivate will refresh container in case of errors. >> ... Msg: objref member: test
+   * with oid: #26-387-1-2 not found or accessible
+   *
+   * @param object
+   * @param fcweEx
+   */
+  @SuppressWarnings("unchecked")
+  public static void safeActivate(ooObj object, ActivateInfo fcweEx)
+  {
+    if (!fcweEx.hasFetchErrors())
+    {
+      return;
+    }
+    if (TRACER_INFO.isEnabled())
+    {
+      TRACER_INFO.trace("   >> Object: " + object.getOid().getStoreString() + " Fetch with errors");
+    }
+    Vector<Object> errors = fcweEx.getFetchErrors();
+    // Make sure there are fetch-error information objects
+    if (errors != null)
+    {
+      // Get Enumeration from Vector
+      Enumeration<Object> errs = errors.elements();
+      FetchErrorInfo feInfo = null;
+      HashSet<Object> hashSet = new HashSet<Object>();
+      hashSet.add(object.getContainer());
+      while (errs.hasMoreElements())
+      {
+        feInfo = (FetchErrorInfo)errs.nextElement();
+        TRACER_INFO.trace("  >> ... fieldName: " + feInfo.getFieldName());
+        TRACER_INFO.trace("  >> ... Msg: " + feInfo.getErrorMessage());
+        String needFetchingOID = feInfo.getOid().getStoreString();
+        TRACER_INFO.trace("  >> ... OID: " + needFetchingOID);
+        try
+        {
+          TRACER_INFO.trace("  >> Trying to refetch the object....");
+          String contID = "#" + feInfo.getOid().getDB() + "-" + feInfo.getOid().getOC() + "-" + "1-1";
+          TRACER_INFO.trace("contID: " + contID);
+          ooContObj tempCont = (ooContObj)Session.getCurrent().getFD().objectFrom(contID);
+          if (!hashSet.contains(tempCont))
+          {
+            hashSet.add(tempCont);
+          }
+        }
+        catch (ObjyRuntimeException ex)
+        {
+          TRACER_ERROR.trace("FATAL", ex);
+        }
+
+      }
+      Iterator<Object> itrCont = hashSet.iterator();
+      int numCont = 0;
+      while (itrCont.hasNext())
+      {
+        ooContObj cont = (ooContObj)itrCont.next();
+        if (cont.isUpdated())
+        {
+          TRACER_INFO.trace("RECOVER : REFRESH CONT " + cont.getOid().getStoreString());
+          cont.refresh(oo.READ);
+          numCont++;
+        }
+      }
+      if (numCont != 0)
+      {
+        // End while more fetch-error information objects
+        object.markFetchRequired();
+        object.fetch();
+      }
+      else
+      {
+        throw new FetchCompletedWithErrors("Fetch completed but errors occurred", object, fcweEx.getFetchErrors());
+      }
+    }
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.java
new file mode 100644
index 0000000..2a7dc45
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/utils/TypeConvert.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.utils;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
+
+import com.objy.as.app.Class_Object;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+/**
+ * Originally EOOUtil TBD: verify if we really need this class...
+ *
+ * @author ibrahim
+ */
+public class TypeConvert
+{
+
+  static public ooId toOoId(Object target)
+  {
+    if (target == null)
+    {
+      return null;
+    }
+    if (target instanceof CDOID)
+    {
+      if ((CDOID)target == CDOID.NULL)
+      {
+        return null;
+      }
+
+      return OBJYCDOIDUtil.getooId((CDOID)target);
+    }
+    if (target instanceof ooId)
+    {
+      return (ooId)target;
+    }
+    else if (target instanceof ObjyObject)
+    {
+      return ((ObjyObject)target).ooId();
+    }
+    else if (target instanceof ooObj)
+    {
+      return ((ooObj)target).getOid();
+    }
+
+    throw new IllegalArgumentException(target.toString());
+  }
+
+  static public ooObj toOoObj(Object target)
+  {
+    if (target instanceof ObjyObject)
+    {
+      target = ((ObjyObject)target).ooId();
+    }
+    if (target instanceof ooId)
+    {
+      return ooObj.create_ooObj((ooId)target);
+    }
+    throw new IllegalArgumentException(target.toString());
+  }
+
+  static public Class_Object toClassObject(Object target)
+  {
+    if (target == null)
+    {
+      return null;
+    }
+    if (target instanceof Class_Object)
+    {
+      return (Class_Object)target;
+    }
+    else if (target instanceof ooObj)
+    {
+      return new Class_Object(target);
+    }
+    else if (target instanceof ooId)
+    {
+      return Class_Object.class_object_from_oid((ooId)target);
+    }
+
+    throw new IllegalArgumentException("Not supported " + target);
+
+  }
+
+  static public ObjyObject toObjyObject(Object target)
+  {
+    if (target == null)
+    {
+      return null;
+    }
+
+    if (target instanceof ObjyObject)
+    {
+      return (ObjyObject)target;
+    }
+    else if (target instanceof Class_Object)
+    {
+      throw new IllegalArgumentException("Not supported " + target);
+    }
+    else if (target instanceof ooId)
+    {
+      throw new IllegalArgumentException("Not supported " + target);
+    }
+    return null;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.java
new file mode 100644
index 0000000..0cc3ca8
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStore.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.objectivity;
+
+import org.eclipse.emf.cdo.server.IStore;
+
+/**
+ * Interface to the Objecivity Store implemenation.
+ *
+ * @author ibrahim
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IObjectivityStore extends IStore
+{
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.java
new file mode 100644
index 0000000..e7a8eba
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreAccessor.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.objectivity;
+
+import org.eclipse.emf.cdo.server.IStoreAccessor;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * A {@link IStoreAccessor store accessor} for CDO's Objecivity back-end integration.
+ *
+ * @author Ibrahim Sallam
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IObjectivityStoreAccessor extends IStoreAccessor.Raw
+{
+  public IObjectivityStore getStore();
+
+  /**
+   * @since 2.0
+   */
+  public IObjectivityStoreChunkReader createChunkReader(InternalCDORevision revision, EStructuralFeature feature);
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.java
new file mode 100644
index 0000000..b2fb0f4
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreChunkReader.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.objectivity;
+
+import org.eclipse.emf.cdo.server.IStoreChunkReader;
+
+/**
+ * A {@link IStoreChunkReader chunk reader} for for CDO's Objecivity back-end integration.
+ *
+ * @author Eike Stepper
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IObjectivityStoreChunkReader extends IStoreChunkReader
+{
+  /**
+   * @since 2.0
+   */
+  public IObjectivityStoreAccessor getAccessor();
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.java
new file mode 100644
index 0000000..9793bf0
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/IObjectivityStoreConfig.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.server.objectivity;
+
+import java.io.Serializable;
+
+/**
+ * Encapsulates Objectivity-specific back-end configuration settings.
+ *
+ * @author Ibrahim Sallam
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IObjectivityStoreConfig extends Serializable
+{
+  String getFdName();
+
+  void resetFD();
+
+  int getSessionMinCacheSize();
+
+  int getSessionMaxCacheSize();
+
+  /**
+   * @since 4.0
+   */
+  String getLogPath();
+
+  /**
+   * @since 4.0
+   */
+  int getLogOption();
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.java
new file mode 100644
index 0000000..a3c1dc2
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/ObjyStoreUtil.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.objectivity;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStore;
+
+/**
+ * Provides a static factory method that creates {@link IObjectivityStore} instances.
+ *
+ * @author Simon McDuff
+ */
+public final class ObjyStoreUtil
+{
+  private ObjyStoreUtil()
+  {
+  }
+
+  // public static IObjectivityStore createStore(IObjectivityStoreConfig storeConfig, boolean reset) {
+  // // The store will open the connection to Objy...
+  // return new ObjectivityStore(storeConfig, reset);
+  // }
+
+  public static IObjectivityStore createStore(IObjectivityStoreConfig storeConfig)
+  {
+    // The store will open the connection to Objy...
+    return new ObjectivityStore(storeConfig);
+  }
+}
diff --git a/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/package-info.java b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/package-info.java
new file mode 100644
index 0000000..bb5816b
--- /dev/null
+++ b/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/objectivity/package-info.java
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
+ * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Eike Stepper - initial API
+ * and implementation
+ */
+
+/**
+ * Server concepts for dealing with Objectivity/DB stores and accessors.
+ */
+package org.eclipse.emf.cdo.server.objectivity;
diff --git a/org.eclipse.emf.cdo.tests.db4o/.classpath b/org.eclipse.emf.cdo.tests.db4o/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.tests.db4o/.project b/org.eclipse.emf.cdo.tests.db4o/.project
new file mode 100644
index 0000000..5f5d809
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.tests.db4o</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..702b60b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,362 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..edd2b4c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=false
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="false" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="false" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.php.ui.editor.templates.php.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created JavaScript files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" name\="filecomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author ${user}\r\n *\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for vars" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding function" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-JSDoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate functions" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created function stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated function stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..c57412e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,25 @@
+#Mon Nov 02 11:31:10 GMT 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git "a/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050DB4O\051.launch" "b/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050DB4O\051.launch"
new file mode 100644
index 0000000..8975fd1
--- /dev/null
+++ "b/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050DB4O\051.launch"
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.db4o.AllTestsDB4O"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.db4o"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=128m&#10;-Xmx1024m"/>
+</launchConfiguration>
diff --git "a/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050MEMDB4O\051.launch" "b/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050MEMDB4O\051.launch"
new file mode 100644
index 0000000..41319ae
--- /dev/null
+++ "b/org.eclipse.emf.cdo.tests.db4o/CDO AllTests \050MEMDB4O\051.launch"
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.db4o.AllTestsDB4OMem"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.db4o"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=128m&#13;&#10;-Xmx1024m"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.tests.db4o/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.tests.db4o/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d0c4a88
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.emf.cdo.tests.db4o
+Bundle-Version: 4.0.700.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.cdo.tests;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.db4o;bundle-version="[4.0.0,5.0.0)"
+Bundle-Vendor: %providerName
+Export-Package: org.eclipse.emf.cdo.tests.db4o;version="4.0.700";x-internal:=true
+Bundle-Localization: plugin
+Import-Package: com.db4o;version="[7.4.0,9.0.0)",
+ com.db4o.ext;version="[7.4.0,9.0.0)"
+Automatic-Module-Name: org.eclipse.emf.cdo.tests.db4o
diff --git a/org.eclipse.emf.cdo.tests.db4o/about.html b/org.eclipse.emf.cdo.tests.db4o/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.class b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.class
new file mode 100644
index 0000000..914f694
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.class b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.class
new file mode 100644
index 0000000..12eb929
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.class b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.class
new file mode 100644
index 0000000..160cc8b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad
new file mode 100644
index 0000000..ad7514c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/bin/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.tests.db4o;
+
+import org.eclipse.emf.cdo.server.internal.db4o.DB4OStore;
+
+import com.db4o.ObjectContainer;
+import com.db4o.ext.ExtDb4o;
+import com.db4o.ext.MemoryFile;
+
+/**
+ * In-memory based DB4OStore. Just meant to be used to accelerate DB4OStore test-cases.
+ * 
+ * @author Victor Roldan Betancort
+ */
+public final class MEMDB4OStore extends DB4OStore
+{
+
+  private static ObjectContainer objectContainer;
+
+  public MEMDB4OStore()
+  {
+    super(null, 0);
+  }
+
+  @Override
+  public ObjectContainer openClient()
+  {
+    if (objectContainer == null)
+    {
+      objectContainer = ExtDb4o.openMemoryFile(new MemoryFile());
+    }
+    return objectContainer;
+  }
+
+  @Override
+  protected void initObjectServer()
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  @Override
+  protected void tearDownObjectServer()
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  @Override
+  protected void closeClient(ObjectContainer container)
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  public static void clearContainer()
+  {
+    objectContainer = ExtDb4o.openMemoryFile(new MemoryFile());
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.db4o/build.properties b/org.eclipse.emf.cdo.tests.db4o/build.properties
new file mode 100644
index 0000000..c06e7a4
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               plugin.properties
+src.includes = about.html,\
+               CDO AllTests (DB4O).launch,\
+               CDO AllTests (MEMDB4O).launch,\
+               pom.xml
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.tests.db4o/plugin.properties b/org.eclipse.emf.cdo.tests.db4o/plugin.properties
new file mode 100644
index 0000000..160f4c0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/plugin.properties
@@ -0,0 +1,12 @@
+# Copyright (c) 2010, 2012 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Victor Roldan Betancort - initial API and implementation
+#    Eike Stepper - maintenance
+
+pluginName = CDO Model Repository Tests DB4O
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.tests.db4o/pom.xml b/org.eclipse.emf.cdo.tests.db4o/pom.xml
new file mode 100644
index 0000000..5b7cae8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.tests.db4o</artifactId>
+  <version>4.0.700-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.java b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.java
new file mode 100644
index 0000000..7b3de9d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4O.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011-2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.db4o;
+
+import org.eclipse.emf.cdo.tests.AllConfigs;
+import org.eclipse.emf.cdo.tests.BranchingSameSessionTest;
+import org.eclipse.emf.cdo.tests.BranchingTest;
+import org.eclipse.emf.cdo.tests.BranchingWithCacheClearTest;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_324585_Test;
+import org.eclipse.emf.cdo.tests.config.IScenario;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
+
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class AllTestsDB4O extends AllConfigs
+{
+  public static Test suite()
+  {
+    return new AllTestsDB4O().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new DB4OConfig(false), JVM, NATIVE);
+  }
+
+  @Override
+  protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
+  {
+    super.initTestClasses(testClasses, scenario);
+
+    // Added here testcases to skip
+    // takes too much
+    testClasses.remove(Bugzilla_261218_Test.class);
+    testClasses.remove(Bugzilla_324585_Test.class);
+
+    // db4o doesn't support branching
+    testClasses.remove(BranchingTest.class);
+    testClasses.remove(BranchingSameSessionTest.class);
+    testClasses.remove(BranchingWithCacheClearTest.class);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.java b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.java
new file mode 100644
index 0000000..7ca823d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/AllTestsDB4OMem.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2011-2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.db4o;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class AllTestsDB4OMem extends AllTestsDB4O
+{
+  public static Test suite()
+  {
+    return new AllTestsDB4OMem().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new DB4OConfig(true), JVM, NATIVE);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.java b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.java
new file mode 100644
index 0000000..a1c2eb8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/DB4OConfig.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2011, 2012, 2015, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.db4o;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.internal.db4o.DB4OStore;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+
+import org.eclipse.net4j.util.io.TMPUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.util.Random;
+import java.util.Set;
+
+/**
+ * @author Victor Roldan Betancort
+ */
+public class DB4OConfig extends RepositoryConfig
+{
+  public static final String CAPABILITY_MEM = "DB4O.mem";
+
+  public static final String CAPABILITY_NET = "DB4O.net";
+
+  private static final Random RANDOM = new Random(System.currentTimeMillis());
+
+  private static final long serialVersionUID = 1L;
+
+  private boolean mem;
+
+  private transient boolean optimizing = true;
+
+  public DB4OConfig(boolean mem)
+  {
+    super("DB4O-" + (mem ? "mem" : "net"));
+    this.mem = mem;
+  }
+
+  @Override
+  public void initCapabilities(Set<String> capabilities)
+  {
+    super.initCapabilities(capabilities);
+    if (mem)
+    {
+      capabilities.add(CAPABILITY_MEM);
+    }
+    else
+    {
+      capabilities.add(CAPABILITY_NET);
+    }
+  }
+
+  @Override
+  protected String getStoreName()
+  {
+    return "DB4O";
+  }
+
+  public boolean isMem()
+  {
+    return mem;
+  }
+
+  public IStore createStore(String repoName)
+  {
+    if (mem)
+    {
+      throw new UnsupportedOperationException();
+      // if (!isRestarting())
+      // {
+      // MEMDB4OStore.clearContainer();
+      // }
+      //
+      // return new MEMDB4OStore();
+    }
+
+    File tempFolder = TMPUtil.getTempFolder();
+    File file = new File(tempFolder, "cdodb_" + repoName + ".db4o");
+    if (file.exists() && !isRestarting())
+    {
+      file.delete();
+    }
+
+    int port = 0;
+    boolean ok = false;
+    do
+    {
+      ServerSocket sock = null;
+
+      try
+      {
+        port = 1024 + RANDOM.nextInt(65536 - 1024);
+        sock = new ServerSocket(port);
+        ok = true;
+      }
+      catch (IOException e)
+      {
+      }
+      finally
+      {
+        try
+        {
+          if (sock != null)
+          {
+            sock.close();
+          }
+        }
+        catch (IOException e)
+        {
+        }
+      }
+    } while (!ok);
+
+    return new DB4OStore(file.getPath(), port);
+  }
+
+  @Override
+  protected boolean isOptimizing()
+  {
+    // Do NOT replace this with a hardcoded value!
+    return optimizing;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad
new file mode 100644
index 0000000..ad7514c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.db4o/src/org/eclipse/emf/cdo/tests/db4o/MEMDB4OStore.java.bad
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Victor Roldan Betancort - initial API and implementation
+ */
+
+package org.eclipse.emf.cdo.tests.db4o;
+
+import org.eclipse.emf.cdo.server.internal.db4o.DB4OStore;
+
+import com.db4o.ObjectContainer;
+import com.db4o.ext.ExtDb4o;
+import com.db4o.ext.MemoryFile;
+
+/**
+ * In-memory based DB4OStore. Just meant to be used to accelerate DB4OStore test-cases.
+ * 
+ * @author Victor Roldan Betancort
+ */
+public final class MEMDB4OStore extends DB4OStore
+{
+
+  private static ObjectContainer objectContainer;
+
+  public MEMDB4OStore()
+  {
+    super(null, 0);
+  }
+
+  @Override
+  public ObjectContainer openClient()
+  {
+    if (objectContainer == null)
+    {
+      objectContainer = ExtDb4o.openMemoryFile(new MemoryFile());
+    }
+    return objectContainer;
+  }
+
+  @Override
+  protected void initObjectServer()
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  @Override
+  protected void tearDownObjectServer()
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  @Override
+  protected void closeClient(ObjectContainer container)
+  {
+    // no server is defined. Objects are mantained in-memory in ObjectContainer instances
+  }
+
+  public static void clearContainer()
+  {
+    objectContainer = ExtDb4o.openMemoryFile(new MemoryFile());
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.classpath b/org.eclipse.emf.cdo.tests.hibernate/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.project b/org.eclipse.emf.cdo.tests.hibernate/.project
new file mode 100644
index 0000000..b98b4b0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.tests.hibernate</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..5ab6477
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:57:55 CEST 2011
+eclipse.preferences.version=1
+
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3413c04
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,381 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..222aec0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.core.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..606e67d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Sun Jun 29 11:14:29 CEST 2008
+eclipse.preferences.version=1
+resolve.requirebundle=false
diff --git a/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..c6b96bb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.tests.hibernate/HibernateServer.launch b/org.eclipse.emf.cdo.tests.hibernate/HibernateServer.launch
new file mode 100644
index 0000000..597beda
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/HibernateServer.launch
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.hibernate"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.hibernate.HibernateServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.hibernate"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.tests.hibernate/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..64b67ab
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/META-INF/MANIFEST.MF
@@ -0,0 +1,38 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.emf.cdo.tests.hibernate;singleton:=true
+Bundle-Version: 4.1.700.qualifier
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.emf.cdo.tests.hibernate.Activator
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Eclipse-RegisterBuddy: org.eclipse.emf.cdo.server.hibernate
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.7.0,3.0.0)",
+ org.eclipse.net4j.tcp;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.db;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.tests;bundle-version="[4.0.0,5.0.0)",
+ org.hsqldb;bundle-version="[2.0.0,3.0.0)",
+ com.mysql.jdbc;bundle-version="[5.1.7,6.0.0)",
+ org.dom4j;bundle-version="[1.6.1,2.0.0)",
+ javax.persistence;bundle-version="[2.0.0,3.0.0)",
+ org.hibernate;bundle-version="[4.0.0,5.0.0)",
+ org.slf4j.api;bundle-version="[1.7.0,2.0.0)"
+Export-Package: org.eclipse.emf.cdo.tests.hibernate;version="4.1.700";x-friends:="org.eclipse.emf.cdo.tests.hudson",
+ org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;version="4.1.700",
+ org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;version="4.1.700",
+ org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.util;version="4.1.700"
+Import-Package: org.hibernate.cfg;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.teneo;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.cdo.server.hibernate;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.hibernate.teneo;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.server.internal.hibernate;version="[4.0.0,5.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel.impl;version="[2.0.1,3.0.0)",
+ org.eclipse.emf.teneo.annotations.pamodel.util;version="[2.0.1,3.0.0)"
+Automatic-Module-Name: org.eclipse.emf.cdo.tests.hibernate
diff --git a/org.eclipse.emf.cdo.tests.hibernate/about.html b/org.eclipse.emf.cdo.tests.hibernate/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/about.ini b/org.eclipse.emf.cdo.tests.hibernate/about.ini
new file mode 100644
index 0000000..b7e87ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=modeling32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/org.eclipse.emf.cdo.tests.hibernate/about.mappings b/org.eclipse.emf.cdo.tests.hibernate/about.mappings
new file mode 100644
index 0000000..28e3764
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${build.qualifier}
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.tests.hibernate/about.properties b/org.eclipse.emf.cdo.tests.hibernate/about.properties
new file mode 100644
index 0000000..71eb5d3
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/about.properties
@@ -0,0 +1,31 @@
+# Copyright (c) 2008, 2009, 2011, 2012 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#    Eike Stepper - initial API and implementation
+   
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+featureName = CDO Model Repository Tests Hibernate
+featureText = CDO Model Repository Tests Hibernate\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others. All rights reserved.\n\
+\n\
+Visit http://www.eclipse.org/cdo
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/app.properties b/org.eclipse.emf.cdo.tests.hibernate/bin/app.properties
new file mode 100644
index 0000000..1ecf9eb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/app.properties
@@ -0,0 +1,35 @@
+# Teneo options
+teneo.mapping.set_proxy=true
+teneo.mapping.cascade_policy_on_non_containment=PERSIST,MERGE
+teneo.mapping.persistence_xml.parse.lenient=true
+teneo.runtime.elist_efficient_size_operation=true
+
+# Hibernate options
+hibernate.hbm2ddl.auto=create-drop
+hibernate.show_sql=false
+hibernate.connection.pool_size=10
+
+# -----------------------------------------------------------
+# DEFAULT SETTINGS FOR IN MEMORY HSQLDB DATABASE.
+#
+
+#hibernate.dialect=org.hibernate.dialect.H2Dialect
+#hibernate.connection.driver_class=org.h2.Driver
+#hibernate.connection.url=jdbc:h2:_database/repo1
+
+hibernate.dialect=org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class=org.hsqldb.jdbcDriver
+hibernate.connection.url=jdbc:hsqldb:mem:cdohibernate
+hibernate.connection.username=sa
+hibernate.connection.password=
+hibernate.connection.autocommit=true
+hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
+
+#--------------------------------------------------------------
+# EXAMPLE SETTING FOR MYSQL DATABASE. UNCOMMENT AND EDIT TO USE.
+#
+#hibernate.connection.driver_class=com.mysql.jdbc.Driver
+#hibernate.connection.url=jdbc:mysql://localhost:3306/cdohibernate
+#hibernate.connection.username=root
+#hibernate.connection.password=root
+#hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/log4j.properties b/org.eclipse.emf.cdo.tests.hibernate/bin/log4j.properties
new file mode 100644
index 0000000..b956a8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/log4j.properties
@@ -0,0 +1,44 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+log4j.category.JPOX=OFF
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Activator.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Activator.class
new file mode 100644
index 0000000..c202c93
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Activator.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernatePackageRegistryTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernatePackageRegistryTest.class
new file mode 100644
index 0000000..1bc7c72
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernatePackageRegistryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateTransactionTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateTransactionTest.class
new file mode 100644
index 0000000..a2f631c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateTransactionTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateUnsetTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateUnsetTest.class
new file mode 100644
index 0000000..94f4172
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$HibernateUnsetTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_BackupTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_BackupTest.class
new file mode 100644
index 0000000..12b604b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_BackupTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_279982_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_279982_Test.class
new file mode 100644
index 0000000..facb3a4
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_279982_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_303466_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_303466_Test.class
new file mode 100644
index 0000000..bb0f185
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_303466_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_329254_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_329254_Test.class
new file mode 100644
index 0000000..9e3dcda
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate$Hibernate_Bugzilla_329254_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.class
new file mode 100644
index 0000000..3000101
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.class
new file mode 100644
index 0000000..d91af43
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.class
new file mode 100644
index 0000000..1586afc
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.class
new file mode 100644
index 0000000..7733bc1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.class
new file mode 100644
index 0000000..84a7437
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.class
new file mode 100644
index 0000000..0c0c716
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.class
new file mode 100644
index 0000000..72d1ba0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.class
new file mode 100644
index 0000000..3e524dd
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.class
new file mode 100644
index 0000000..1b9249b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.class
new file mode 100644
index 0000000..27c58be
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.class
new file mode 100644
index 0000000..d3db194
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.class
new file mode 100644
index 0000000..bfb6522
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.class
new file mode 100644
index 0000000..00f0536
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.class
new file mode 100644
index 0000000..0e22006
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.class
new file mode 100644
index 0000000..1380950
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.class
new file mode 100644
index 0000000..446801c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.class
new file mode 100644
index 0000000..59ed919
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.class
new file mode 100644
index 0000000..335625d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.class
new file mode 100644
index 0000000..99f0844
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.class
new file mode 100644
index 0000000..b316ac8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.class
new file mode 100644
index 0000000..64a5537
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.class
new file mode 100644
index 0000000..8ca5fb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.class
new file mode 100644
index 0000000..d41a82a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.class
new file mode 100644
index 0000000..5b1593a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.class
new file mode 100644
index 0000000..b2bdfe6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.class
new file mode 100644
index 0000000..d45bf36
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.class
new file mode 100644
index 0000000..1dbfa3a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.class
new file mode 100644
index 0000000..31b4c52
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.class
new file mode 100644
index 0000000..1601785
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.class
new file mode 100644
index 0000000..e905ba1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.class
new file mode 100644
index 0000000..81ea556
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.class
new file mode 100644
index 0000000..dd5d105
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.class
new file mode 100644
index 0000000..82e0e51
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.class
new file mode 100644
index 0000000..9acfbeb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.class
new file mode 100644
index 0000000..b7359d2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.class
new file mode 100644
index 0000000..765d300
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml
new file mode 100644
index 0000000..d180ab0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<persistence-mapping xmlns="http://www.eclipse.org/emft/teneo"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model6/1.0.0">
+
+		<eclass name="UnsettableAttributes">
+			<property name="attrJavaClass">
+				<type type="string"/>
+			</property>
+		</eclass>
+
+		<eclass name="RefSingleNonContainedNPL">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+	
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model4/1.0.0">
+
+		<eclass name="GenRefSingleNonContained">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+
+		<eclass name="RefSingleNonContainedNPL">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model1/1.0.0">
+
+		<eclass name="Company">
+			<property name="customers">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="SalesOrder">
+			<property name="customer">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="PurchaseOrder">
+			<property name="supplier">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="Supplier">
+			<property name="purchaseOrders">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+
+</persistence-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.class
new file mode 100644
index 0000000..dfe5ef9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.class
new file mode 100644
index 0000000..8ac9ba2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.class
new file mode 100644
index 0000000..c21ffb2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.class
new file mode 100644
index 0000000..44e90c0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.class
new file mode 100644
index 0000000..66408f0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.class
new file mode 100644
index 0000000..402cf17
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.class
new file mode 100644
index 0000000..a68ec81
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.class
new file mode 100644
index 0000000..f59751a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.class
new file mode 100644
index 0000000..125c265
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.class
new file mode 100644
index 0000000..0e0dac9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.class
new file mode 100644
index 0000000..06da32a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.class
new file mode 100644
index 0000000..1463891
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.class
new file mode 100644
index 0000000..c656371
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.class
new file mode 100644
index 0000000..f16eeb5
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.class
new file mode 100644
index 0000000..064c576
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage$Literals.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage$Literals.class
new file mode 100644
index 0000000..33050ef
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage$Literals.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.class
new file mode 100644
index 0000000..55b307c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.class
new file mode 100644
index 0000000..b144c6f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.class
new file mode 100644
index 0000000..e00fb6d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.class
new file mode 100644
index 0000000..9d4706e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.class
new file mode 100644
index 0000000..208e0d9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.class
new file mode 100644
index 0000000..a3988eb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.class
new file mode 100644
index 0000000..588bf17
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.class
new file mode 100644
index 0000000..7fbb6d6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.class
new file mode 100644
index 0000000..39a8725
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.class
new file mode 100644
index 0000000..e82ac3f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.class
new file mode 100644
index 0000000..e85cdb6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.class
new file mode 100644
index 0000000..6bbe98b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.class
new file mode 100644
index 0000000..b003005
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.class
new file mode 100644
index 0000000..e7ce9c6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.class
new file mode 100644
index 0000000..2424395
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.class
new file mode 100644
index 0000000..ec2640c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory$1.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory$1.class
new file mode 100644
index 0000000..37d5720
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory$1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.class
new file mode 100644
index 0000000..b147fb8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.class b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.class
new file mode 100644
index 0000000..8dd1a59
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/bin/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/build.properties b/org.eclipse.emf.cdo.tests.hibernate/build.properties
new file mode 100644
index 0000000..e5496ed
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/build.properties
@@ -0,0 +1,30 @@
+# Copyright (c) 2008-2010, 2012, 2013, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               about.html,\
+               plugin.properties,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               modeling32.png,\
+               src/log4j.properties,\
+               src/app.properties,\
+               src/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml
+src.includes = about.html,\
+               HibernateServer.launch,\
+               pom.xml
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.ecore b/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.ecore
new file mode 100644
index 0000000..1fd8727
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.ecore
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="HibernateTest" nsURI="http://org.eclipse.emf.cdo.tests.hibernate"
+    nsPrefix="hibernatetests">
+  <eClassifiers xsi:type="ecore:EClass" name="Bz356181_Main">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="teneo.jpa">
+        <details key="value" value="@Transient"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nonTransient" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="transientRef" eType="#//Bz356181_Transient"
+        transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="transientOtherRef" eType="#//Bz356181_NonTransient"
+        transient="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz356181_Transient">
+    <eAnnotations source="teneo.jpa">
+      <details key="value" value="@Transient"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz356181_NonTransient">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="main" eType="#//Bz356181_Main"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz387752_Main">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="strUnsettable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="def_value" unsettable="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="strSettable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="value"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="enumSettable" eType="#//Bz387752_Enum"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="enumUnsettable" eType="#//Bz387752_Enum"
+        defaultValueLiteral="VAL1" unsettable="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="Bz387752_Enum">
+    <eLiterals name="VAL0"/>
+    <eLiterals name="VAL1" value="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz380987_Group">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="people" upperBound="-1"
+        eType="#//Bz380987_Person" eOpposite="#//Bz380987_Person/group"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz380987_Place">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="people" upperBound="-1"
+        eType="#//Bz380987_Person" eOpposite="#//Bz380987_Person/places"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz380987_Person">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="group" upperBound="-1"
+        eType="#//Bz380987_Group" eOpposite="#//Bz380987_Group/people"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="places" upperBound="-1"
+        eType="#//Bz380987_Place" eOpposite="#//Bz380987_Place/people"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz398057A">
+    <eAnnotations source="teneo.jpa">
+      <details key="value" value="@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="listOfB" upperBound="-1"
+        eType="#//Bz398057B" containment="true" eOpposite="#//Bz398057B/refToClassA"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="teneo.jpa">
+        <details key="value" value="@Id"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz398057A1" eSuperTypes="#//Bz398057A"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz398057B">
+    <eAnnotations source="teneo.jpa">
+      <details key="value" value="@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refToClassA" eType="#//Bz398057A"
+        eOpposite="#//Bz398057A/listOfB"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="teneo.jpa">
+        <details key="value" value="@Id"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz398057B1" eSuperTypes="#//Bz398057B">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="valueStr" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz397682P">
+    <eAnnotations source="teneo.jpa">
+      <details key="value" value="@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="teneo.jpa">
+        <details key="value" value="@Id"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="listOfC" upperBound="-1"
+        eType="#//Bz397682C" containment="true" eOpposite="#//Bz397682C/refToP"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Bz397682C">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refToP" eType="#//Bz397682P"
+        eOpposite="#//Bz397682P/listOfC"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refToC" eType="#//Bz397682C"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dbId" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+      <eAnnotations source="teneo.jpa">
+        <details key="value" value="@Id"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.genmodel b/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.genmodel
new file mode 100644
index 0000000..472d193
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/model/hibernate-test.genmodel
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.emf.cdo.tests.hibernate/src" modelPluginID="org.eclipse.emf.cdo.tests.hibernate"
+    modelName="Hibernate-test" importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0"
+    copyrightFields="false">
+  <foreignModel>hibernate-test.ecore</foreignModel>
+  <genPackages prefix="HibernateTest" basePackage="org.eclipse.emf.cdo.tests.hibernate.model"
+      disposableProviderFactory="true" ecorePackage="hibernate-test.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="hibernate-test.ecore#//Bz387752_Enum">
+      <genEnumLiterals ecoreEnumLiteral="hibernate-test.ecore#//Bz387752_Enum/VAL0"/>
+      <genEnumLiterals ecoreEnumLiteral="hibernate-test.ecore#//Bz387752_Enum/VAL1"/>
+    </genEnums>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz356181_Main">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz356181_Main/transient"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz356181_Main/nonTransient"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz356181_Main/transientRef"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz356181_Main/transientOtherRef"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz356181_Transient"/>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz356181_NonTransient">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz356181_NonTransient/main"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz387752_Main">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz387752_Main/strUnsettable"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz387752_Main/strSettable"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz387752_Main/enumSettable"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz387752_Main/enumUnsettable"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz380987_Group">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz380987_Group/people"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz380987_Place">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz380987_Place/name"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz380987_Place/people"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz380987_Person">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz380987_Person/name"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz380987_Person/group"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz380987_Person/places"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz398057A">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz398057A/listOfB"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz398057A/dbId"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz398057A1"/>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz398057B">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz398057B/refToClassA"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz398057B/value"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz398057B/dbId"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz398057B1">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz398057B1/valueStr"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz397682P">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz397682P/dbId"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz397682P/listOfC"/>
+    </genClasses>
+    <genClasses ecoreClass="hibernate-test.ecore#//Bz397682C">
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz397682C/refToP"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference hibernate-test.ecore#//Bz397682C/refToC"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute hibernate-test.ecore#//Bz397682C/dbId"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/modeling32.png b/org.eclipse.emf.cdo.tests.hibernate/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/modeling32.png
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.hibernate/plugin.properties b/org.eclipse.emf.cdo.tests.hibernate/plugin.properties
new file mode 100644
index 0000000..00dd3a0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/plugin.properties
@@ -0,0 +1,11 @@
+# Copyright (c) 2008-2010, 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Server Hibernate Tests
+providerName = Eclipse Modeling Project
diff --git a/org.eclipse.emf.cdo.tests.hibernate/plugin.xml b/org.eclipse.emf.cdo.tests.hibernate/plugin.xml
new file mode 100644
index 0000000..2c935d1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+	Copyright (c) 2012 Eike Stepper (Loehne, Germany) and others.
+	All rights reserved. This program and the accompanying materials
+	are made available under the terms of the Eclipse Public License v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+	  Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http://org.eclipse.emf.cdo.tests.hibernate"
+            class="org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage"
+            genModel="model/hibernate-test.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/pom.xml b/org.eclipse.emf.cdo.tests.hibernate/pom.xml
new file mode 100644
index 0000000..9d71d35
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017, 2018 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.tests.hibernate</artifactId>
+  <version>4.1.700-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/app.properties b/org.eclipse.emf.cdo.tests.hibernate/src/app.properties
new file mode 100644
index 0000000..1ecf9eb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/app.properties
@@ -0,0 +1,35 @@
+# Teneo options
+teneo.mapping.set_proxy=true
+teneo.mapping.cascade_policy_on_non_containment=PERSIST,MERGE
+teneo.mapping.persistence_xml.parse.lenient=true
+teneo.runtime.elist_efficient_size_operation=true
+
+# Hibernate options
+hibernate.hbm2ddl.auto=create-drop
+hibernate.show_sql=false
+hibernate.connection.pool_size=10
+
+# -----------------------------------------------------------
+# DEFAULT SETTINGS FOR IN MEMORY HSQLDB DATABASE.
+#
+
+#hibernate.dialect=org.hibernate.dialect.H2Dialect
+#hibernate.connection.driver_class=org.h2.Driver
+#hibernate.connection.url=jdbc:h2:_database/repo1
+
+hibernate.dialect=org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class=org.hsqldb.jdbcDriver
+hibernate.connection.url=jdbc:hsqldb:mem:cdohibernate
+hibernate.connection.username=sa
+hibernate.connection.password=
+hibernate.connection.autocommit=true
+hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
+
+#--------------------------------------------------------------
+# EXAMPLE SETTING FOR MYSQL DATABASE. UNCOMMENT AND EDIT TO USE.
+#
+#hibernate.connection.driver_class=com.mysql.jdbc.Driver
+#hibernate.connection.url=jdbc:mysql://localhost:3306/cdohibernate
+#hibernate.connection.username=root
+#hibernate.connection.password=root
+#hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/log4j.properties b/org.eclipse.emf.cdo.tests.hibernate/src/log4j.properties
new file mode 100644
index 0000000..b956a8a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/log4j.properties
@@ -0,0 +1,44 @@
+# Set root logger level to error and its only appender to A1.
+log4j.rootCategory=error, A1
+
+log4j.category.JPOX=OFF
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+#log4j.logger.org.hibernate=error
+log4j.logger.org.hibernate=error
+#org.hibernate.pretty
+
+### log HQL query parser activity
+log4j.logger.org.hibernate.hql.ast.AST=error
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=error
+
+### log JDBC bind parameters ###
+log4j.logger.org.hibernate.type=error
+#log4j.logger.org.hibernate.type=error
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=error
+
+### log HQL parse trees
+log4j.logger.org.hibernate.hql=error
+
+### log cache activity ###
+log4j.logger.org.hibernate.cache=error
+
+### log transaction activity
+log4j.logger.org.hibernate.transaction=error
+
+### log JDBC resource acquisition
+log4j.logger.org.hibernate.jdbc=error
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=error
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Activator.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Activator.java
new file mode 100644
index 0000000..1dce219
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Activator.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2008, 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.core.runtime.Plugin;
+
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author Eike Stepper
+ */
+public class Activator extends Plugin
+{
+  public static final String PLUGIN_ID = "org.eclipse.emf.cdo.tests.hibernate";
+
+  private static Activator plugin;
+
+  public Activator()
+  {
+  }
+
+  @Override
+  public void start(BundleContext context) throws Exception
+  {
+    super.start(context);
+    plugin = this;
+  }
+
+  @Override
+  public void stop(BundleContext context) throws Exception
+  {
+    plugin = null;
+    super.stop(context);
+  }
+
+  public static Activator getDefault()
+  {
+    return plugin;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java
new file mode 100644
index 0000000..0973ec5
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AllTestsHibernate.java
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2008-2014, 2016, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.AllConfigs;
+import org.eclipse.emf.cdo.tests.AttributeTest;
+import org.eclipse.emf.cdo.tests.BackupTest;
+import org.eclipse.emf.cdo.tests.CommitInfoTest;
+import org.eclipse.emf.cdo.tests.CrossReferenceTest;
+import org.eclipse.emf.cdo.tests.DynamicXSDTest;
+import org.eclipse.emf.cdo.tests.EMFCompareTest;
+import org.eclipse.emf.cdo.tests.ExternalReferenceTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartRepositoryTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartSessionTest;
+import org.eclipse.emf.cdo.tests.LockingManagerRestartTransactionTest;
+import org.eclipse.emf.cdo.tests.LockingManagerTest;
+import org.eclipse.emf.cdo.tests.LockingNotificationsTest;
+import org.eclipse.emf.cdo.tests.MEMStoreQueryTest;
+import org.eclipse.emf.cdo.tests.MultiValuedOfAttributeTest;
+import org.eclipse.emf.cdo.tests.OCLQueryTest;
+import org.eclipse.emf.cdo.tests.PackageRegistryTest;
+import org.eclipse.emf.cdo.tests.SecurityTest;
+import org.eclipse.emf.cdo.tests.TransactionTest;
+import org.eclipse.emf.cdo.tests.UnsetTest;
+import org.eclipse.emf.cdo.tests.WorkspaceTest;
+import org.eclipse.emf.cdo.tests.XATransactionTest;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_258933_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_272861_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_279982_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_303466_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_306998_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_322804_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_329254_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_334995_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_347964_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_351393_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_352204_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_359966_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_362270_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_362270b_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_362270c_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_365832_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_381472_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_390185_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_400236_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_405191_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_416474_Test;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.IScenario;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Eike Stepper
+ */
+public class AllTestsHibernate extends AllConfigs
+{
+  public static Test suite()
+  {
+    return new AllTestsHibernate().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, HibernateConfig.INSTANCE, JVM, NATIVE);
+    addScenario(parent, HibernateConfig.AUDIT_INSTANCE, JVM, NATIVE);
+  }
+
+  @Override
+  protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
+  {
+    // testClasses.clear();
+    // testClasses.add(HibernateBugzilla_417797_Test.class);
+    // if (true)
+    // {
+    // return;
+    // }
+
+    super.initTestClasses(testClasses, scenario);
+
+    // TODO: find out why this does not work for non-auditing
+    if (scenario.getRepositoryConfig().supportingAudits())
+    {
+      testClasses.add(HibernateBugzilla_380987_Test.class);
+    }
+
+    testClasses.add(HibernateChunkingTest.class);
+    testClasses.add(Hibernate_Failure_Test.class);
+    testClasses.add(Hibernate_Export_Test.class);
+    testClasses.add(HibernateBugzilla_381013_Test.class);
+    testClasses.add(HibernateBugzilla_417797_Test.class);
+
+    testClasses.add(HibernateBugzilla_392653_Test.class);
+    testClasses.add(HibernateBugzilla_387752_Test.class);
+    testClasses.add(HibernateBugzilla_387752_True_Test.class);
+
+    testClasses.add(HibernateBugzilla_333473_Test.class);
+
+    testClasses.add(HibernateTimeStampTest.class);
+    // removed stalls
+    // testClasses.add(HibernateXATransactionTest.class);
+    testClasses.add(HibernateExternalAnnotationTest.class);
+    testClasses.add(HibernateQueryTest.class);
+    testClasses.add(HibernateQueryNoCachingTest.class);
+    testClasses.add(HibernateBugzilla_301104_Test.class);
+
+    // this bugzilla persists an ecore package, not
+    // supported without extra annotations.
+    testClasses.remove(Bugzilla_416474_Test.class);
+
+    testClasses.remove(TransactionTest.class);
+    testClasses.add(HibernateTransactionTest.class);
+
+    // remove as it tries to persist an eannotation
+    testClasses.remove(Bugzilla_400236_Test.class);
+
+    testClasses.add(HibernateBugzilla_362270b_Test.class);
+    testClasses.remove(Bugzilla_362270b_Test.class);
+
+    testClasses.add(HibernateBugzilla_362270c_Test.class);
+    testClasses.remove(Bugzilla_362270c_Test.class);
+
+    testClasses.add(HibernateBugzilla_405191_Test.class);
+    testClasses.remove(Bugzilla_405191_Test.class);
+
+    // for some reason this test needs to be done first...
+    testClasses.remove(Bugzilla_306998_Test.class);
+    testClasses.add(0, Bugzilla_306998_Test.class);
+
+    testClasses.remove(CrossReferenceTest.class);
+    testClasses.add(HibernateCrossReferenceTest.class);
+
+    testClasses.add(HibernateBugzilla_356181_Test.class);
+
+    // the hb store throws an error on deadlocked transaction
+    // and does not block
+    testClasses.remove(Bugzilla_390185_Test.class);
+
+    testClasses.add(HibernateBugzilla_398057_Test.class);
+    testClasses.add(HibernateBugzilla_397682_Test.class);
+
+    testClasses.add(HibernateBugzilla_416530_Test.class);
+
+    // not supported specific OCL operations
+    // TODO: research this
+    testClasses.remove(Bugzilla_416474_Test.class);
+
+    if (scenario.getRepositoryConfig().supportingAudits())
+    {
+      // need to add additional auditing annotations
+      testClasses.remove(HibernateBugzilla_405191_Test.class);
+
+      // stalls in case of auditing
+      // TODO: research this
+      testClasses.remove(OCLQueryTest.class);
+      testClasses.remove(OCLQueryTest.Lazy.class);
+
+      testClasses.add(HibernateBugzilla_395684_Test.class);
+
+      testClasses.add(CDOObjectHistoryTest.class);
+
+      // the security model inherits from the ecore model
+      // not so well supported for now for auditing
+      testClasses.remove(SecurityTest.class);
+
+      // the package registry count changes when auditing
+      // as auditing adds epackages
+      testClasses.remove(PackageRegistryTest.class);
+      testClasses.add(HibernatePackageRegistryTest.class);
+      testClasses.remove(Bugzilla_303466_Test.class);
+      testClasses.add(Hibernate_Bugzilla_303466_Test.class);
+
+      // feature maps are not handled correctly in CDO with auditing
+      // testClasses.remove(FeatureMapTest.class);
+    }
+    else
+    {
+      // these testcases uses commitinfo
+      // only supported with auditing
+      testClasses.remove(Bugzilla_329254_Test.class);
+      testClasses.remove(Hibernate_Bugzilla_329254_Test.class);
+
+      // Commit info only works with auditing
+      testClasses.remove(CommitInfoTest.class);
+    }
+
+    // renaming a resource is not possible in the hibernate store.
+    testClasses.remove(Bugzilla_334995_Test.class);
+
+    // repository restart is not supported in the hibernate store
+    // as it clears the database
+    testClasses.remove(Bugzilla_347964_Test.class);
+
+    // workspaces are not supported
+    testClasses.remove(WorkspaceTest.class);
+
+    testClasses.remove(DynamicXSDTest.class);
+
+    // delete repo is not yet supported
+    testClasses.remove(Bugzilla_381472_Test.class);
+
+    testClasses.remove(Bugzilla_362270_Test.class);
+
+    // persisting models in a resource is not supported
+    testClasses.remove(Bugzilla_365832_Test.class);
+    testClasses.remove(Bugzilla_352204_Test.class);
+    testClasses.remove(Bugzilla_359966_Test.class);
+
+    // external reference in a resource not supported
+    testClasses.remove(Bugzilla_351393_Test.class);
+
+    // hibernate does not support persisting
+    // java class and object
+    testClasses.add(HibernateAttributeTest.class);
+    testClasses.remove(AttributeTest.class);
+
+    // Use a hibernate specific test class
+    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=339492
+    testClasses.add(Hibernate_BackupTest.class);
+    testClasses.remove(BackupTest.class);
+
+    // Teneo does not yet support lists of int arrays:
+    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=330212
+    testClasses.remove(Bugzilla_322804_Test.class);
+
+    // overridden because Hibernate will treat all stale references as an exception
+    testClasses.add(Hibernate_Bugzilla_279982_Test.class);
+    testClasses.remove(Bugzilla_279982_Test.class);
+
+    // locking not supported
+    testClasses.remove(LockingManagerRestartRepositoryTest.class);
+    testClasses.remove(LockingManagerRestartSessionTest.class);
+    testClasses.remove(LockingManagerRestartTransactionTest.class);
+    testClasses.remove(LockingNotificationsTest.class);
+    testClasses.remove(LockingManagerRestartRepositoryTest.class);
+
+    // Locking manager not supported
+    testClasses.remove(LockingManagerTest.class);
+
+    // problem with wrong version of EMF Compare
+    testClasses.remove(EMFCompareTest.class);
+
+    // replace a test with our local implementation:
+    // the MultiValueOfAttributeTest class has a method
+    // testListOfInteger which has a List with a null value
+    // this is not nicely supported by Hibernate
+    // therefore this step is removed
+    testClasses.add(HibernateMultiValuedOfAttributeTest.class);
+    testClasses.remove(MultiValuedOfAttributeTest.class);
+
+    // MemStore is not relevant
+    testClasses.remove(MEMStoreQueryTest.class);
+
+    // replace test case to do external mapping
+    testClasses.remove(XATransactionTest.class);
+
+    // replace test case with one, disabling some non working testcases
+    // see the HibernateExternalReferenceTest for a description
+    testClasses.add(HibernateExternalReferenceTest.class);
+    testClasses.remove(ExternalReferenceTest.class);
+
+    // this testcases removes and creates a resource with the
+    // same path in one transaction, that's not supported
+    // by hibernate.. because of unique key constraints
+    testClasses.remove(Bugzilla_272861_Test.class);
+
+    // override a testcase because the hibernate store
+    // has a different meaning of unset
+    testClasses.add(HibernateBugzilla_258933_Test.class);
+    testClasses.remove(Bugzilla_258933_Test.class);
+
+    // replace as unsettable has to be re-visited for the hb store
+    // see Bug 298579, it does not work for object types
+    testClasses.add(HibernateUnsetTest.class);
+    testClasses.remove(UnsetTest.class);
+  }
+
+  /**
+   * Overridden because one testcase does not pass as Hibernate currently does not store the isset boolean values in the
+   * database.
+   *
+   * @author Eike Stepper
+   */
+  public static class HibernateUnsetTest extends UnsetTest
+  {
+    @Override
+    public void testUnsettableBaseTypeVsObjectType()
+    {
+    }
+  }
+
+  public static class HibernatePackageRegistryTest extends PackageRegistryTest
+  {
+
+    @Override
+    public void testCommitNestedPackages() throws Exception
+    {
+    }
+
+    @Override
+    public void testCommitTopLevelPackages() throws Exception
+    {
+    }
+  }
+
+  // overridden because Hibernate will treat all stale references as an exception
+  public static class Hibernate_Bugzilla_279982_Test extends Bugzilla_279982_Test
+  {
+    @Override
+    public void testBugzilla_279982_Single() throws Exception
+    {
+      try
+      {
+        super.testBugzilla_279982_Single();
+      }
+      catch (Exception e)
+      {
+        assertEquals(true, e instanceof CommitException);
+        assertEquals(true, e.getMessage().contains("org.hibernate.ObjectNotFoundException"));
+      }
+    }
+
+    @Override
+    public void testBugzilla_279982_Multi_RevisionPrefetchingPolicy() throws Exception
+    {
+      try
+      {
+        super.testBugzilla_279982_Multi_RevisionPrefetchingPolicy();
+      }
+      catch (Exception e)
+      {
+        assertEquals(true, e instanceof CommitException);
+        assertEquals(true, e.getMessage().contains("org.hibernate.ObjectNotFoundException"));
+      }
+    }
+  }
+
+  public static class Hibernate_BackupTest extends BackupTest
+  {
+
+    @Override
+    protected void doSetUp() throws Exception
+    {
+      final IRepositoryConfig repConfig = getRepositoryConfig();
+      final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+      final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+      hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+      super.doSetUp();
+    }
+
+    @Override
+    protected void doTearDown() throws Exception
+    {
+      final IRepositoryConfig repConfig = getRepositoryConfig();
+      final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+      hbConfig.getAdditionalProperties().clear();
+      super.doTearDown();
+    }
+  }
+
+  public static class Hibernate_Bugzilla_303466_Test extends Bugzilla_303466_Test
+  {
+
+    @Override
+    public void test_missingDependency() throws Exception
+    {
+    }
+
+  }
+
+  public static class Hibernate_Bugzilla_329254_Test extends Bugzilla_329254_Test
+  {
+
+    // does not work for non audited cases
+    @Override
+    public void testCommitTimeStampUpdateOnError() throws Exception
+    {
+    }
+
+  }
+
+  public static class HibernateTransactionTest extends TransactionTest
+  {
+
+    // fails with timeout exceptions, ignore testcase for now
+    @Override
+    public void testCreateManySessionsAndTransactionsMultiThread() throws Exception
+    {
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.java
new file mode 100644
index 0000000..b68bed9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/AuditFeatureMapTest.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2012, 2015, 2016, 2018 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Eike Stepper - maintenance
+ *    Stefan Winkler - enhanced test cases
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.model5.Doctor;
+import org.eclipse.emf.cdo.tests.model5.Manager;
+import org.eclipse.emf.cdo.tests.model5.TestFeatureMap;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * NOTE: this testcase does not pass currently for CDO.
+ *
+ * @author Simon McDuff
+ * @Author Martin Taal
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+@Deprecated
+public class AuditFeatureMapTest extends AbstractCDOTest
+{
+
+  @Skips("Postgresql")
+  public void _testFeatureMaps() throws Exception
+  {
+    skipStoreWithoutFeatureMaps();
+
+    EReference doctorFeature = getModel5Package().getTestFeatureMap_Doctors();
+    EReference managerFeature = getModel5Package().getTestFeatureMap_Managers();
+
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+
+    TestFeatureMap featureMap = getModel5Factory().createTestFeatureMap();
+    resource.getContents().add(featureMap);
+    FeatureMap people = featureMap.getPeople();
+
+    Map<Long, Map<EStructuralFeature, Class<?>>> checkResult = new HashMap<Long, Map<EStructuralFeature, Class<?>>>();
+
+    {
+      long commitTime = transaction.commit().getTimeStamp();
+      addToResultMap(commitTime, checkResult, people);
+    }
+
+    // add a few of them
+    {
+      Manager manager1 = getModel5Factory().createManager();
+      Doctor doctor1 = getModel5Factory().createDoctor();
+      Manager manager2 = getModel5Factory().createManager();
+      Doctor doctor2 = getModel5Factory().createDoctor();
+
+      resource.getContents().add(doctor1);
+      resource.getContents().add(doctor2);
+      resource.getContents().add(manager1);
+      resource.getContents().add(manager2);
+
+      people.add(managerFeature, manager1);
+      people.add(doctorFeature, doctor1);
+      people.add(managerFeature, manager2);
+      people.add(doctorFeature, doctor2);
+      long commitTime = transaction.commit().getTimeStamp();
+      addToResultMap(commitTime, checkResult, people);
+    }
+
+    // delete one
+    {
+      people.remove(1);
+      long commitTime = transaction.commit().getTimeStamp();
+      addToResultMap(commitTime, checkResult, people);
+    }
+
+    // add a few of them
+    {
+      Manager manager1 = getModel5Factory().createManager();
+      Doctor doctor1 = getModel5Factory().createDoctor();
+      Manager manager2 = getModel5Factory().createManager();
+      Doctor doctor2 = getModel5Factory().createDoctor();
+
+      resource.getContents().add(doctor1);
+      resource.getContents().add(doctor2);
+      resource.getContents().add(manager1);
+      resource.getContents().add(manager2);
+
+      people.add(managerFeature, manager1);
+      people.add(doctorFeature, doctor1);
+      people.add(managerFeature, manager2);
+      people.add(doctorFeature, doctor2);
+      long commitTime = transaction.commit().getTimeStamp();
+      addToResultMap(commitTime, checkResult, people);
+    }
+
+    // check it all
+    for (long timeStamp : checkResult.keySet())
+    {
+      CDOView audit = session.openView(timeStamp);
+      {
+        CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+        TestFeatureMap testFeatureMap = (TestFeatureMap)auditResource.getContents().get(0);
+        checkFeatureMap(testFeatureMap.getPeople(), checkResult.get(timeStamp));
+      }
+    }
+  }
+
+  private void addToResultMap(long timeStamp, Map<Long, Map<EStructuralFeature, Class<?>>> result, FeatureMap featureMap)
+  {
+    final Map<EStructuralFeature, Class<?>> entryResult = new HashMap<EStructuralFeature, Class<?>>();
+    result.put(timeStamp, entryResult);
+    for (FeatureMap.Entry entry : featureMap)
+    {
+      entryResult.put(entry.getEStructuralFeature(), entry.getValue().getClass());
+    }
+  }
+
+  private void checkFeatureMap(FeatureMap featureMap, Map<EStructuralFeature, Class<?>> checkMap)
+  {
+    assertEquals(featureMap.size(), checkMap.size());
+    for (EStructuralFeature eFeature : checkMap.keySet())
+    {
+      final Object value = checkMap.get(eFeature);
+      assertEquals(value.getClass(), featureMap.get(eFeature, true).getClass());
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java
new file mode 100644
index 0000000..27418dc
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/CDOObjectHistoryTest.java
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) 2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.CDOObjectHistory;
+import org.eclipse.emf.cdo.common.commit.CDOCommitHistory;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.revision.CDOIDAndVersion;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
+import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.Model1Package;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.tests.model1.VAT;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.teneo.Constants;
+
+import java.util.List;
+
+/**
+ * @author Martin Taal
+ * @author Eike Stepper
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class CDOObjectHistoryTest extends AbstractCDOTest
+{
+  protected CDOSession session1;
+
+  @Override
+  public void setUp() throws Exception
+  {
+    if (Model1Package.eINSTANCE.getProduct1_Vat().getEAnnotation(Constants.ANNOTATION_SOURCE_TENEO_JPA) == null)
+    {
+      final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+      eAnnotation.setSource(Constants.ANNOTATION_SOURCE_TENEO_JPA);
+      eAnnotation.getDetails().put(Constants.ANNOTATION_KEY_VALUE, "@Enumerated(value=EnumType.ORDINAL)");
+      Model1Package.eINSTANCE.getProduct1_Vat().getEAnnotations().add(eAnnotation);
+    }
+
+    super.setUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    LifecycleUtil.deactivate(session1);
+    session1 = null;
+    super.doTearDown();
+  }
+
+  protected CDOSession openSession1()
+  {
+    session1 = openSession();
+    return session1;
+  }
+
+  protected void closeSession1()
+  {
+    session1.close();
+  }
+
+  protected CDOSession openSession2()
+  {
+    return openSession();
+  }
+
+  public void testChangedAudit() throws Exception
+  {
+    CDOSession session = openSession1();
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+
+    Company company = getModel1Factory().createCompany();
+    company.setName("ESC");
+    resource.getContents().add(company);
+
+    // add a product
+    Product1 product = getModel1Factory().createProduct1();
+    product.setVat(VAT.VAT15);
+    product.setDescription("description");
+    resource.getContents().add(product);
+
+    long commitTime1 = transaction.commit().getTimeStamp();
+    assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1);
+    assertEquals("ESC", company.getName());
+    final CDOObject cdoObjectCompany = CDOUtil.getCDOObject(company);
+    assertEquals(1, cdoObjectCompany.cdoRevision().getVersion());
+
+    company.setName("Sympedia");
+    long commitTime2 = transaction.commit().getTimeStamp();
+    assertEquals(true, commitTime1 < commitTime2);
+    assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
+    assertEquals("Sympedia", company.getName());
+    assertEquals(2, cdoObjectCompany.cdoRevision().getVersion());
+
+    company.setName("Eclipse");
+    long commitTime3 = transaction.commit().getTimeStamp();
+    assertEquals(true, commitTime2 < commitTime3);
+    assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
+    assertEquals("Eclipse", company.getName());
+    assertEquals(3, cdoObjectCompany.cdoRevision().getVersion());
+
+    resource.getContents().remove(company);
+    long commitTime4 = transaction.commit().getTimeStamp();
+
+    closeSession1();
+    session = openSession2();
+
+    CDOView audit = session.openView(commitTime1);
+    {
+      CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+      Company auditCompany = (Company)auditResource.getContents().get(0);
+      assertEquals("ESC", auditCompany.getName());
+
+      final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+      assertEquals(1, cdoObjectHistory.getElements().length);
+      for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+      {
+        if (cdoCommitInfo.getTimeStamp() == commitTime1)
+        {
+          checkCommitInfo1(cdoCommitInfo);
+        }
+        else
+        {
+          fail();
+        }
+      }
+      audit.close();
+    }
+
+    audit = session.openView(commitTime2);
+    {
+      CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+      Company auditCompany = (Company)auditResource.getContents().get(0);
+      assertEquals("Sympedia", auditCompany.getName());
+
+      final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+      assertEquals(2, cdoObjectHistory.getElements().length);
+      for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+      {
+        if (cdoCommitInfo.getTimeStamp() == commitTime1)
+        {
+          checkCommitInfo1(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+        {
+          checkCommitInfo2(cdoCommitInfo);
+        }
+        else
+        {
+          fail();
+        }
+      }
+      audit.close();
+    }
+
+    audit = session.openView(commitTime3);
+    {
+      CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
+
+      Company auditCompany = (Company)auditResource.getContents().get(0);
+      assertEquals("Eclipse", auditCompany.getName());
+
+      final CDOObjectHistory cdoObjectHistory = getCDOObjectHistory(audit, auditCompany);
+      assertEquals(3, cdoObjectHistory.getElements().length);
+      for (CDOCommitInfo cdoCommitInfo : cdoObjectHistory.getElements())
+      {
+        if (cdoCommitInfo.getTimeStamp() == commitTime1)
+        {
+          checkCommitInfo1(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+        {
+          checkCommitInfo2(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime3)
+        {
+          checkCommitInfo3(cdoCommitInfo);
+        }
+        else
+        {
+          fail();
+        }
+      }
+
+      final CDOObject cdoObject = CDOUtil.getCDOObject(auditCompany);
+      int initialVersion = cdoObject.cdoRevision().getVersion();
+      assertEquals(3, initialVersion);
+
+      final InternalCDORevision revision3 = (InternalCDORevision)CDOUtil.getRevisionByVersion(cdoObject, 3);
+      final InternalCDORevision revision2 = (InternalCDORevision)CDOUtil.getRevisionByVersion(cdoObject, 2);
+      final InternalCDORevision revision1 = (InternalCDORevision)CDOUtil.getRevisionByVersion(cdoObject, 1);
+
+      CDORevisionDelta revisionDelta = revision3.compare(revision2);
+      for (CDOFeatureDelta featureDelta : revisionDelta.getFeatureDeltas())
+      {
+        System.err.println(featureDelta.getFeature().getName() + " changed through changeType " + featureDelta.getType());
+      }
+
+      assertEquals("ESC", revision1.getValue(revision1.getEClass().getEStructuralFeature("name")));
+      assertEquals("Sympedia", revision2.getValue(revision1.getEClass().getEStructuralFeature("name")));
+      assertEquals("Eclipse", revision3.getValue(revision1.getEClass().getEStructuralFeature("name")));
+
+      audit.close();
+    }
+
+    audit = session.openView(commitTime4);
+    {
+      final CDOCommitHistory cdoCommitHistory = getCDOCommitHistory(audit);
+      assertEquals(5, cdoCommitHistory.getElements().length);
+      for (CDOCommitInfo cdoCommitInfo : cdoCommitHistory.getElements())
+      {
+        if (cdoCommitInfo.getTimeStamp() == commitTime1)
+        {
+          checkCommitInfo1(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime2)
+        {
+          checkCommitInfo2(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime3)
+        {
+          checkCommitInfo3(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getTimeStamp() == commitTime4)
+        {
+          checkCommitInfo4(cdoCommitInfo);
+        }
+        else if (cdoCommitInfo.getComment() != null && cdoCommitInfo.getComment().equals("<initialize>"))
+        {
+          // as expected
+        }
+        else
+        {
+          fail();
+        }
+      }
+      audit.close();
+    }
+
+    session.close();
+  }
+
+  private void checkCommitInfo1(CDOCommitInfo cdoCommitInfo)
+  {
+    final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+    final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+    final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+    assertEquals(0, detachedObjects.size());
+    assertEquals(4, newObjects.size());
+    assertEquals(1, changedObjects.size());
+    for (Object o : changedObjects)
+    {
+      final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+      final CDOFeatureDelta cdoFeatureDelta = cdoRevisionDelta.getFeatureDelta(EresourcePackage.eINSTANCE.getCDOResource_Contents());
+      assertNotNull(cdoFeatureDelta);
+      assertEquals(CDOFeatureDelta.Type.LIST, cdoFeatureDelta.getType());
+    }
+    int resourceCnt = 0;
+    int resourceFolderCnt = 0;
+    int companyCnt = 0;
+    int productCnt = 0;
+    for (Object o : newObjects)
+    {
+      final CDORevision cdoRevision = (CDORevision)o;
+      if (cdoRevision.getEClass().getName().equals(Model1Package.eINSTANCE.getProduct1().getName()))
+      {
+        productCnt++;
+      }
+      if (cdoRevision.getEClass().getName().equals(Model1Package.eINSTANCE.getCompany().getName()))
+      {
+        companyCnt++;
+      }
+      if (cdoRevision.getEClass() == EresourcePackage.eINSTANCE.getCDOResource())
+      {
+        resourceCnt++;
+      }
+      if (cdoRevision.getEClass() == EresourcePackage.eINSTANCE.getCDOResourceFolder())
+      {
+        resourceFolderCnt++;
+      }
+    }
+    assertEquals(1, productCnt);
+    assertEquals(1, companyCnt);
+    assertEquals(1, resourceCnt);
+    assertEquals(1, resourceFolderCnt);
+  }
+
+  private void checkCommitInfo2(CDOCommitInfo cdoCommitInfo)
+  {
+    final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+    final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+    final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+    assertEquals(0, detachedObjects.size());
+    assertEquals(0, newObjects.size());
+    assertEquals(1, changedObjects.size());
+    for (Object o : changedObjects)
+    {
+      final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+      final CDOSetFeatureDelta cdoFeatureDelta = (CDOSetFeatureDelta)cdoRevisionDelta
+          .getFeatureDelta(cdoRevisionDelta.getEClass().getEStructuralFeature("name"));
+      assertNotNull(cdoFeatureDelta);
+      assertEquals("Sympedia", cdoFeatureDelta.getValue());
+    }
+  }
+
+  private void checkCommitInfo3(CDOCommitInfo cdoCommitInfo)
+  {
+    final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+    final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+    final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+    assertEquals(0, detachedObjects.size());
+    assertEquals(0, newObjects.size());
+    assertEquals(1, changedObjects.size());
+    for (Object o : changedObjects)
+    {
+      final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+      final CDOSetFeatureDelta cdoFeatureDelta = (CDOSetFeatureDelta)cdoRevisionDelta
+          .getFeatureDelta(cdoRevisionDelta.getEClass().getEStructuralFeature("name"));
+      assertNotNull(cdoFeatureDelta);
+      assertEquals("Eclipse", cdoFeatureDelta.getValue());
+    }
+  }
+
+  private void checkCommitInfo4(CDOCommitInfo cdoCommitInfo)
+  {
+    final List<CDOIDAndVersion> newObjects = cdoCommitInfo.getNewObjects();
+    final List<CDORevisionKey> changedObjects = cdoCommitInfo.getChangedObjects();
+    final List<CDOIDAndVersion> detachedObjects = cdoCommitInfo.getDetachedObjects();
+    assertEquals(1, detachedObjects.size());
+    assertEquals(0, newObjects.size());
+    // due to a bug/issue in cdo hibernate store, there are 2 changedobjects
+    // need to revisit after default/enum value setting has been changed
+    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=387752
+    assertEquals(1, changedObjects.size());
+    for (Object o : changedObjects)
+    {
+      final CDORevisionDelta cdoRevisionDelta = (CDORevisionDelta)o;
+      if (cdoRevisionDelta.getEClass().getName().equals("Product1"))
+      {
+        continue;
+      }
+      final CDOFeatureDelta cdoFeatureDelta = cdoRevisionDelta.getFeatureDelta(EresourcePackage.eINSTANCE.getCDOResource_Contents());
+      assertNotNull(cdoFeatureDelta);
+      assertEquals(CDOFeatureDelta.Type.LIST, cdoFeatureDelta.getType());
+    }
+  }
+
+  private synchronized CDOObjectHistory getCDOObjectHistory(CDOView audit, Object object)
+  {
+    CDOObjectHistory cdoObjectHistory = audit.getHistory((CDOObject)object);
+
+    cdoObjectHistory.triggerLoad();
+    long startTime = System.currentTimeMillis();
+    while (cdoObjectHistory.isLoading())
+    {
+      ConcurrencyUtil.sleep(10);
+
+      // waited too long
+      if (System.currentTimeMillis() - startTime > 5000)
+      {
+        throw new IllegalStateException("commit info could not be loaded");
+      }
+    }
+    return cdoObjectHistory;
+  }
+
+  private synchronized CDOCommitHistory getCDOCommitHistory(CDOView audit)
+  {
+    CDOCommitHistory cdoCommitHistory = audit.getHistory();
+
+    cdoCommitHistory.triggerLoad();
+    long startTime = System.currentTimeMillis();
+    while (cdoCommitHistory.isLoading())
+    {
+      ConcurrencyUtil.sleep(10);
+
+      // waited too long
+      if (System.currentTimeMillis() - startTime > 5000)
+      {
+        throw new IllegalStateException("commit info could not be loaded");
+      }
+    }
+    return cdoCommitHistory;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.java
new file mode 100644
index 0000000..2ce55a3
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateAttributeTest.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.tests.AttributeTest;
+
+/**
+ * Disable some tests which won't work with hibernate (persisting java classes and java objects).
+ *
+ * @author Martin Taal
+ */
+public class HibernateAttributeTest extends AttributeTest
+{
+
+  @Override
+  public void testJavaClass() throws Exception
+  {
+  }
+
+  @Override
+  public void testJavaObject() throws Exception
+  {
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.java
new file mode 100644
index 0000000..12d7674
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_258933_Test.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2009-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_258933_Test;
+
+/**
+ * CDORevisionImpl.eIsSet() works incorrectly
+ * <p>
+ * See bug 258933
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_258933_Test extends Bugzilla_258933_Test
+{
+  @Override
+  public void testBugzilla_258933_String_SetToDefaultValue_unsettable() throws Exception
+  {
+  }
+
+  @Override
+  public void testBugzilla_258933_String() throws Exception
+  {
+  }
+
+  @Override
+  public void testBugzilla_258933_String_SetToNull() throws Exception
+  {
+  }
+
+  @Override
+  public void testBugzilla_258933_String_SetToNull_unsettable() throws Exception
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.java
new file mode 100644
index 0000000..e4de6c7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_301104_Test.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.legacy.Model1Package;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+/**
+ * Allow application to set generated id.
+ * <p>
+ * See bug 301104
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_301104_Test extends AbstractCDOTest
+{
+  public void testSetId() throws Exception
+  {
+    final String uuid = "MyUUID";
+
+    // add the id and generated value annotations
+    final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource("teneo.jpa");
+    eAnnotation.getDetails().put("value", "@Id @GeneratedValue(generator=\"system-uuid\")");
+    Model1Package.eINSTANCE.getCategory_Name().getEAnnotations().add(eAnnotation);
+
+    Category category1;
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+
+      final CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+      category1 = getModel1Factory().createCategory();
+      category1.setName(uuid);
+      resource.getContents().add(category1);
+
+      transaction.commit();
+    }
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      final CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+      final Category category2 = (Category)resource.getContents().get(0);
+      assertNotSame(category1, category2);
+      assertEquals(uuid, category2.getName());
+      transaction.commit();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.java
new file mode 100644
index 0000000..361bb5a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_333473_Test.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.OrderDetail;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import java.util.Collections;
+
+/**
+ * @author Michael Tkacz
+ */
+public class HibernateBugzilla_333473_Test extends AbstractCDOTest
+{
+  public void testRemovalFirstAttempt() throws Exception
+  {
+    testRemoval(false);
+  }
+
+  public void testRemovalSecondAttempt() throws Exception
+  {
+    testRemoval(true);
+  }
+
+  private void testRemoval(boolean removeOrderDetailFromResourceBeforeRemoval) throws Exception
+  {
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+
+    CDOResource orderDetailResource = transaction.getOrCreateResource(getResourcePath("/orderDetail")); //$NON-NLS-1$
+    orderDetailResource.getContents().clear();
+
+    final OrderDetail orderDetail = getModel1Factory().createOrderDetail();
+    orderDetail.setPrice(1.0f);
+    orderDetailResource.getContents().add(orderDetail);
+
+    CDOResource orderResource = transaction.getOrCreateResource(getResourcePath("/order")); //$NON-NLS-1$
+    orderResource.getContents().clear();
+
+    SalesOrder order = getModel1Factory().createSalesOrder();
+    order.getOrderDetails().add(orderDetail);
+    orderResource.getContents().add(order);
+
+    transaction.commit();
+    transaction.close();
+    session.close();
+
+    // so far so good
+
+    session = openSession();
+    transaction = session.openTransaction();
+    orderResource = transaction.getResource(getResourcePath("/order")); //$NON-NLS-1$
+    orderDetailResource = transaction.getResource(getResourcePath("/orderDetail")); //$NON-NLS-1$
+
+    order = (SalesOrder)orderResource.getContents().get(0);
+    order.getOrderDetails().clear();
+
+    if (removeOrderDetailFromResourceBeforeRemoval)
+    {
+      orderDetailResource.getContents().clear();
+    }
+
+    orderDetailResource.delete(Collections.EMPTY_MAP);
+    transaction.commit();
+    transaction.close();
+    session.close();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.java
new file mode 100644
index 0000000..6d8d2fe
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_356181_Test.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObjectReference;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_356181_Test extends AbstractCDOTest
+{
+  public void testBugzilla() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      Bz356181_Main main = HibernateTestFactory.eINSTANCE.createBz356181_Main();
+      main.setNonTransient("non transient");
+      main.setTransient("transient");
+      resource.getContents().add(main);
+
+      Bz356181_NonTransient nonTransient = HibernateTestFactory.eINSTANCE.createBz356181_NonTransient();
+      nonTransient.setMain(main);
+      resource.getContents().add(nonTransient);
+
+      Bz356181_Transient trans = HibernateTestFactory.eINSTANCE.createBz356181_Transient();
+      main.setTransientRef(trans);
+
+      main.setTransientOtherRef(HibernateTestFactory.eINSTANCE.createBz356181_NonTransient());
+
+      transaction.commit();
+      session.close();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      CDOSession session = openSession();
+      CDOView view = session.openView();
+      CDOResource cdoResource = view.getResource(getResourcePath("/test1"));
+      Bz356181_Main main = (Bz356181_Main)cdoResource.getContents().get(0);
+      assertNull(main.getTransient());
+      assertNull(main.getTransientRef());
+      assertNull(main.getTransientOtherRef());
+      assertEquals("non transient", main.getNonTransient());
+      List<CDOObjectReference> results = view.queryXRefs(Collections.singleton(CDOUtil.getCDOObject(main)));
+      assertEquals(1, results.size());
+      assertEquals(2, cdoResource.getContents().size());
+      assertEquals(1, results.size());
+      assertEquals(true, results.get(0).getSourceObject().eClass() == HibernateTestPackage.eINSTANCE.getBz356181_NonTransient());
+      assertEquals(true, results.get(0).getTargetObject().eClass() == HibernateTestPackage.eINSTANCE.getBz356181_Main());
+      session.close();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.java
new file mode 100644
index 0000000..df623b3
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270b_Test.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_362270b_Test;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * Read external reference annotation.
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_362270b_Test extends Bugzilla_362270b_Test
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.java
new file mode 100644
index 0000000..8154973
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_362270c_Test.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_362270c_Test;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * Read external reference annotation.
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_362270c_Test extends Bugzilla_362270c_Test
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.java
new file mode 100644
index 0000000..e6a0b33
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_373545_Test.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.legacy.Model1Package;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_373545_Test extends AbstractCDOTest
+{
+  public void testSetId() throws Exception
+  {
+    // add the id and generated value annotations
+    final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource("teneo.jpa");
+    eAnnotation.getDetails().put("value", "@Id @GeneratedValue(generator=\"system-uuid\")");
+    Model1Package.eINSTANCE.getCategory_Name().getEAnnotations().add(eAnnotation);
+
+    Category category1;
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+
+      final CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+      category1 = getModel1Factory().createCategory();
+      resource.getContents().add(category1);
+
+      transaction.commit();
+    }
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      final CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+      final Category category2 = (Category)resource.getContents().get(0);
+      assertNotSame(category1, category2);
+      System.err.println(((CDOObject)category2).cdoID());
+      assertNotNull(category2.getName());
+      transaction.commit();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.java
new file mode 100644
index 0000000..6072412
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_380987_Test.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.CDOServerExporter;
+import org.eclipse.emf.cdo.server.CDOServerImporter;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_380987_Test extends AbstractCDOTest
+{
+  // in hsqldb several eclasses do not work, they work fine in mysql
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057A());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057A1());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057B());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057B1());
+    super.doSetUp();
+  }
+
+  private void setOrRemoveTransient(EClass eClass)
+  {
+    if (eClass.getEAnnotation("teneo.jpa") != null)
+    {
+      eClass.getEAnnotations().remove(eClass.getEAnnotation("teneo.jpa"));
+    }
+    else
+    {
+      final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+      eAnnotation.setSource("teneo.jpa");
+      eAnnotation.getDetails().put("value", "@Transient");
+      eClass.getEAnnotations().add(eAnnotation);
+    }
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057A());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057A1());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057B());
+    setOrRemoveTransient(HibernateTestPackage.eINSTANCE.getBz398057B1());
+    super.doTearDown();
+  }
+
+  public void testBugzilla() throws Exception
+  {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+      transaction.createResource(getResourcePath("/res2"));
+      transaction.createResource(getResourcePath("/res3"));
+
+      List<Bz380987_Person> persons = new ArrayList<Bz380987_Person>();
+      List<Bz380987_Place> places = new ArrayList<Bz380987_Place>();
+      List<Bz380987_Group> groups = new ArrayList<Bz380987_Group>();
+      for (int i = 0; i < 5; i++)
+      {
+        Bz380987_Person person = HibernateTestFactory.eINSTANCE.createBz380987_Person();
+        person.setName(i + "");
+        persons.add(person);
+        Bz380987_Place place = HibernateTestFactory.eINSTANCE.createBz380987_Place();
+        place.setName(i + "");
+        places.add(place);
+        Bz380987_Group group = HibernateTestFactory.eINSTANCE.createBz380987_Group();
+        groups.add(group);
+      }
+      for (int i = 0; i < 5; i++)
+      {
+        persons.get(i).getPlaces().addAll(places);
+        places.get(i).getPeople().addAll(persons);
+        groups.get(i).getPeople().addAll(persons);
+      }
+
+      resource.getContents().addAll(persons);
+      resource.getContents().addAll(places);
+      resource.getContents().addAll(groups);
+      transaction.commit();
+      session.close();
+
+      CDOServerExporter.XML exporter = new CDOServerExporter.XML(getRepository());
+      exporter.exportRepository(baos);
+      System.out.println(baos.toString());
+    }
+
+    // clear the repo
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      resource.getContents().clear();
+      transaction.commit();
+      transaction.close();
+      session.close();
+    }
+
+    // repo is cleared
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      assertEquals(0, resource.getContents().size());
+      transaction.commit();
+      transaction.close();
+      session.close();
+    }
+
+    {
+      InternalRepository repo3 = getRepository("repo3", false);
+      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+      CDOServerImporter.XML importer = new CDOServerImporter.XML(repo3);
+      importer.importRepository(bais);
+    }
+
+    testRepo("repo3");
+  }
+
+  private void testRepo(String repoName) throws CommitException
+  {
+    CDOSession session = openSession(repoName);
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+
+    for (Object o : resource.getContents())
+    {
+      final CDOObject cdoObject = CDOUtil.getCDOObject((EObject)o);
+      System.err.println(cdoObject.cdoID());
+      System.err.println(cdoObject.cdoID());
+    }
+
+    CDOResource resource2 = transaction.getResource(getResourcePath("/res2"));
+    CDOResource resource3 = transaction.getResource(getResourcePath("/res3"));
+    assertNotNull(resource2);
+    assertNotNull(resource3);
+
+    List<Bz380987_Person> persons = new ArrayList<Bz380987_Person>();
+    List<Bz380987_Place> places = new ArrayList<Bz380987_Place>();
+    List<Bz380987_Group> groups = new ArrayList<Bz380987_Group>();
+    for (int i = 0; i < 15; i++)
+    {
+      if (i < 5)
+      {
+        persons.add((Bz380987_Person)resource.getContents().get(i));
+      }
+      else if (i < 10)
+      {
+        places.add((Bz380987_Place)resource.getContents().get(i));
+      }
+      else
+      {
+        groups.add((Bz380987_Group)resource.getContents().get(i));
+      }
+    }
+    assertEquals(5, persons.size());
+    assertEquals(5, places.size());
+    assertEquals(5, groups.size());
+    for (int i = 0; i < 5; i++)
+    {
+      assertEquals(5, persons.get(i).getGroup().size());
+      assertEquals(5, persons.get(i).getPlaces().size());
+      assertEquals(5, places.get(i).getPeople().size());
+      assertEquals(5, groups.get(i).getPeople().size());
+    }
+
+    for (int i = 0; i < 5; i++)
+    {
+      for (Object o : persons.get(i).getGroup())
+      {
+        final Bz380987_Group gr = (Bz380987_Group)o;
+        System.err.println(gr.getPeople().size());
+      }
+      persons.get(i).getGroup().removeAll(groups);
+      assertEquals(0, persons.get(i).getGroup().size());
+      persons.get(i).getPlaces().removeAll(places);
+      assertEquals(0, persons.get(i).getPlaces().size());
+
+      places.get(i).getPeople().removeAll(persons);
+      assertEquals(0, places.get(i).getPeople().size());
+
+      groups.get(i).getPeople().removeAll(persons);
+      assertEquals(0, groups.get(i).getPeople().size());
+    }
+    transaction.rollback();
+    session.close();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.java
new file mode 100644
index 0000000..0dcbf48
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_381013_Test.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.CDOServerExporter;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_381013_Test extends AbstractCDOTest
+{
+  public void testExport() throws Exception
+  {
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+    assertNotNull(resource);
+    transaction.commit();
+    session.close();
+
+    InternalRepository repo1 = getRepository();
+
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
+    exporter.exportRepository(baos);
+    final String result = baos.toString();
+    final String searchString = "id=\"lhttp://www.eclipse.org/emf/CDO/Eresource/4.0.0#CDOResource#3\"";
+    final int index = result.indexOf(searchString);
+    // at most one occurence
+    assertEquals(true, index != -1);
+    assertEquals(-1, result.indexOf(searchString, index + 1));
+    // System.out.println(result);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.java
new file mode 100644
index 0000000..60005d2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_Test.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2012, 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+/**
+ * Read external reference annotation.
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_387752_Test extends AbstractCDOTest
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().put(PersistenceOptions.HANDLE_UNSET_AS_NULL, "false");
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+
+  @CleanRepositoriesBefore(reason = "Start with a fresh repo")
+  public void testBugzilla() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      Bz387752_Main main = HibernateTestFactory.eINSTANCE.createBz387752_Main();
+      main.setEnumSettable(null);
+      main.setStrSettable(null);
+      main.setStrUnsettable(null);
+      main.setEnumUnsettable(null);
+      resource.getContents().add(main);
+
+      Bz387752_Main main2 = HibernateTestFactory.eINSTANCE.createBz387752_Main();
+      resource.getContents().add(main2);
+      resource.getContents().add(createSupplier(1));
+      resource.getContents().add(createSupplier(2));
+      resource.getContents().add(createSupplier(3));
+
+      transaction.commit();
+      session.close();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      CDOSession session = openSession();
+      CDOView view = session.openView();
+      CDOResource cdoResource = view.getResource(getResourcePath("/test1"));
+      Bz387752_Main main = (Bz387752_Main)cdoResource.getContents().get(0);
+      assertEquals("value", main.getStrSettable());
+      assertEquals(Bz387752_Enum.VAL0, main.getEnumSettable());
+      assertEquals(null, main.getStrUnsettable());
+      assertEquals(Bz387752_Enum.VAL1, main.getEnumUnsettable());
+
+      // db store results
+      // assertEquals("value", main.getStrSettable());
+      // assertEquals(Bz387752_Enum.VAL0, main.getEnumSettable());
+      // assertEquals(null, main.getStrUnsettable());
+      // assertEquals(Bz387752_Enum.VAL0, main.getEnumUnsettable());
+
+      Bz387752_Main main2 = (Bz387752_Main)cdoResource.getContents().get(1);
+      assertEquals("value", main2.getStrSettable());
+      assertEquals(Bz387752_Enum.VAL0, main2.getEnumSettable());
+      assertEquals("def_value", main2.getStrUnsettable());
+      assertEquals(Bz387752_Enum.VAL1, main2.getEnumUnsettable());
+      // db store results
+      // assertEquals("value", main2.getStrSettable());
+      // assertEquals(Bz387752_Enum.VAL0, main2.getEnumSettable());
+      // assertEquals("def_value", main2.getStrUnsettable());
+      // assertEquals(Bz387752_Enum.VAL1, main2.getEnumUnsettable());
+
+      session.close();
+    }
+  }
+
+  private Supplier createSupplier(int i)
+  {
+    Supplier supplier = getModel1Factory().createSupplier();
+    supplier.setCity("City " + i);
+    supplier.setName(i + "");
+    supplier.setStreet("Street " + i);
+    // supplier.setPreferred(false); // will be persisted with its default value
+    return supplier;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.java
new file mode 100644
index 0000000..8abeec9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_387752_True_Test.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2012, 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.emf.teneo.PersistenceOptions;
+
+/**
+ * Read external reference annotation.
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_387752_True_Test extends AbstractCDOTest
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().put(PersistenceOptions.HANDLE_UNSET_AS_NULL, "false");
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+
+  public void testBugzilla() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      Bz387752_Main main = HibernateTestFactory.eINSTANCE.createBz387752_Main();
+      main.setEnumSettable(null);
+      main.setStrSettable(null);
+      main.setStrUnsettable(null);
+      main.setEnumUnsettable(null);
+      resource.getContents().add(main);
+
+      Bz387752_Main main2 = HibernateTestFactory.eINSTANCE.createBz387752_Main();
+      resource.getContents().add(main2);
+
+      resource.getContents().add(createSupplier(1));
+      resource.getContents().add(createSupplier(2));
+      resource.getContents().add(createSupplier(3));
+
+      transaction.commit();
+      session.close();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      CDOSession session = openSession();
+      CDOView view = session.openView();
+      CDOResource cdoResource = view.getResource(getResourcePath("/test1"));
+      Bz387752_Main main = (Bz387752_Main)cdoResource.getContents().get(0);
+      assertEquals("value", main.getStrSettable());
+      assertEquals(Bz387752_Enum.VAL0, main.getEnumSettable());
+      assertEquals(null, main.getStrUnsettable());
+      assertEquals(Bz387752_Enum.VAL1, main.getEnumUnsettable());
+
+      // db store results
+      // assertEquals("value", main.getStrSettable());
+      // assertEquals(Bz387752_Enum.VAL0, main.getEnumSettable());
+      // assertEquals(null, main.getStrUnsettable());
+      // assertEquals(Bz387752_Enum.VAL0, main.getEnumUnsettable());
+
+      Bz387752_Main main2 = (Bz387752_Main)cdoResource.getContents().get(1);
+      assertEquals("value", main2.getStrSettable());
+      assertEquals(Bz387752_Enum.VAL0, main2.getEnumSettable());
+      assertEquals("def_value", main2.getStrUnsettable());
+      assertEquals(Bz387752_Enum.VAL1, main2.getEnumUnsettable());
+      // db store results
+      // assertEquals("value", main2.getStrSettable());
+      // assertEquals(Bz387752_Enum.VAL0, main2.getEnumSettable());
+      // assertEquals("def_value", main2.getStrUnsettable());
+      // assertEquals(Bz387752_Enum.VAL1, main2.getEnumUnsettable());
+
+      session.close();
+    }
+  }
+
+  private Supplier createSupplier(int i)
+  {
+    Supplier supplier = getModel1Factory().createSupplier();
+    supplier.setCity("City " + i);
+    supplier.setName(i + "");
+    supplier.setStreet("Street " + i);
+    // supplier.setPreferred(false); // will be persisted with its default value
+    return supplier;
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.java
new file mode 100644
index 0000000..4e21125
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_392653_Test.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.CDOServerExporter;
+import org.eclipse.emf.cdo.server.CDOServerImporter;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.legacy.Model1Package;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_392653_Test extends AbstractCDOTest
+{
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    super.doSetUp();
+    getRepository("repo2", false).setInitialPackages(Model1Package.eINSTANCE);
+    getRepository("repo2", true);
+  }
+
+  @CleanRepositoriesBefore(reason = "needed for passing testcase")
+  public void testBugzilla() throws Exception
+  {
+    InternalRepository repo2 = getRepository("repo2");
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo2);
+    exporter.exportRepository(baos);
+    System.out.println(baos.toString());
+
+    InternalRepository repo3 = getRepository("repo2", false);
+
+    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+    CDOServerImporter.XML importer = new CDOServerImporter.XML(repo3);
+    importer.importRepository(bais);
+
+    useAfterImport("repo2");
+  }
+
+  private void useAfterImport(String repoName) throws CommitException
+  {
+    CDOSession session2 = openSession(repoName);
+    CDOTransaction transaction2 = session2.openTransaction();
+
+    // Read all repo contents
+    TreeIterator<EObject> iter = transaction2.getRootResource().getAllContents();
+    while (iter.hasNext())
+    {
+      iter.next();
+    }
+    transaction2.commit();
+
+    session2.close();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.java
new file mode 100644
index 0000000..432cbe0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_395684_Test.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.commit.CDOCommitHistory;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.revision.CDOIDAndVersion;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+
+/**
+ * @author Martin Taal
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class HibernateBugzilla_395684_Test extends AbstractCDOTest
+{
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    disableConsole();
+    super.doSetUp();
+    skipStoreWithoutRawAccess();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    disableConsole();
+    super.doTearDown();
+  }
+
+  public void testVersionChange() throws Exception
+  {
+    CDOSession session = openSession();
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+      Customer customer = getModel1Factory().createCustomer();
+      customer.setName("Martin");
+      resource.getContents().add(customer);
+      transaction.commit();
+    }
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      Customer customer = (Customer)resource.getContents().get(0);
+      customer.setName("Eike");
+      transaction.commit();
+    }
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      resource.getContents().remove(0);
+      transaction.commit();
+    }
+
+    getRepository().getRevisionManager().getCache().clear();
+
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      assertEquals(0, resource.getContents().size());
+      transaction.commit();
+    }
+
+    {
+      CDOView view = session.openView();
+
+      int i = 0;
+      for (CDOCommitInfo cdoCommitInfo : getCDOCommitHistory(view).getElements())
+      {
+        if (i == 0)
+        {
+          assertEquals(1, cdoCommitInfo.getDetachedObjects().size());
+          assertEquals(1, cdoCommitInfo.getChangedObjects().size());
+          assertEquals(0, cdoCommitInfo.getNewObjects().size());
+          CDOIDAndVersion cdoIDAndVersion = cdoCommitInfo.getDetachedObjects().get(0);
+          // get the view before the delete
+          CDOView otherView = session.openView(cdoCommitInfo.getTimeStamp() - 1);
+          CDOObject obj = otherView.getObject(cdoIDAndVersion.getID());
+          {
+            final Customer oldCustomer = (Customer)CDOUtil.getEObject(obj);
+            assertEquals("Eike", oldCustomer.getName());
+          }
+          {
+            final CDORevision cdoRevision = CDOUtil.getRevisionByVersion(obj, cdoIDAndVersion.getVersion());
+            // get the detached entry
+            final CDORevision cdoRevisionDetached = CDOUtil.getRevisionByVersion(obj, 1 + cdoIDAndVersion.getVersion());
+            assertEquals(cdoRevision.getRevised() + 1, cdoRevisionDetached.getTimeStamp());
+          }
+
+        }
+        else if (i == 1)
+        {
+          assertEquals(0, cdoCommitInfo.getDetachedObjects().size());
+          assertEquals(1, cdoCommitInfo.getChangedObjects().size());
+          assertEquals(0, cdoCommitInfo.getNewObjects().size());
+        }
+        else
+        {
+          break;
+        }
+        i++;
+      }
+      view.close();
+    }
+  }
+
+  private synchronized CDOCommitHistory getCDOCommitHistory(CDOView audit)
+  {
+    CDOCommitHistory history = audit.getHistory();
+    history.triggerLoad();
+    long startTime = System.currentTimeMillis();
+    while (history.isLoading())
+    {
+      ConcurrencyUtil.sleep(10);
+
+      // waited too long
+      if (System.currentTimeMillis() - startTime > 5000)
+      {
+        throw new IllegalStateException("commit info could not be loaded");
+      }
+    }
+    return history;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.java
new file mode 100644
index 0000000..81da511
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_397682_Test.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * @author Martin Taal
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class HibernateBugzilla_397682_Test extends AbstractCDOTest
+{
+
+  public void testIssue() throws Exception
+  {
+    CDOSession session = openSession();
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+      Bz397682P p = HibernateTestFactory.eINSTANCE.createBz397682P();
+      p.setDbId("1");
+      Bz397682C c1 = HibernateTestFactory.eINSTANCE.createBz397682C();
+      c1.setDbId("2");
+      p.getListOfC().add(c1);
+      assertNotNull(c1.getRefToP());
+      resource.getContents().add(p);
+      transaction.commit();
+      assertNotNull(c1.getRefToP());
+    }
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      Bz397682P p = (Bz397682P)resource.getContents().get(0);
+      Bz397682C c2 = HibernateTestFactory.eINSTANCE.createBz397682C();
+      c2.setDbId("3");
+      c2.setRefToC(p.getListOfC().get(0));
+      p.getListOfC().add(c2);
+      assertNotNull(c2.getRefToP());
+      resource.getContents().add(p);
+      transaction.commit();
+      assertNotNull(c2.getRefToP());
+      assertNotNull(p.getListOfC().get(0).getRefToP());
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.java
new file mode 100644
index 0000000..0588abb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_398057_Test.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+
+/**
+ * @author Martin Taal
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class HibernateBugzilla_398057_Test extends AbstractCDOTest
+{
+
+  public void testIssue() throws Exception
+  {
+    CDOSession session = openSession();
+    {
+      try
+      {
+        CDOTransaction transaction = session.openTransaction();
+        CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+        Bz398057A a = HibernateTestFactory.eINSTANCE.createBz398057A();
+        a.setDbId("1");
+        Bz398057B1 b1 = HibernateTestFactory.eINSTANCE.createBz398057B1();
+        b1.setDbId("1");
+        b1.setValueStr("str");
+        b1.setValue(1.0);
+        a.getListOfB().add(b1);
+        resource.getContents().add(a);
+        transaction.commit();
+        // fail(); // expected to fail
+      }
+      catch (CommitException e)
+      {
+        // fine
+      }
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.java
new file mode 100644
index 0000000..3583ad9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_405191_Test.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_405191_Test;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_405191_Test extends Bugzilla_405191_Test
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.java
new file mode 100644
index 0000000..101b36c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_416530_Test.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * @author Michael Taal
+ */
+public class HibernateBugzilla_416530_Test extends AbstractCDOTest
+{
+
+  // @Override
+  // public void doSetUp() throws Exception
+  // {
+  // org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+  // org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+  // super.doSetUp();
+  // }
+  //
+  // @Override
+  // public void doTearDown() throws Exception
+  // {
+  // org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+  // org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+  // super.doTearDown();
+  // }
+
+  public void testCreatePersist() throws Exception
+  {
+    // step 1: create initial objects and add to resource
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      // get/create a resource
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      // clear any previous data
+      resource.getContents().clear();
+
+      for (int i = 0; i < 100; i++)
+      {
+        final Company address = getModel1Factory().createCompany();
+        address.setCity("test"); //$NON-NLS-1$
+        String addressName = "name " + System.currentTimeMillis(); //$NON-NLS-1$
+        address.setName(addressName);
+        address.setStreet("test"); //$NON-NLS-1$
+        resource.getContents().add(address);
+      }
+
+      transaction.commit();
+    }
+
+    // step 2: create one additional object and add to resource
+    // observations: for each object in the resource, the following add will cause a select for each of that object
+    {
+      final CDOSession session = openSession();
+      final CDOTransaction transaction = session.openTransaction();
+      // get/create a resource
+      CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+
+      {
+        final Company address = getModel1Factory().createCompany();
+        address.setCity("test"); //$NON-NLS-1$
+        String addressName = "name " + System.currentTimeMillis(); //$NON-NLS-1$
+        address.setName(addressName);
+        address.setStreet("test"); //$NON-NLS-1$
+        resource.getContents().add(address);
+      }
+
+      transaction.commit();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.java
new file mode 100644
index 0000000..3903714
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateBugzilla_417797_Test.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2014, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.mango.MangoParameter;
+import org.eclipse.emf.cdo.tests.mango.ParameterPassing;
+import org.eclipse.emf.cdo.tests.mango.legacy.MangoPackage;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+
+import org.hibernate.cache.ehcache.EhCacheRegionFactory;
+import org.hibernate.cfg.Environment;
+
+/**
+ *
+ * @author Martin Taal
+ */
+public class HibernateBugzilla_417797_Test extends AbstractCDOTest
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+
+    final EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+    eAnnotation.setSource("teneo.jpa");
+    eAnnotation.getDetails().put("value", "@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)");
+    MangoPackage.eINSTANCE.getMangoParameter().getEAnnotations().add(eAnnotation);
+
+    hbConfig.getAdditionalProperties().put(Environment.USE_SECOND_LEVEL_CACHE, "true");
+    hbConfig.getAdditionalProperties().put(Environment.CACHE_REGION_FACTORY, EhCacheRegionFactory.class.getName());
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+
+  @CleanRepositoriesBefore(reason = "Start with a fresh repo")
+  public void testBugzilla() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      MangoParameter createMangoParameter = getMangoFactory().createMangoParameter();
+      createMangoParameter.setName("Mango1");
+      createMangoParameter.setPassing(ParameterPassing.BY_REFERENCE);
+
+      resource.getContents().add(createMangoParameter);
+
+      transaction.commit();
+      session.close();
+    }
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+      System.err.println(resource.getContents().get(0));
+      transaction.commit();
+      session.close();
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.java
new file mode 100644
index 0000000..c9e02d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateChunkingTest.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Martin Taal - Changes for hibernate
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+
+import org.eclipse.net4j.util.io.IOUtil;
+
+import org.eclipse.emf.common.util.EList;
+
+import java.util.Iterator;
+
+/**
+ * @author Eike Stepper
+ */
+public class HibernateChunkingTest extends AbstractCDOTest
+{
+  public void testReadNative() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      Company company = getModel1Factory().createCompany();
+      company.setName("company");
+      resource.getContents().add(company);
+
+      for (int i = 0; i < 100; i++)
+      {
+        SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+        salesOrder.setId(i);
+        company.getSalesOrders().add(salesOrder);
+      }
+
+      transaction.commit();
+      session.close();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    CDOSession session = openSession();
+    session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(10, 10));
+
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+
+    Company company = (Company)resource.getContents().get(0);
+    EList<SalesOrder> salesOrders = company.getSalesOrders();
+    int i = 0;
+    for (Iterator<SalesOrder> it = salesOrders.iterator(); it.hasNext();)
+    {
+      IOUtil.OUT().println(i++);
+      SalesOrder salesOrder = it.next();
+      IOUtil.OUT().println(salesOrder);
+    }
+  }
+
+  public void testWriteNative() throws Exception
+  {
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+      Customer customer = getModel1Factory().createCustomer();
+      customer.setName("customer");
+      resource.getContents().add(customer);
+
+      for (int i = 0; i < 100; i++)
+      {
+        SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+        salesOrder.setId(i);
+        salesOrder.setCustomer(customer);
+        resource.getContents().add(salesOrder);
+      }
+
+      transaction.commit();
+      session.close();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    CDOSession session = openSession();
+    session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(10, 10));
+
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource = transaction.getResource(getResourcePath("/test1"));
+
+    Customer customer = (Customer)resource.getContents().get(0);
+    EList<SalesOrder> salesOrders = customer.getSalesOrders();
+    for (int i = 50; i < 70; i++)
+    {
+      SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+      salesOrder.setId(i + 1000);
+      resource.getContents().add(salesOrder);
+      salesOrders.set(i, salesOrder);
+    }
+
+    transaction.commit();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.java
new file mode 100644
index 0000000..3ff857e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateConfig.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2008-2012, 2014, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.hibernate.CDOHibernateUtil;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateMappingProvider;
+import org.eclipse.emf.cdo.server.hibernate.teneo.TeneoUtil;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+
+import org.eclipse.net4j.util.WrappedException;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @author Eike Stepper
+ */
+public class HibernateConfig extends RepositoryConfig
+{
+  public static final String STORE_NAME = "Hibernate";
+
+  public static final HibernateConfig INSTANCE = new HibernateConfig();
+
+  public static final HibernateConfig AUDIT_INSTANCE = (HibernateConfig)new HibernateConfig().supportingAudits(true);
+
+  public static final String MAPPING_FILE = "mappingfile";
+
+  private static final long serialVersionUID = 1L;
+
+  private Map<String, String> additionalProperties = new HashMap<String, String>();
+
+  public HibernateConfig()
+  {
+    super(STORE_NAME);
+  }
+
+  @Override
+  protected String getStoreName()
+  {
+    return STORE_NAME;
+  }
+
+  @Override
+  protected void initRepositoryProperties(Map<String, String> props)
+  {
+    super.initRepositoryProperties(props);
+
+    try
+    {
+      final Properties teneoProperties = new Properties();
+      Map<String, String> additionalProperties = getAdditionalProperties();
+      teneoProperties.load(getClass().getResourceAsStream("/app.properties"));
+      teneoProperties.putAll(additionalProperties);
+      for (Object key : teneoProperties.keySet())
+      {
+        props.put((String)key, teneoProperties.getProperty((String)key));
+      }
+    }
+    catch (Exception e)
+    {
+      throw WrappedException.wrap(e);
+    }
+  }
+
+  public IStore createStore(String repoName)
+  {
+    // note the provider properties are read from the store/repository level
+    IHibernateMappingProvider mappingProvider = TeneoUtil.createMappingProvider();
+    return CDOHibernateUtil.createStore(mappingProvider);
+  }
+
+  public Map<String, String> getAdditionalProperties()
+  {
+    return additionalProperties;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.java
new file mode 100644
index 0000000..f26743c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateCrossReferenceTest.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.CrossReferenceTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * Tests with a separate annotations.xml.
+ *
+ * @author Martin Taal
+ */
+public class HibernateCrossReferenceTest extends CrossReferenceTest
+{
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.java
new file mode 100644
index 0000000..692460e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalAnnotationTest.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2009, 2011-2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.tests.model2.Model2Package;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.transaction.CDOXATransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOViewSet;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Tests with a separate annotations.xml.
+ *
+ * @author Martin Taal
+ */
+public class HibernateExternalAnnotationTest extends AbstractCDOTest
+{
+  private static final String REPOSITORY2_NAME = "repo2";
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+
+  // TODO: deadlocks
+  public void _testOneXMIResourceManyViewsOnOneResourceSet() throws Exception
+  {
+    byte[] dataOfresD = null;
+    getRepository(REPOSITORY2_NAME);
+
+    {
+      CDOSession sessionA = openSession();
+      CDOSession sessionB = openSession(REPOSITORY2_NAME);
+      ResourceSet resourceSet = new ResourceSetImpl();
+      resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("test", new XMIResourceFactoryImpl());
+
+      sessionA.getPackageRegistry().putEPackage(getModel1Package());
+      sessionA.getPackageRegistry().putEPackage(Model2Package.eINSTANCE);
+      sessionB.getPackageRegistry().putEPackage(getModel1Package());
+      sessionB.getPackageRegistry().putEPackage(Model2Package.eINSTANCE);
+
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+      CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+
+      CDOResource resA = transactionA1.createResource("/resA");
+      CDOResource resB = transactionB1.createResource("/resB");
+
+      EList<Resource> resources = resourceSet.getResources();
+      assertEquals(2, resources.size());
+
+      CDOResource resC = transactionA1.createResource("/resC");
+      assertNotNull(resC);
+      assertEquals(3, resources.size());
+
+      Resource resD = resourceSet.createResource(URI.createURI("test://1"));
+      assertEquals(4, resources.size());
+      assertEquals(false, resD instanceof CDOResource);
+
+      Company companyA = getModel1Factory().createCompany();
+      companyA.setName("VALUEA");
+
+      Company companyB = getModel1Factory().createCompany();
+      companyB.setName("VALUEB");
+
+      Company companyD = getModel1Factory().createCompany();
+      companyD.setName("VALUED");
+
+      resD.getContents().add(companyD);
+      resA.getContents().add(companyA);
+      resB.getContents().add(companyB);
+
+      Supplier supplier = getModel1Factory().createSupplier();
+      PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+
+      supplier.getPurchaseOrders().add(purchaseOrder);
+      resD.getContents().add(supplier);
+      resA.getContents().add(purchaseOrder);
+
+      CDOXATransaction transSet = CDOUtil.createXATransaction();
+
+      transSet.add(CDOUtil.getViewSet(resourceSet));
+
+      // transSet.commit();
+      transactionA1.commit();
+
+      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+      resD.save(outputStream, null);
+      dataOfresD = outputStream.toByteArray();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      ResourceSet resourceSet = new ResourceSetImpl();
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction(resourceSet);
+
+      CDOSession session2 = openSession(REPOSITORY2_NAME);
+      CDOTransaction transaction2 = session2.openTransaction(resourceSet);
+
+      CDOViewSet set = CDOUtil.getViewSet(resourceSet);
+      assertNotNull(set);
+
+      resourceSet.getPackageRegistry().put(getModel1Package().getNsURI(), getModel1Package());
+      resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("test", new XMIResourceFactoryImpl());
+
+      Resource resD = resourceSet.createResource(URI.createURI("test://1"));
+      resD.load(new ByteArrayInputStream(dataOfresD), null);
+
+      CDOResource resA = transaction.getResource("/resA");
+      CDOResource resB = transaction2.getResource("/resB");
+      Company companyA = (Company)resA.getContents().get(0);
+      Company companyB = (Company)resB.getContents().get(0);
+      Company companyD = (Company)resD.getContents().get(0);
+
+      assertNotSame(resA.getURI(), resB.getURI());
+      assertNotSame(resA.getPath(), "/resA");
+      assertNotSame(resB.getPath(), "/resB");
+      assertNotSame(resA.cdoView(), transaction2);
+      assertNotSame(resB.cdoView(), transaction);
+
+      assertEquals("VALUEA", companyA.getName());
+      assertEquals("VALUEB", companyB.getName());
+      assertEquals("VALUED", companyD.getName());
+
+      Supplier supplierD = (Supplier)resD.getContents().get(1);
+      PurchaseOrder pO = supplierD.getPurchaseOrders().get(0);
+      assertEquals(transaction, CDOUtil.getCDOObject(pO).cdoView());
+      assertEquals(supplierD, pO.getSupplier());
+    }
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.java
new file mode 100644
index 0000000..4b305b6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateExternalReferenceTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2009, 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.ExternalReferenceTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * Test {@link ExternalReferenceTest}, disables some testcases which will never work anyway.
+ *
+ * @author Martin Taal
+ */
+public class HibernateExternalReferenceTest extends ExternalReferenceTest
+{
+
+  @Override
+  public void testXRefExternalObject() throws Exception
+  {
+    // xreffing an external object is not possible as the
+    // external reference does not hold type information
+  }
+
+  @Override
+  public void testManyViewsOnOneResourceSet() throws Exception
+  {
+    // this testcase does not work because it there are external temporary references between two
+    // objects and the objects are stored at the same time. The temporary references are then
+    // stored in the database (as external), when retrieving the objects the temporary references
+    // can not be resolved to real ones.
+    // one note in the second part of the test the supplier is read. The supplier is not read
+    // from the database but is cached server side
+    // super.testManyViewsOnOneResourceSet();
+  }
+
+  @Override
+  public void testUsingObjectsBetweenSameTransaction() throws Exception
+  {
+    // note this testcase requires that no id's are mapped externally
+    // this testcase does not work for hibernate because 2 objects reference eachother and
+    // are added in different transactions, hibernate/mysql will throw a fk-constraint
+    // exception. This is correct behavior.
+    // super.testUsingObjectsBetweenSameTransaction();
+  }
+
+  @Override
+  public void testOneXMIResourceManyViewsOnOneResourceSet()
+  {
+
+  }
+
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.java
new file mode 100644
index 0000000..3288290
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateLazyLoadTest.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.Order;
+import org.eclipse.emf.cdo.tests.model1.OrderDetail;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.tests.model1.VAT;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+import org.eclipse.net4j.util.WrappedException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test lazy load behavior of hibernate
+ *
+ * @author Martin Taal
+ */
+public class HibernateLazyLoadTest extends AbstractCDOTest
+{
+  private static final int NUM_OF_PRODUCTS = 10;
+
+  private static final int NUM_OF_CUSTOMERS = 2;
+
+  private static final int NUM_OF_PRODUCTS_CUSTOMER = NUM_OF_PRODUCTS / NUM_OF_CUSTOMERS;
+
+  private static final int NUM_OF_SALES_ORDERS = 5;
+
+  private static final int NUM_OF_SUPPLIERS = 5;
+
+  @Override
+  public void doSetUp() throws Exception
+  {
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    super.doSetUp();
+  }
+
+  @Override
+  public void doTearDown() throws Exception
+  {
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    super.doTearDown();
+  }
+
+  public void testSimpleQueries() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    session.close();
+    session = openSession();
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      msg("Query for products");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from SalesOrder");
+      addCacheParameter(cdoQuery);
+      cdoQuery.setMaxResults(1);
+      final List<SalesOrder> orders = cdoQuery.getResult(SalesOrder.class);
+      System.err.println(orders.get(0).getOrderDetails().get(0).getPrice());
+      System.err.println(orders.get(0).getCustomer().getName());
+      assertEquals(orders.size(), 1);
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  private void createTestSet(CDOSession session)
+  {
+    disableConsole();
+    msg("Opening transaction");
+    CDOTransaction transaction = session.openTransaction();
+
+    msg("Creating resource");
+    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+    fillResource(resource);
+
+    try
+    {
+      msg("Committing");
+      transaction.commit();
+    }
+    catch (CommitException ex)
+    {
+      throw WrappedException.wrap(ex);
+    }
+
+    enableConsole();
+  }
+
+  private void fillResource(CDOResource resource)
+  {
+    msg("Creating Testset");
+    final List<Product1> products = new ArrayList<Product1>();
+    for (int i = 0; i < NUM_OF_PRODUCTS; i++)
+    {
+      products.add(createProduct(i));
+    }
+
+    resource.getContents().addAll(products);
+
+    int productCounter = 0;
+    for (int i = 0; i < NUM_OF_CUSTOMERS; i++)
+    {
+      final Customer customer = getModel1Factory().createCustomer();
+      customer.setCity("City " + i);
+      customer.setName(i + "");
+      customer.setStreet("Street " + i);
+      resource.getContents().add(customer);
+
+      final List<Product1> customerProducts = products.subList(productCounter, productCounter + NUM_OF_PRODUCTS_CUSTOMER);
+      for (int k = 0; k < NUM_OF_SALES_ORDERS; k++)
+      {
+        resource.getContents().add(createSalesOrder(i * 10 + k, customer, customerProducts));
+      }
+
+      productCounter += NUM_OF_PRODUCTS_CUSTOMER;
+    }
+
+    final List<Supplier> suppliers = new ArrayList<Supplier>();
+    for (int i = 0; i < NUM_OF_SUPPLIERS; i++)
+    {
+      suppliers.add(createSupplier(i));
+    }
+
+    resource.getContents().addAll(suppliers);
+  }
+
+  private Supplier createSupplier(int i)
+  {
+    Supplier supplier = getModel1Factory().createSupplier();
+    supplier.setCity("City " + i);
+    supplier.setName(i + "");
+    supplier.setStreet("Street " + i);
+    // supplier.setPreferred(false); // will be persisted with its default value
+    return supplier;
+  }
+
+  private SalesOrder createSalesOrder(int num, Customer customer, List<Product1> products)
+  {
+    SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+    salesOrder.setCustomer(customer);
+    salesOrder.setId(num);
+    createOrderDetail(salesOrder, num, products);
+    return salesOrder;
+  }
+
+  private List<OrderDetail> createOrderDetail(Order order, int index, List<Product1> products)
+  {
+    final List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
+    int count = 0;
+    for (Product1 product : products)
+    {
+      OrderDetail orderDetail = getModel1Factory().createOrderDetail();
+      orderDetail.setOrder(order);
+      orderDetail.setPrice(count++ * index * 1.1f);
+      orderDetail.setProduct(product);
+    }
+
+    return orderDetails;
+  }
+
+  private Product1 createProduct(int index)
+  {
+    Product1 product = getModel1Factory().createProduct1();
+    product.setDescription("Description " + index);
+    product.setName("" + index);
+    if (index < 10)
+    {
+      product.setVat(VAT.VAT15);
+    }
+    else
+    {
+      product.setVat(VAT.VAT7);
+    }
+
+    return product;
+  }
+
+  protected void addCacheParameter(CDOQuery query)
+  {
+    query.setParameter(IHibernateStore.CACHE_RESULTS, true);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.java
new file mode 100644
index 0000000..4b0022b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateMultiValuedOfAttributeTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009, 2011, 2012, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.tests.MultiValuedOfAttributeTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test different aspects of HQL querying using the CDO query api.
+ *
+ * @author Martin Taal
+ */
+public class HibernateMultiValuedOfAttributeTest extends MultiValuedOfAttributeTest
+{
+  @Override
+  // overridden because there is a null value in the List created by the supermethod
+  public void testListOfInteger() throws Exception
+  {
+    List<Integer> list = new ArrayList<Integer>();
+    list.add(10);
+    list.add(13);
+    list.add(20);
+    testMultiValuedIOfAttribute(list, getModel5Package().getGenListOfInteger(), getModel5Package().getGenListOfInteger_Elements());
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java
new file mode 100644
index 0000000..303ef9b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryNoCachingTest.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+/**
+ * Test HQL queries with server side caching of query list to off.
+ *
+ * @author Martin Taal
+ */
+public class HibernateQueryNoCachingTest extends HibernateQueryTest
+{
+  @Override
+  protected void addCacheParameter(CDOQuery query)
+  {
+    query.setParameter(IHibernateStore.CACHE_RESULTS, false);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java
new file mode 100644
index 0000000..61fac60
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateQueryTest.java
@@ -0,0 +1,528 @@
+/*
+ * Copyright (c) 2009-2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.hibernate.IHibernateStore;
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.Order;
+import org.eclipse.emf.cdo.tests.model1.OrderDetail;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.tests.model1.VAT;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.collection.CloseableIterator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test different aspects of HQL querying using the CDO query api.
+ *
+ * @author Martin Taal
+ */
+public class HibernateQueryTest extends AbstractCDOTest
+{
+  private static final int NUM_OF_PRODUCTS = 20;
+
+  private static final int NUM_OF_CUSTOMERS = 5;
+
+  private static final int NUM_OF_PRODUCTS_CUSTOMER = NUM_OF_PRODUCTS / NUM_OF_CUSTOMERS;
+
+  private static final int NUM_OF_SALES_ORDERS = 5;
+
+  private static final int NUM_OF_SUPPLIERS = 5;
+
+  @Override
+  public void doSetUp() throws Exception
+  {
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(1);
+    super.doSetUp();
+  }
+
+  @Override
+  public void doTearDown() throws Exception
+  {
+    org.eclipse.emf.cdo.tests.model1.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    org.eclipse.emf.cdo.tests.model1.legacy.Model1Package.eINSTANCE.getSupplier_Preferred().setLowerBound(0);
+    super.doTearDown();
+  }
+
+  public void testSimpleQueries() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    session.close();
+    session = openSession();
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      msg("Query for products");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1");
+      addCacheParameter(cdoQuery);
+      final List<Product1> products = cdoQuery.getResult(Product1.class);
+      assertEquals(true, products.get(0).getOrderDetails().size() > 0);
+      assertEquals(true, products.get(0).getOrderDetails().get(0).getOrder() != null);
+      assertEquals(NUM_OF_PRODUCTS, products.size());
+    }
+
+    {
+      msg("Query for products with a specific name");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1 where name=:name");
+      cdoQuery.setParameter("name", "" + 1);
+      addCacheParameter(cdoQuery);
+      final List<Product1> products = cdoQuery.getResult(Product1.class);
+      assertEquals(1, products.size());
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      msg("Query for Customers");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Customer");
+      addCacheParameter(cdoQuery);
+      final List<Customer> customers = cdoQuery.getResult(Customer.class);
+      assertEquals(true, customers.get(0).getSalesOrders().size() > 0);
+
+      assertEquals(NUM_OF_CUSTOMERS, customers.size());
+    }
+
+    {
+      msg("Query for products with VAT15");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "from Product1 where vat=:vat");
+      addCacheParameter(cdoQuery);
+      cdoQuery.setParameter("vat", VAT.VAT15);
+      final List<Product1> products = cdoQuery.getResult(Product1.class);
+      assertEquals(10, products.size());
+      for (Product1 p : products)
+      {
+        assertEquals(p.getVat(), VAT.VAT15);
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testFunctions() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Count products");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "select count(*) from Product1");
+      addCacheParameter(cdoQuery);
+      final List<Long> counts = cdoQuery.getResult(Long.class);
+      assertEquals(counts.size(), 1);
+      assertEquals(counts.get(0), new Long(NUM_OF_PRODUCTS));
+    }
+
+    {
+      msg("Orders with sum of order details");
+      // result with arrays are tested below
+      // CDOQuery cdoQuery = transaction.createQuery("hql",
+      // "select so.id, sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id");
+      CDOQuery cdoQuery = transaction.createQuery("hql", "select sum(od.price) from SalesOrder so, OrderDetail od where od.order=so group by so.id");
+      addCacheParameter(cdoQuery);
+      final List<Double> results = cdoQuery.getResult(Double.class);
+      assertEquals(NUM_OF_SALES_ORDERS * NUM_OF_CUSTOMERS, results.size());
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testComplexQuerySalesOrderJoinCustomerProduct() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for customers");
+      CDOQuery customerQuery = transaction.createQuery("hql", "from Customer order by name");
+      addCacheParameter(customerQuery);
+      final List<Customer> customers = customerQuery.getResult(Customer.class);
+      assertEquals(NUM_OF_CUSTOMERS, customers.size());
+
+      msg("Query for products");
+      CDOQuery productQuery = transaction.createQuery("hql", "from Product1");
+      addCacheParameter(productQuery);
+      final List<Product1> products = productQuery.getResult(Product1.class);
+      assertEquals(NUM_OF_PRODUCTS, products.size());
+
+      msg("Query for all orders of a certain customer and with a certain product");
+      int i = 0;
+      for (Customer customer : customers)
+      {
+        final int customerIndex = Integer.parseInt(customer.getName());
+        // check order by
+        assertEquals(i++, customerIndex);
+
+        final int productCounter = customerIndex * NUM_OF_PRODUCTS_CUSTOMER;
+        for (Product1 product : products)
+        {
+          final int productIndex = Integer.parseInt(product.getName());
+          // note the id is always used as the parameter
+          // bug 282620
+          final CDOQuery orderQuery = transaction.createQuery("hql",
+              "select so from SalesOrder so, OrderDetail od where so.customer=:customer and od in elements(so.orderDetails) and od.product=:product");
+          orderQuery.setParameter("customer", customer);
+          orderQuery.setParameter("product", product);
+          addCacheParameter(orderQuery);
+
+          final boolean hasOrders = productCounter <= productIndex && productIndex < productCounter + NUM_OF_PRODUCTS_CUSTOMER;
+          if (hasOrders)
+          {
+            final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+            assertEquals(NUM_OF_SALES_ORDERS, sos.size());
+            for (SalesOrder so : sos)
+            {
+              assertEquals(customer, so.getCustomer());
+              boolean found = false;
+              for (OrderDetail od : so.getOrderDetails())
+              {
+                found |= od.getProduct() == product;
+              }
+
+              assertEquals(true, found);
+            }
+          }
+          else
+          {
+            assertEquals(0, orderQuery.getResult(SalesOrder.class).size());
+          }
+        }
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testElementsClause() throws Exception
+  {
+    // tests
+    // bug 282620
+
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for customers");
+      CDOQuery odQuery = transaction.createQuery("hql", "from OrderDetail");
+      addCacheParameter(odQuery);
+      final List<OrderDetail> orderDetails = odQuery.getResult(OrderDetail.class);
+      for (OrderDetail orderDetail : orderDetails)
+      {
+        final CDOQuery orderQuery = transaction.createQuery("hql", "select so from SalesOrder so where :od in elements(so.orderDetails)");
+        orderQuery.setParameter("od", orderDetail);
+        final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+        assertEquals(1, sos.size());
+        assertNotNull(sos.get(0).getCustomer().getName());
+        assertEquals(orderDetail.getOrder(), sos.get(0));
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  // Tests id handling
+  // See: bug 283106
+  public void testQueryWithID() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for customers");
+      CDOQuery odQuery = transaction.createQuery("hql", "from Customer");
+      addCacheParameter(odQuery);
+      final List<Customer> customers = odQuery.getResult(Customer.class);
+      for (Customer customer : customers)
+      {
+        final CDOQuery orderQuery = transaction.createQuery("hql", "select so from SalesOrder so where so.customer.id=:customerId");
+        final CDOObject cdoObject = CDOUtil.getCDOObject(customer);
+        final CDOID id = cdoObject.cdoID();
+        orderQuery.setParameter("customerId", HibernateUtil.getInstance().getIdValue(id));
+        final List<SalesOrder> sos = orderQuery.getResult(SalesOrder.class);
+        assertEquals(NUM_OF_SALES_ORDERS, sos.size());
+        for (SalesOrder so : sos)
+        {
+          assertEquals(customer, so.getCustomer());
+        }
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testQueryObjectArray() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for order details");
+      CDOQuery query = transaction.createQuery("hql", "select od, od.order, od.product.vat, od.price from OrderDetail as od where od.product.vat=:vat");
+      query.setParameter("vat", VAT.VAT15);
+      addCacheParameter(query);
+      for (Object[] values : query.getResult(Object[].class))
+      {
+        assertInstanceOf(OrderDetail.class, values[0]);
+        assertInstanceOf(SalesOrder.class, values[1]);
+        assertInstanceOf(VAT.class, values[2]);
+        assertEquals(VAT.VAT15, values[2]);
+        assertInstanceOf(Float.class, values[3]);
+        final SalesOrder order = (SalesOrder)values[1];
+        assertEquals(true, order.getOrderDetails().contains(values[0]));
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testPaging() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for products in pages");
+      int pageSize = 5;
+      int numOfPages = NUM_OF_PRODUCTS / pageSize;
+      final List<Product1> allProducts = new ArrayList<Product1>();
+      for (int page = 0; page < numOfPages; page++)
+      {
+        CDOQuery productQuery = transaction.createQuery("hql", "from Product1");
+        productQuery.setMaxResults(pageSize);
+        productQuery.setParameter(IHibernateStore.FIRST_RESULT, page * pageSize);
+        addCacheParameter(productQuery);
+        final List<Product1> queriedProducts = productQuery.getResult(Product1.class);
+        assertEquals(true, queriedProducts.size() <= pageSize);
+        // a product should not have been read yet
+        for (Product1 newProduct : queriedProducts)
+        {
+          assertEquals(true, !allProducts.contains(newProduct));
+        }
+
+        allProducts.addAll(queriedProducts);
+      }
+
+      assertEquals(NUM_OF_PRODUCTS, allProducts.size());
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  public void testIterator() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    createTestSet(session);
+
+    msg("Opening transaction for querying");
+    CDOTransaction transaction = session.openTransaction();
+
+    {
+      msg("Query for products");
+      CDOQuery productQuery = transaction.createQuery("hql", "from Product1");
+      addCacheParameter(productQuery);
+      final CloseableIterator<Product1> iterator = productQuery.getResultAsync(Product1.class);
+      int counter = 0;
+      while (iterator.hasNext())
+      {
+        final Product1 product = iterator.next();
+        // meaningless but do something
+        assertEquals(true, product != null);
+        counter++;
+        if (counter == NUM_OF_PRODUCTS / 2)
+        {
+          iterator.close();
+        }
+      }
+    }
+
+    transaction.commit();
+    enableConsole();
+  }
+
+  private void createTestSet(CDOSession session)
+  {
+    disableConsole();
+    msg("Opening transaction");
+    CDOTransaction transaction = session.openTransaction();
+
+    msg("Creating resource");
+    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+
+    fillResource(resource);
+
+    try
+    {
+      msg("Committing");
+      transaction.commit();
+    }
+    catch (CommitException ex)
+    {
+      throw WrappedException.wrap(ex);
+    }
+
+    enableConsole();
+  }
+
+  private void fillResource(CDOResource resource)
+  {
+    msg("Creating Testset");
+    final List<Product1> products = new ArrayList<Product1>();
+    for (int i = 0; i < NUM_OF_PRODUCTS; i++)
+    {
+      products.add(createProduct(i));
+    }
+
+    resource.getContents().addAll(products);
+
+    int productCounter = 0;
+    for (int i = 0; i < NUM_OF_CUSTOMERS; i++)
+    {
+      final Customer customer = getModel1Factory().createCustomer();
+      customer.setCity("City " + i);
+      customer.setName(i + "");
+      customer.setStreet("Street " + i);
+      resource.getContents().add(customer);
+
+      final List<Product1> customerProducts = products.subList(productCounter, productCounter + NUM_OF_PRODUCTS_CUSTOMER);
+      for (int k = 0; k < NUM_OF_SALES_ORDERS; k++)
+      {
+        resource.getContents().add(createSalesOrder(i * 10 + k, customer, customerProducts));
+      }
+
+      productCounter += NUM_OF_PRODUCTS_CUSTOMER;
+    }
+
+    final List<Supplier> suppliers = new ArrayList<Supplier>();
+    for (int i = 0; i < NUM_OF_SUPPLIERS; i++)
+    {
+      suppliers.add(createSupplier(i));
+    }
+
+    resource.getContents().addAll(suppliers);
+  }
+
+  private Supplier createSupplier(int i)
+  {
+    Supplier supplier = getModel1Factory().createSupplier();
+    supplier.setCity("City " + i);
+    supplier.setName(i + "");
+    supplier.setStreet("Street " + i);
+    // supplier.setPreferred(false); // will be persisted with its default value
+    return supplier;
+  }
+
+  private SalesOrder createSalesOrder(int num, Customer customer, List<Product1> products)
+  {
+    SalesOrder salesOrder = getModel1Factory().createSalesOrder();
+    salesOrder.setCustomer(customer);
+    salesOrder.setId(num);
+    createOrderDetail(salesOrder, num, products);
+    return salesOrder;
+  }
+
+  private List<OrderDetail> createOrderDetail(Order order, int index, List<Product1> products)
+  {
+    final List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
+    int count = 0;
+    for (Product1 product : products)
+    {
+      OrderDetail orderDetail = getModel1Factory().createOrderDetail();
+      orderDetail.setOrder(order);
+      orderDetail.setPrice(count++ * index * 1.1f);
+      orderDetail.setProduct(product);
+    }
+
+    return orderDetails;
+  }
+
+  private Product1 createProduct(int index)
+  {
+    Product1 product = getModel1Factory().createProduct1();
+    product.setDescription("Description " + index);
+    product.setName("" + index);
+    if (index < 10)
+    {
+      product.setVat(VAT.VAT15);
+    }
+    else
+    {
+      product.setVat(VAT.VAT7);
+    }
+
+    return product;
+  }
+
+  protected void addCacheParameter(CDOQuery query)
+  {
+    query.setParameter(IHibernateStore.CACHE_RESULTS, true);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java
new file mode 100644
index 0000000..f845aa2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateTimeStampTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011, 2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Product1;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+/**
+ * Simple test to check that the timestamp is indeed stored. https://bugs.eclipse.org/bugs/show_bug.cgi?id=361792
+ *
+ * @author Martin Taal
+ */
+public class HibernateTimeStampTest extends AbstractCDOTest
+{
+
+  public void testTimeStamp() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    CDOID cdoId = null;
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
+      Product1 product = getModel1Factory().createProduct1();
+      product.setDescription("Description");
+      product.setName("name");
+      resource.getContents().add(product);
+      transaction.commit();
+      cdoId = ((CDOObject)product).cdoID();
+    }
+    session.close();
+
+    Thread.sleep(500);
+
+    final long checkTimeStamp = System.currentTimeMillis();
+
+    session = openSession();
+
+    CDOTransaction transaction = session.openTransaction();
+    final CDOObject cdoObject = transaction.getObject(cdoId);
+    final long timeStamp = cdoObject.cdoRevision().getTimeStamp();
+    if (checkTimeStamp < timeStamp)
+    {
+      fail("Timestamp not stored");
+    }
+    transaction.commit();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.java
new file mode 100644
index 0000000..707112c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/HibernateXATransactionTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2009, 2011-2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Martin Taal
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore;
+import org.eclipse.emf.cdo.tests.XATransactionTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+
+/**
+ * Override {@link XATransactionTest} to do mapping of external references.
+ *
+ * @author Martin Taal
+ */
+public class HibernateXATransactionTest extends XATransactionTest
+{
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    final String persistenceXML = "org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml";
+    hbConfig.getAdditionalProperties().put(HibernateStore.PERSISTENCE_XML, persistenceXML);
+
+    super.doSetUp();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    final IRepositoryConfig repConfig = getRepositoryConfig();
+    final HibernateConfig hbConfig = (HibernateConfig)repConfig;
+    hbConfig.getAdditionalProperties().clear();
+    super.doTearDown();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.java
new file mode 100644
index 0000000..2427007
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Export_Test.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.CDOServerExporter;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.legacy.Model1Factory;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * @author Martin Taal
+ */
+public class Hibernate_Export_Test extends AbstractCDOTest
+{
+  public void testExport() throws Exception
+  {
+
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+      Customer customer = Model1Factory.eINSTANCE.createCustomer();
+      customer.setName("1");
+      customer.setCity("1");
+      customer.setStreet("1");
+      resource.getContents().add(customer);
+      assertNotNull(resource);
+      transaction.commit();
+      session.close();
+    }
+    {
+      CDOSession session = openSession();
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      Customer customer = (Customer)resource.getContents().get(0);
+      customer.setStreet("2");
+      transaction.createResource(getResourcePath("/res2"));
+      transaction.commit();
+      session.close();
+    }
+
+    InternalRepository repo1 = getRepository();
+
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
+    exporter.exportRepository(baos);
+    final String result = baos.toString();
+    System.out.println(result);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.java
new file mode 100644
index 0000000..41c04a6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Failure_Test.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.CDOServerExporter;
+import org.eclipse.emf.cdo.server.CDOServerImporter;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * @author Martin Taal
+ */
+public class Hibernate_Failure_Test extends AbstractCDOTest
+{
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    disableConsole();
+    super.doSetUp();
+    skipStoreWithoutRawAccess();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    disableConsole();
+    super.doTearDown();
+  }
+
+  public void testImport() throws Exception
+  {
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+    // CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+    transaction.commit();
+    // Customer eike = createCustomer("Eike");
+    // resource.getContents().add(eike);
+    // SalesOrder salesOrder = createSalesOrder(eike);
+    // salesOrder.getOrderDetails().add(getModel1Factory().createOrderDetail());
+    // resource.getContents().add(salesOrder);
+    // transaction.commit();
+    session.close();
+
+    InternalRepository repo1 = getRepository();
+
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
+    exporter.exportRepository(baos);
+    System.out.println(baos.toString());
+
+    InternalRepository repo2 = getRepository("repo2", false);
+
+    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+    CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
+    importer.importRepository(bais);
+
+    useAfterImport("repo2");
+  }
+
+  private void useAfterImport(String repoName) throws CommitException
+  {
+    CDOSession session2 = openSession(repoName);
+    CDOTransaction transaction2 = session2.openTransaction();
+
+    // Read all repo contents
+    TreeIterator<EObject> iter = transaction2.getRootResource().getAllContents();
+    while (iter.hasNext())
+    {
+      iter.next();
+    }
+
+    // Add content from a new package
+    CDOResource resource = transaction2.createResource(getResourcePath("/r1"));
+    resource.getContents().add(getModel3Factory().createPolygon());
+    transaction2.commit();
+
+    session2.close();
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.java
new file mode 100644
index 0000000..a69ec3a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/Hibernate_Missing_Version_Test.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2012, 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.CDOObjectHistory;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
+
+/**
+ * @author Martin Taal
+ */
+@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
+public class Hibernate_Missing_Version_Test extends AbstractCDOTest
+{
+  @Override
+  protected void doSetUp() throws Exception
+  {
+    disableConsole();
+    super.doSetUp();
+    skipStoreWithoutRawAccess();
+  }
+
+  @Override
+  protected void doTearDown() throws Exception
+  {
+    disableConsole();
+    super.doTearDown();
+  }
+
+  public void testVersionChange() throws Exception
+  {
+    CDOSession session = openSession();
+    Customer lastCustomer = null;
+    {
+      CDOTransaction transaction = session.openTransaction();
+      CDOResource resource = transaction.createResource(getResourcePath("/res1"));
+      Customer customer = getModel1Factory().createCustomer();
+      customer.setName("Martin");
+      resource.getContents().add(customer);
+      transaction.commit();
+      lastCustomer = customer;
+    }
+    {
+      CDOTransaction transaction = session.openTransaction();
+      Customer customer = transaction.getObject(lastCustomer);// (Customer)resource.getContents().get(0);
+      customer.setName("Eike");
+      assertEquals(1, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      transaction.commit();
+      assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      lastCustomer = customer;
+    }
+    {
+      CDOTransaction transaction = session.openTransaction();
+      Customer customer = lastCustomer; // transaction.getObject(lastCustomer);//
+      // (Customer)resource.getContents().get(0);
+      customer.setName("Peter");
+      assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      transaction.commit();
+      // assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      lastCustomer = customer;
+    }
+    getRepository().getRevisionManager().getCache().clear();
+
+    // now go to another repo
+    InternalRepository repo2 = getRepository("repo2", true);
+    repo2.getRevisionManager().getCache().clear();
+    {
+      CDOSession session2 = openSession("repo2");
+      CDOTransaction transaction = session2.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      Customer customer = (Customer)resource.getContents().get(0);
+      customer.setName("John");
+      assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      transaction.commit();
+      assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      session2.close();
+    }
+    {
+      CDOSession session2 = openSession("repo2");
+      CDOTransaction transaction = session2.openTransaction();
+      CDOResource resource = transaction.getResource(getResourcePath("/res1"));
+      Customer customer = (Customer)resource.getContents().get(0);
+      customer.setName("Mike");
+      assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      transaction.commit();
+      assertEquals(5, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
+      session2.close();
+    }
+    {
+      CDOSession session2 = openSession("repo2");
+      CDOView view = session2.openView();
+      CDOResource resource = view.getResource(getResourcePath("/res1"));
+      Customer customer = (Customer)resource.getContents().get(0);
+
+      assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 4));
+      assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 3));
+      assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 2));
+      assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 1));
+
+      CDOObjectHistory history = getCDOObjectHistory(view, customer);
+      assertEquals(5, history.getElements().length);
+      // for (CDOCommitInfo cdoCommitInfo : history.getElements())
+      // {
+      //
+      // }
+      view.close();
+      session2.close();
+    }
+  }
+
+  private synchronized CDOObjectHistory getCDOObjectHistory(CDOView audit, Object object)
+  {
+    CDOObjectHistory cdoObjectHistory = audit.getHistory((CDOObject)object);
+    cdoObjectHistory.triggerLoad();
+    long startTime = System.currentTimeMillis();
+    while (cdoObjectHistory.isLoading())
+    {
+      ConcurrencyUtil.sleep(10);
+
+      // waited too long
+      if (System.currentTimeMillis() - startTime > 5000)
+      {
+        throw new IllegalStateException("commit info could not be loaded");
+      }
+    }
+    return cdoObjectHistory;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml
new file mode 100644
index 0000000..d180ab0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/cdo_hibernate.persistence.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<persistence-mapping xmlns="http://www.eclipse.org/emft/teneo"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model6/1.0.0">
+
+		<eclass name="UnsettableAttributes">
+			<property name="attrJavaClass">
+				<type type="string"/>
+			</property>
+		</eclass>
+
+		<eclass name="RefSingleNonContainedNPL">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+	
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model4/1.0.0">
+
+		<eclass name="GenRefSingleNonContained">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+
+		<eclass name="RefSingleNonContainedNPL">
+			<property name="element">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+
+	<epackage namespace-uri="http://www.eclipse.org/emf/CDO/tests/model1/1.0.0">
+
+		<eclass name="Company">
+			<property name="customers">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="SalesOrder">
+			<property name="customer">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="PurchaseOrder">
+			<property name="supplier">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+		<eclass name="Supplier">
+			<property name="purchaseOrders">
+				<external>org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDExternalUserType</external>
+			</property>
+		</eclass>
+	</epackage>
+
+</persistence-mapping>
\ No newline at end of file
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.java
new file mode 100644
index 0000000..7beebf5
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Main.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz356181 Main</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransient <em>Transient</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getNonTransient <em>Non Transient</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientRef <em>Transient Ref</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientOtherRef <em>Transient Other Ref</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Main()
+ * @model
+ * @generated
+ */
+public interface Bz356181_Main extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Transient</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Transient</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Transient</em>' attribute.
+   * @see #setTransient(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Main_Transient()
+   * @model annotation="teneo.jpa value='@Transient'"
+   * @generated
+   */
+  String getTransient();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransient <em>Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Transient</em>' attribute.
+   * @see #getTransient()
+   * @generated
+   */
+  void setTransient(String value);
+
+  /**
+   * Returns the value of the '<em><b>Non Transient</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Non Transient</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Non Transient</em>' attribute.
+   * @see #setNonTransient(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Main_NonTransient()
+   * @model
+   * @generated
+   */
+  String getNonTransient();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getNonTransient <em>Non Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Non Transient</em>' attribute.
+   * @see #getNonTransient()
+   * @generated
+   */
+  void setNonTransient(String value);
+
+  /**
+   * Returns the value of the '<em><b>Transient Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Transient Ref</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Transient Ref</em>' reference.
+   * @see #setTransientRef(Bz356181_Transient)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Main_TransientRef()
+   * @model transient="true"
+   * @generated
+   */
+  Bz356181_Transient getTransientRef();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientRef <em>Transient Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Transient Ref</em>' reference.
+   * @see #getTransientRef()
+   * @generated
+   */
+  void setTransientRef(Bz356181_Transient value);
+
+  /**
+   * Returns the value of the '<em><b>Transient Other Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Transient Other Ref</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Transient Other Ref</em>' reference.
+   * @see #setTransientOtherRef(Bz356181_NonTransient)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Main_TransientOtherRef()
+   * @model transient="true"
+   * @generated
+   */
+  Bz356181_NonTransient getTransientOtherRef();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientOtherRef <em>Transient Other Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Transient Other Ref</em>' reference.
+   * @see #getTransientOtherRef()
+   * @generated
+   */
+  void setTransientOtherRef(Bz356181_NonTransient value);
+
+} // Bz356181_Main
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.java
new file mode 100644
index 0000000..9f84bcf
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_NonTransient.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz356181 Non Transient</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient#getMain <em>Main</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_NonTransient()
+ * @model
+ * @generated
+ */
+public interface Bz356181_NonTransient extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Main</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Main</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Main</em>' reference.
+   * @see #setMain(Bz356181_Main)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_NonTransient_Main()
+   * @model
+   * @generated
+   */
+  Bz356181_Main getMain();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient#getMain <em>Main</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Main</em>' reference.
+   * @see #getMain()
+   * @generated
+   */
+  void setMain(Bz356181_Main value);
+
+} // Bz356181_NonTransient
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.java
new file mode 100644
index 0000000..32a00d1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz356181_Transient.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz356181 Transient</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz356181_Transient()
+ * @model annotation="teneo.jpa value='@Transient'"
+ * @generated
+ */
+public interface Bz356181_Transient extends EObject
+{
+
+} // Bz356181_Transient
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.java
new file mode 100644
index 0000000..62a4bd7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Group.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz380987 Group</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group#getPeople <em>People</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Group()
+ * @model
+ * @generated
+ */
+public interface Bz380987_Group extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>People</b></em>' reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getGroup <em>Group</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>People</em>' reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>People</em>' reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Group_People()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getGroup
+   * @model opposite="group"
+   * @generated
+   */
+  EList<Bz380987_Person> getPeople();
+
+} // Bz380987_Group
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.java
new file mode 100644
index 0000000..6d0f792
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Person.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz380987 Person</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getPlaces <em>Places</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Person()
+ * @model
+ * @generated
+ */
+public interface Bz380987_Person extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Person_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Group</b></em>' reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group#getPeople <em>People</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Group</em>' reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Group</em>' reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Person_Group()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group#getPeople
+   * @model opposite="people"
+   * @generated
+   */
+  EList<Bz380987_Group> getGroup();
+
+  /**
+   * Returns the value of the '<em><b>Places</b></em>' reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getPeople <em>People</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Places</em>' reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Places</em>' reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Person_Places()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getPeople
+   * @model opposite="people"
+   * @generated
+   */
+  EList<Bz380987_Place> getPlaces();
+
+} // Bz380987_Person
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.java
new file mode 100644
index 0000000..720d45f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz380987_Place.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz380987 Place</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getPeople <em>People</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Place()
+ * @model
+ * @generated
+ */
+public interface Bz380987_Place extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Place_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>People</b></em>' reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getPlaces <em>Places</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>People</em>' reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>People</em>' reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz380987_Place_People()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getPlaces
+   * @model opposite="places"
+   * @generated
+   */
+  EList<Bz380987_Person> getPeople();
+
+} // Bz380987_Place
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.java
new file mode 100644
index 0000000..a510172
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Enum.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Bz387752 Enum</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Enum()
+ * @model
+ * @generated
+ */
+public enum Bz387752_Enum implements Enumerator
+{
+  /**
+   * The '<em><b>VAL0</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #VAL0_VALUE
+   * @generated
+   * @ordered
+   */
+  VAL0(0, "VAL0", "VAL0"),
+
+  /**
+   * The '<em><b>VAL1</b></em>' literal object.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #VAL1_VALUE
+   * @generated
+   * @ordered
+   */
+  VAL1(1, "VAL1", "VAL1");
+
+  /**
+   * The '<em><b>VAL0</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>VAL0</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #VAL0
+   * @model
+   * @generated
+   * @ordered
+   */
+  public static final int VAL0_VALUE = 0;
+
+  /**
+   * The '<em><b>VAL1</b></em>' literal value.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>VAL1</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @see #VAL1
+   * @model
+   * @generated
+   * @ordered
+   */
+  public static final int VAL1_VALUE = 1;
+
+  /**
+   * An array of all the '<em><b>Bz387752 Enum</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static final Bz387752_Enum[] VALUES_ARRAY = new Bz387752_Enum[] { VAL0, VAL1, };
+
+  /**
+   * A public read-only list of all the '<em><b>Bz387752 Enum</b></em>' enumerators.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static final List<Bz387752_Enum> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+   * Returns the '<em><b>Bz387752 Enum</b></em>' literal with the specified literal value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Bz387752_Enum get(String literal)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Bz387752_Enum result = VALUES_ARRAY[i];
+      if (result.toString().equals(literal))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Bz387752 Enum</b></em>' literal with the specified name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Bz387752_Enum getByName(String name)
+  {
+    for (int i = 0; i < VALUES_ARRAY.length; ++i)
+    {
+      Bz387752_Enum result = VALUES_ARRAY[i];
+      if (result.getName().equals(name))
+      {
+        return result;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns the '<em><b>Bz387752 Enum</b></em>' literal with the specified integer value.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static Bz387752_Enum get(int value)
+  {
+    switch (value)
+    {
+    case VAL0_VALUE:
+      return VAL0;
+    case VAL1_VALUE:
+      return VAL1;
+    }
+    return null;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final int value;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String name;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private final String literal;
+
+  /**
+   * Only this class can construct instances.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private Bz387752_Enum(int value, String name, String literal)
+  {
+    this.value = value;
+    this.name = name;
+    this.literal = literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * Returns the literal value of the enumerator, which is its string representation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    return literal;
+  }
+
+} // Bz387752_Enum
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.java
new file mode 100644
index 0000000..a274ea2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz387752_Main.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz387752 Main</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable <em>Str Unsettable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrSettable <em>Str Settable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumSettable <em>Enum Settable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable <em>Enum Unsettable</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Main()
+ * @model
+ * @generated
+ */
+public interface Bz387752_Main extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Str Unsettable</b></em>' attribute.
+   * The default value is <code>"def_value"</code>.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Str Unsettable</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Str Unsettable</em>' attribute.
+   * @see #isSetStrUnsettable()
+   * @see #unsetStrUnsettable()
+   * @see #setStrUnsettable(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Main_StrUnsettable()
+   * @model default="def_value" unsettable="true"
+   * @generated
+   */
+  String getStrUnsettable();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable <em>Str Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Str Unsettable</em>' attribute.
+   * @see #isSetStrUnsettable()
+   * @see #unsetStrUnsettable()
+   * @see #getStrUnsettable()
+   * @generated
+   */
+  void setStrUnsettable(String value);
+
+  /**
+   * Unsets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable <em>Str Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isSetStrUnsettable()
+   * @see #getStrUnsettable()
+   * @see #setStrUnsettable(String)
+   * @generated
+   */
+  void unsetStrUnsettable();
+
+  /**
+   * Returns whether the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable <em>Str Unsettable</em>}' attribute is set.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return whether the value of the '<em>Str Unsettable</em>' attribute is set.
+   * @see #unsetStrUnsettable()
+   * @see #getStrUnsettable()
+   * @see #setStrUnsettable(String)
+   * @generated
+   */
+  boolean isSetStrUnsettable();
+
+  /**
+   * Returns the value of the '<em><b>Str Settable</b></em>' attribute.
+   * The default value is <code>"value"</code>.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Str Settable</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Str Settable</em>' attribute.
+   * @see #setStrSettable(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Main_StrSettable()
+   * @model default="value"
+   * @generated
+   */
+  String getStrSettable();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrSettable <em>Str Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Str Settable</em>' attribute.
+   * @see #getStrSettable()
+   * @generated
+   */
+  void setStrSettable(String value);
+
+  /**
+   * Returns the value of the '<em><b>Enum Settable</b></em>' attribute.
+   * The literals are from the enumeration {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Enum Settable</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Enum Settable</em>' attribute.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @see #setEnumSettable(Bz387752_Enum)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Main_EnumSettable()
+   * @model
+   * @generated
+   */
+  Bz387752_Enum getEnumSettable();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumSettable <em>Enum Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Enum Settable</em>' attribute.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @see #getEnumSettable()
+   * @generated
+   */
+  void setEnumSettable(Bz387752_Enum value);
+
+  /**
+   * Returns the value of the '<em><b>Enum Unsettable</b></em>' attribute.
+   * The default value is <code>"VAL1"</code>.
+   * The literals are from the enumeration {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Enum Unsettable</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Enum Unsettable</em>' attribute.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @see #isSetEnumUnsettable()
+   * @see #unsetEnumUnsettable()
+   * @see #setEnumUnsettable(Bz387752_Enum)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz387752_Main_EnumUnsettable()
+   * @model default="VAL1" unsettable="true"
+   * @generated
+   */
+  Bz387752_Enum getEnumUnsettable();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable <em>Enum Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Enum Unsettable</em>' attribute.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @see #isSetEnumUnsettable()
+   * @see #unsetEnumUnsettable()
+   * @see #getEnumUnsettable()
+   * @generated
+   */
+  void setEnumUnsettable(Bz387752_Enum value);
+
+  /**
+   * Unsets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable <em>Enum Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isSetEnumUnsettable()
+   * @see #getEnumUnsettable()
+   * @see #setEnumUnsettable(Bz387752_Enum)
+   * @generated
+   */
+  void unsetEnumUnsettable();
+
+  /**
+   * Returns whether the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable <em>Enum Unsettable</em>}' attribute is set.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return whether the value of the '<em>Enum Unsettable</em>' attribute is set.
+   * @see #unsetEnumUnsettable()
+   * @see #getEnumUnsettable()
+   * @see #setEnumUnsettable(Bz387752_Enum)
+   * @generated
+   */
+  boolean isSetEnumUnsettable();
+
+} // Bz387752_Main
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.java
new file mode 100644
index 0000000..359cbf8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682C.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz397682 C</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP <em>Ref To P</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToC <em>Ref To C</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682C()
+ * @model
+ * @generated
+ */
+public interface Bz397682C extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Ref To P</b></em>' container reference.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getListOfC <em>List Of C</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ref To P</em>' container reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ref To P</em>' container reference.
+   * @see #setRefToP(Bz397682P)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682C_RefToP()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getListOfC
+   * @model opposite="listOfC" transient="false"
+   * @generated
+   */
+  Bz397682P getRefToP();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP <em>Ref To P</em>}' container reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ref To P</em>' container reference.
+   * @see #getRefToP()
+   * @generated
+   */
+  void setRefToP(Bz397682P value);
+
+  /**
+   * Returns the value of the '<em><b>Ref To C</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ref To C</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ref To C</em>' reference.
+   * @see #setRefToC(Bz397682C)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682C_RefToC()
+   * @model
+   * @generated
+   */
+  Bz397682C getRefToC();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToC <em>Ref To C</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ref To C</em>' reference.
+   * @see #getRefToC()
+   * @generated
+   */
+  void setRefToC(Bz397682C value);
+
+  /**
+   * Returns the value of the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Db Id</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Db Id</em>' attribute.
+   * @see #setDbId(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682C_DbId()
+   * @model required="true"
+   *        annotation="teneo.jpa value='@Id'"
+   * @generated
+   */
+  String getDbId();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getDbId <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Db Id</em>' attribute.
+   * @see #getDbId()
+   * @generated
+   */
+  void setDbId(String value);
+
+} // Bz397682C
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.java
new file mode 100644
index 0000000..626ab1c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz397682P.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz397682 P</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getDbId <em>Db Id</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getListOfC <em>List Of C</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682P()
+ * @model annotation="teneo.jpa value='@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)'"
+ * @generated
+ */
+public interface Bz397682P extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Db Id</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Db Id</em>' attribute.
+   * @see #setDbId(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682P_DbId()
+   * @model required="true"
+   *        annotation="teneo.jpa value='@Id'"
+   * @generated
+   */
+  String getDbId();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getDbId <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Db Id</em>' attribute.
+   * @see #getDbId()
+   * @generated
+   */
+  void setDbId(String value);
+
+  /**
+   * Returns the value of the '<em><b>List Of C</b></em>' containment reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP <em>Ref To P</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>List Of C</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>List Of C</em>' containment reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz397682P_ListOfC()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP
+   * @model opposite="refToP" containment="true"
+   * @generated
+   */
+  EList<Bz397682C> getListOfC();
+
+} // Bz397682P
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.java
new file mode 100644
index 0000000..bf43d18
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz398057 A</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getListOfB <em>List Of B</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057A()
+ * @model annotation="teneo.jpa value='@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)'"
+ * @generated
+ */
+public interface Bz398057A extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>List Of B</b></em>' containment reference list.
+   * The list contents are of type {@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B}.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA <em>Ref To Class A</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>List Of B</em>' reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>List Of B</em>' containment reference list.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057A_ListOfB()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA
+   * @model opposite="refToClassA" containment="true"
+   * @generated
+   */
+  EList<Bz398057B> getListOfB();
+
+  /**
+   * Returns the value of the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Db Id</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Db Id</em>' attribute.
+   * @see #setDbId(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057A_DbId()
+   * @model required="true"
+   *        annotation="teneo.jpa value='@Id'"
+   * @generated
+   */
+  String getDbId();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getDbId <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Db Id</em>' attribute.
+   * @see #getDbId()
+   * @generated
+   */
+  void setDbId(String value);
+
+} // Bz398057A
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.java
new file mode 100644
index 0000000..c9ec9ea
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057A1.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz398057 A1</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057A1()
+ * @model
+ * @generated
+ */
+public interface Bz398057A1 extends Bz398057A
+{
+} // Bz398057A1
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.java
new file mode 100644
index 0000000..15ce285
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz398057 B</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA <em>Ref To Class A</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B()
+ * @model annotation="teneo.jpa value='@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)'"
+ * @generated
+ */
+public interface Bz398057B extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Ref To Class A</b></em>' container reference.
+   * It is bidirectional and its opposite is '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getListOfB <em>List Of B</em>}'.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ref To Class A</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ref To Class A</em>' container reference.
+   * @see #setRefToClassA(Bz398057A)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B_RefToClassA()
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getListOfB
+   * @model opposite="listOfB" transient="false"
+   * @generated
+   */
+  Bz398057A getRefToClassA();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA <em>Ref To Class A</em>}' container reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ref To Class A</em>' container reference.
+   * @see #getRefToClassA()
+   * @generated
+   */
+  void setRefToClassA(Bz398057A value);
+
+  /**
+   * Returns the value of the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Value</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Value</em>' attribute.
+   * @see #setValue(double)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B_Value()
+   * @model
+   * @generated
+   */
+  double getValue();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getValue <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value</em>' attribute.
+   * @see #getValue()
+   * @generated
+   */
+  void setValue(double value);
+
+  /**
+   * Returns the value of the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Db Id</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Db Id</em>' attribute.
+   * @see #setDbId(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B_DbId()
+   * @model required="true"
+   *        annotation="teneo.jpa value='@Id'"
+   * @generated
+   */
+  String getDbId();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getDbId <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Db Id</em>' attribute.
+   * @see #getDbId()
+   * @generated
+   */
+  void setDbId(String value);
+
+} // Bz398057B
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.java
new file mode 100644
index 0000000..79e210b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/Bz398057B1.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bz398057 B1</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1#getValueStr <em>Value Str</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B1()
+ * @model
+ * @generated
+ */
+public interface Bz398057B1 extends Bz398057B
+{
+
+  /**
+   * Returns the value of the '<em><b>Value Str</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Value Str</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Value Str</em>' attribute.
+   * @see #setValueStr(String)
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#getBz398057B1_ValueStr()
+   * @model
+   * @generated
+   */
+  String getValueStr();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1#getValueStr <em>Value Str</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Value Str</em>' attribute.
+   * @see #getValueStr()
+   * @generated
+   */
+  void setValueStr(String value);
+} // Bz398057B1
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.java
new file mode 100644
index 0000000..222eeb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestFactory.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2012, 2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage
+ * @generated
+ */
+public interface HibernateTestFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  HibernateTestFactory eINSTANCE = org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Bz356181 Main</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz356181 Main</em>'.
+   * @generated
+   */
+  Bz356181_Main createBz356181_Main();
+
+  /**
+   * Returns a new object of class '<em>Bz356181 Transient</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz356181 Transient</em>'.
+   * @generated
+   */
+  Bz356181_Transient createBz356181_Transient();
+
+  /**
+   * Returns a new object of class '<em>Bz356181 Non Transient</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz356181 Non Transient</em>'.
+   * @generated
+   */
+  Bz356181_NonTransient createBz356181_NonTransient();
+
+  /**
+   * Returns a new object of class '<em>Bz387752 Main</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz387752 Main</em>'.
+   * @generated
+   */
+  Bz387752_Main createBz387752_Main();
+
+  /**
+   * Returns a new object of class '<em>Bz380987 Group</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz380987 Group</em>'.
+   * @generated
+   */
+  Bz380987_Group createBz380987_Group();
+
+  /**
+   * Returns a new object of class '<em>Bz380987 Place</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz380987 Place</em>'.
+   * @generated
+   */
+  Bz380987_Place createBz380987_Place();
+
+  /**
+   * Returns a new object of class '<em>Bz380987 Person</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz380987 Person</em>'.
+   * @generated
+   */
+  Bz380987_Person createBz380987_Person();
+
+  /**
+   * Returns a new object of class '<em>Bz398057 A</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz398057 A</em>'.
+   * @generated
+   */
+  Bz398057A createBz398057A();
+
+  /**
+   * Returns a new object of class '<em>Bz398057 A1</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz398057 A1</em>'.
+   * @generated
+   */
+  Bz398057A1 createBz398057A1();
+
+  /**
+   * Returns a new object of class '<em>Bz398057 B</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz398057 B</em>'.
+   * @generated
+   */
+  Bz398057B createBz398057B();
+
+  /**
+   * Returns a new object of class '<em>Bz398057 B1</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz398057 B1</em>'.
+   * @generated
+   */
+  Bz398057B1 createBz398057B1();
+
+  /**
+   * Returns a new object of class '<em>Bz397682 P</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz397682 P</em>'.
+   * @generated
+   */
+  Bz397682P createBz397682P();
+
+  /**
+   * Returns a new object of class '<em>Bz397682 C</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bz397682 C</em>'.
+   * @generated
+   */
+  Bz397682C createBz397682C();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  HibernateTestPackage getHibernateTestPackage();
+
+} // HibernateTestFactory
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.java
new file mode 100644
index 0000000..21461a9
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/HibernateTestPackage.java
@@ -0,0 +1,1403 @@
+/*
+ * Copyright (c) 2012, 2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface HibernateTestPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "HibernateTest";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://org.eclipse.emf.cdo.tests.hibernate";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "hibernatetests";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  HibernateTestPackage eINSTANCE = org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl <em>Bz356181 Main</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_Main()
+   * @generated
+   */
+  int BZ356181_MAIN = 0;
+
+  /**
+   * The feature id for the '<em><b>Transient</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_MAIN__TRANSIENT = 0;
+
+  /**
+   * The feature id for the '<em><b>Non Transient</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_MAIN__NON_TRANSIENT = 1;
+
+  /**
+   * The feature id for the '<em><b>Transient Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_MAIN__TRANSIENT_REF = 2;
+
+  /**
+   * The feature id for the '<em><b>Transient Other Ref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_MAIN__TRANSIENT_OTHER_REF = 3;
+
+  /**
+   * The number of structural features of the '<em>Bz356181 Main</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_MAIN_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_TransientImpl <em>Bz356181 Transient</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_TransientImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_Transient()
+   * @generated
+   */
+  int BZ356181_TRANSIENT = 1;
+
+  /**
+   * The number of structural features of the '<em>Bz356181 Transient</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_TRANSIENT_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_NonTransientImpl <em>Bz356181 Non Transient</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_NonTransientImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_NonTransient()
+   * @generated
+   */
+  int BZ356181_NON_TRANSIENT = 2;
+
+  /**
+   * The feature id for the '<em><b>Main</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_NON_TRANSIENT__MAIN = 0;
+
+  /**
+   * The number of structural features of the '<em>Bz356181 Non Transient</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ356181_NON_TRANSIENT_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl <em>Bz387752 Main</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz387752_Main()
+   * @generated
+   */
+  int BZ387752_MAIN = 3;
+
+  /**
+   * The feature id for the '<em><b>Str Unsettable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ387752_MAIN__STR_UNSETTABLE = 0;
+
+  /**
+   * The feature id for the '<em><b>Str Settable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ387752_MAIN__STR_SETTABLE = 1;
+
+  /**
+   * The feature id for the '<em><b>Enum Settable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ387752_MAIN__ENUM_SETTABLE = 2;
+
+  /**
+   * The feature id for the '<em><b>Enum Unsettable</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ387752_MAIN__ENUM_UNSETTABLE = 3;
+
+  /**
+   * The number of structural features of the '<em>Bz387752 Main</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ387752_MAIN_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_GroupImpl <em>Bz380987 Group</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_GroupImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Group()
+   * @generated
+   */
+  int BZ380987_GROUP = 4;
+
+  /**
+   * The feature id for the '<em><b>People</b></em>' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_GROUP__PEOPLE = 0;
+
+  /**
+   * The number of structural features of the '<em>Bz380987 Group</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_GROUP_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl <em>Bz380987 Place</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Place()
+   * @generated
+   */
+  int BZ380987_PLACE = 5;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PLACE__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>People</b></em>' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PLACE__PEOPLE = 1;
+
+  /**
+   * The number of structural features of the '<em>Bz380987 Place</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PLACE_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl <em>Bz380987 Person</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Person()
+   * @generated
+   */
+  int BZ380987_PERSON = 6;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PERSON__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Group</b></em>' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PERSON__GROUP = 1;
+
+  /**
+   * The feature id for the '<em><b>Places</b></em>' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PERSON__PLACES = 2;
+
+  /**
+   * The number of structural features of the '<em>Bz380987 Person</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ380987_PERSON_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl <em>Bz398057 A</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057A()
+   * @generated
+   */
+  int BZ398057_A = 7;
+
+  /**
+   * The feature id for the '<em><b>List Of B</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A__LIST_OF_B = 0;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A__DB_ID = 1;
+
+  /**
+   * The number of structural features of the '<em>Bz398057 A</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057A1Impl <em>Bz398057 A1</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057A1Impl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057A1()
+   * @generated
+   */
+  int BZ398057_A1 = 8;
+
+  /**
+   * The feature id for the '<em><b>List Of B</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A1__LIST_OF_B = BZ398057_A__LIST_OF_B;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A1__DB_ID = BZ398057_A__DB_ID;
+
+  /**
+   * The number of structural features of the '<em>Bz398057 A1</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_A1_FEATURE_COUNT = BZ398057_A_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl <em>Bz398057 B</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057B()
+   * @generated
+   */
+  int BZ398057_B = 9;
+
+  /**
+   * The feature id for the '<em><b>Ref To Class A</b></em>' container reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B__REF_TO_CLASS_A = 0;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B__VALUE = 1;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B__DB_ID = 2;
+
+  /**
+   * The number of structural features of the '<em>Bz398057 B</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057B1Impl <em>Bz398057 B1</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057B1Impl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057B1()
+   * @generated
+   */
+  int BZ398057_B1 = 10;
+
+  /**
+   * The feature id for the '<em><b>Ref To Class A</b></em>' container reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B1__REF_TO_CLASS_A = BZ398057_B__REF_TO_CLASS_A;
+
+  /**
+   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B1__VALUE = BZ398057_B__VALUE;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B1__DB_ID = BZ398057_B__DB_ID;
+
+  /**
+   * The feature id for the '<em><b>Value Str</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B1__VALUE_STR = BZ398057_B_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Bz398057 B1</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ398057_B1_FEATURE_COUNT = BZ398057_B_FEATURE_COUNT + 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl <em>Bz397682 P</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz397682P()
+   * @generated
+   */
+  int BZ397682_P = 11;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_P__DB_ID = 0;
+
+  /**
+   * The feature id for the '<em><b>List Of C</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_P__LIST_OF_C = 1;
+
+  /**
+   * The number of structural features of the '<em>Bz397682 P</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_P_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl <em>Bz397682 C</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz397682C()
+   * @generated
+   */
+  int BZ397682_C = 12;
+
+  /**
+   * The feature id for the '<em><b>Ref To P</b></em>' container reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_C__REF_TO_P = 0;
+
+  /**
+   * The feature id for the '<em><b>Ref To C</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_C__REF_TO_C = 1;
+
+  /**
+   * The feature id for the '<em><b>Db Id</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_C__DB_ID = 2;
+
+  /**
+   * The number of structural features of the '<em>Bz397682 C</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BZ397682_C_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum <em>Bz387752 Enum</em>}' enum.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz387752_Enum()
+   * @generated
+   */
+  int BZ387752_ENUM = 13;
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main <em>Bz356181 Main</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz356181 Main</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main
+   * @generated
+   */
+  EClass getBz356181_Main();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransient <em>Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Transient</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransient()
+   * @see #getBz356181_Main()
+   * @generated
+   */
+  EAttribute getBz356181_Main_Transient();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getNonTransient <em>Non Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Non Transient</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getNonTransient()
+   * @see #getBz356181_Main()
+   * @generated
+   */
+  EAttribute getBz356181_Main_NonTransient();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientRef <em>Transient Ref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Transient Ref</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientRef()
+   * @see #getBz356181_Main()
+   * @generated
+   */
+  EReference getBz356181_Main_TransientRef();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientOtherRef <em>Transient Other Ref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Transient Other Ref</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main#getTransientOtherRef()
+   * @see #getBz356181_Main()
+   * @generated
+   */
+  EReference getBz356181_Main_TransientOtherRef();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient <em>Bz356181 Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz356181 Transient</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient
+   * @generated
+   */
+  EClass getBz356181_Transient();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient <em>Bz356181 Non Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz356181 Non Transient</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient
+   * @generated
+   */
+  EClass getBz356181_NonTransient();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient#getMain <em>Main</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Main</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient#getMain()
+   * @see #getBz356181_NonTransient()
+   * @generated
+   */
+  EReference getBz356181_NonTransient_Main();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main <em>Bz387752 Main</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz387752 Main</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main
+   * @generated
+   */
+  EClass getBz387752_Main();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable <em>Str Unsettable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Str Unsettable</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrUnsettable()
+   * @see #getBz387752_Main()
+   * @generated
+   */
+  EAttribute getBz387752_Main_StrUnsettable();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrSettable <em>Str Settable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Str Settable</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getStrSettable()
+   * @see #getBz387752_Main()
+   * @generated
+   */
+  EAttribute getBz387752_Main_StrSettable();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumSettable <em>Enum Settable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Enum Settable</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumSettable()
+   * @see #getBz387752_Main()
+   * @generated
+   */
+  EAttribute getBz387752_Main_EnumSettable();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable <em>Enum Unsettable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Enum Unsettable</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main#getEnumUnsettable()
+   * @see #getBz387752_Main()
+   * @generated
+   */
+  EAttribute getBz387752_Main_EnumUnsettable();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group <em>Bz380987 Group</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz380987 Group</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group
+   * @generated
+   */
+  EClass getBz380987_Group();
+
+  /**
+   * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group#getPeople <em>People</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference list '<em>People</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group#getPeople()
+   * @see #getBz380987_Group()
+   * @generated
+   */
+  EReference getBz380987_Group_People();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place <em>Bz380987 Place</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz380987 Place</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place
+   * @generated
+   */
+  EClass getBz380987_Place();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getName()
+   * @see #getBz380987_Place()
+   * @generated
+   */
+  EAttribute getBz380987_Place_Name();
+
+  /**
+   * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getPeople <em>People</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference list '<em>People</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place#getPeople()
+   * @see #getBz380987_Place()
+   * @generated
+   */
+  EReference getBz380987_Place_People();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person <em>Bz380987 Person</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz380987 Person</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person
+   * @generated
+   */
+  EClass getBz380987_Person();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getName()
+   * @see #getBz380987_Person()
+   * @generated
+   */
+  EAttribute getBz380987_Person_Name();
+
+  /**
+   * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getGroup <em>Group</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference list '<em>Group</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getGroup()
+   * @see #getBz380987_Person()
+   * @generated
+   */
+  EReference getBz380987_Person_Group();
+
+  /**
+   * Returns the meta object for the reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getPlaces <em>Places</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference list '<em>Places</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person#getPlaces()
+   * @see #getBz380987_Person()
+   * @generated
+   */
+  EReference getBz380987_Person_Places();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A <em>Bz398057 A</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz398057 A</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A
+   * @generated
+   */
+  EClass getBz398057A();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getListOfB <em>List Of B</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>List Of B</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getListOfB()
+   * @see #getBz398057A()
+   * @generated
+   */
+  EReference getBz398057A_ListOfB();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getDbId <em>Db Id</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Db Id</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A#getDbId()
+   * @see #getBz398057A()
+   * @generated
+   */
+  EAttribute getBz398057A_DbId();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1 <em>Bz398057 A1</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz398057 A1</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1
+   * @generated
+   */
+  EClass getBz398057A1();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B <em>Bz398057 B</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz398057 B</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B
+   * @generated
+   */
+  EClass getBz398057B();
+
+  /**
+   * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA <em>Ref To Class A</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the container reference '<em>Ref To Class A</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getRefToClassA()
+   * @see #getBz398057B()
+   * @generated
+   */
+  EReference getBz398057B_RefToClassA();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getValue()
+   * @see #getBz398057B()
+   * @generated
+   */
+  EAttribute getBz398057B_Value();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getDbId <em>Db Id</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Db Id</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B#getDbId()
+   * @see #getBz398057B()
+   * @generated
+   */
+  EAttribute getBz398057B_DbId();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1 <em>Bz398057 B1</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz398057 B1</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1
+   * @generated
+   */
+  EClass getBz398057B1();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1#getValueStr <em>Value Str</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value Str</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1#getValueStr()
+   * @see #getBz398057B1()
+   * @generated
+   */
+  EAttribute getBz398057B1_ValueStr();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P <em>Bz397682 P</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz397682 P</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P
+   * @generated
+   */
+  EClass getBz397682P();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getDbId <em>Db Id</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Db Id</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getDbId()
+   * @see #getBz397682P()
+   * @generated
+   */
+  EAttribute getBz397682P_DbId();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getListOfC <em>List Of C</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>List Of C</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P#getListOfC()
+   * @see #getBz397682P()
+   * @generated
+   */
+  EReference getBz397682P_ListOfC();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C <em>Bz397682 C</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bz397682 C</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C
+   * @generated
+   */
+  EClass getBz397682C();
+
+  /**
+   * Returns the meta object for the container reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP <em>Ref To P</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the container reference '<em>Ref To P</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToP()
+   * @see #getBz397682C()
+   * @generated
+   */
+  EReference getBz397682C_RefToP();
+
+  /**
+   * Returns the meta object for the reference '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToC <em>Ref To C</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Ref To C</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getRefToC()
+   * @see #getBz397682C()
+   * @generated
+   */
+  EReference getBz397682C_RefToC();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getDbId <em>Db Id</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Db Id</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C#getDbId()
+   * @see #getBz397682C()
+   * @generated
+   */
+  EAttribute getBz397682C_DbId();
+
+  /**
+   * Returns the meta object for enum '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum <em>Bz387752 Enum</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for enum '<em>Bz387752 Enum</em>'.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+   * @generated
+   */
+  EEnum getBz387752_Enum();
+
+  /**
+   * Returns the factory that creates the instances of the model.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the factory that creates the instances of the model.
+   * @generated
+   */
+  HibernateTestFactory getHibernateTestFactory();
+
+  /**
+   * <!-- begin-user-doc -->
+   * Defines literals for the meta objects that represent
+   * <ul>
+   *   <li>each class,</li>
+   *   <li>each feature of each class,</li>
+   *   <li>each enum,</li>
+   *   <li>and each data type</li>
+   * </ul>
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  interface Literals
+  {
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl <em>Bz356181 Main</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_Main()
+     * @generated
+     */
+    EClass BZ356181_MAIN = eINSTANCE.getBz356181_Main();
+
+    /**
+     * The meta object literal for the '<em><b>Transient</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ356181_MAIN__TRANSIENT = eINSTANCE.getBz356181_Main_Transient();
+
+    /**
+     * The meta object literal for the '<em><b>Non Transient</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ356181_MAIN__NON_TRANSIENT = eINSTANCE.getBz356181_Main_NonTransient();
+
+    /**
+     * The meta object literal for the '<em><b>Transient Ref</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ356181_MAIN__TRANSIENT_REF = eINSTANCE.getBz356181_Main_TransientRef();
+
+    /**
+     * The meta object literal for the '<em><b>Transient Other Ref</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ356181_MAIN__TRANSIENT_OTHER_REF = eINSTANCE.getBz356181_Main_TransientOtherRef();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_TransientImpl <em>Bz356181 Transient</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_TransientImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_Transient()
+     * @generated
+     */
+    EClass BZ356181_TRANSIENT = eINSTANCE.getBz356181_Transient();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_NonTransientImpl <em>Bz356181 Non Transient</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_NonTransientImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz356181_NonTransient()
+     * @generated
+     */
+    EClass BZ356181_NON_TRANSIENT = eINSTANCE.getBz356181_NonTransient();
+
+    /**
+     * The meta object literal for the '<em><b>Main</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ356181_NON_TRANSIENT__MAIN = eINSTANCE.getBz356181_NonTransient_Main();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl <em>Bz387752 Main</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz387752_Main()
+     * @generated
+     */
+    EClass BZ387752_MAIN = eINSTANCE.getBz387752_Main();
+
+    /**
+     * The meta object literal for the '<em><b>Str Unsettable</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ387752_MAIN__STR_UNSETTABLE = eINSTANCE.getBz387752_Main_StrUnsettable();
+
+    /**
+     * The meta object literal for the '<em><b>Str Settable</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ387752_MAIN__STR_SETTABLE = eINSTANCE.getBz387752_Main_StrSettable();
+
+    /**
+     * The meta object literal for the '<em><b>Enum Settable</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ387752_MAIN__ENUM_SETTABLE = eINSTANCE.getBz387752_Main_EnumSettable();
+
+    /**
+     * The meta object literal for the '<em><b>Enum Unsettable</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ387752_MAIN__ENUM_UNSETTABLE = eINSTANCE.getBz387752_Main_EnumUnsettable();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_GroupImpl <em>Bz380987 Group</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_GroupImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Group()
+     * @generated
+     */
+    EClass BZ380987_GROUP = eINSTANCE.getBz380987_Group();
+
+    /**
+     * The meta object literal for the '<em><b>People</b></em>' reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ380987_GROUP__PEOPLE = eINSTANCE.getBz380987_Group_People();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl <em>Bz380987 Place</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Place()
+     * @generated
+     */
+    EClass BZ380987_PLACE = eINSTANCE.getBz380987_Place();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ380987_PLACE__NAME = eINSTANCE.getBz380987_Place_Name();
+
+    /**
+     * The meta object literal for the '<em><b>People</b></em>' reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ380987_PLACE__PEOPLE = eINSTANCE.getBz380987_Place_People();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl <em>Bz380987 Person</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz380987_Person()
+     * @generated
+     */
+    EClass BZ380987_PERSON = eINSTANCE.getBz380987_Person();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ380987_PERSON__NAME = eINSTANCE.getBz380987_Person_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Group</b></em>' reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ380987_PERSON__GROUP = eINSTANCE.getBz380987_Person_Group();
+
+    /**
+     * The meta object literal for the '<em><b>Places</b></em>' reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ380987_PERSON__PLACES = eINSTANCE.getBz380987_Person_Places();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl <em>Bz398057 A</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057A()
+     * @generated
+     */
+    EClass BZ398057_A = eINSTANCE.getBz398057A();
+
+    /**
+     * The meta object literal for the '<em><b>List Of B</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ398057_A__LIST_OF_B = eINSTANCE.getBz398057A_ListOfB();
+
+    /**
+     * The meta object literal for the '<em><b>Db Id</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ398057_A__DB_ID = eINSTANCE.getBz398057A_DbId();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057A1Impl <em>Bz398057 A1</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057A1Impl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057A1()
+     * @generated
+     */
+    EClass BZ398057_A1 = eINSTANCE.getBz398057A1();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl <em>Bz398057 B</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057B()
+     * @generated
+     */
+    EClass BZ398057_B = eINSTANCE.getBz398057B();
+
+    /**
+     * The meta object literal for the '<em><b>Ref To Class A</b></em>' container reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ398057_B__REF_TO_CLASS_A = eINSTANCE.getBz398057B_RefToClassA();
+
+    /**
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ398057_B__VALUE = eINSTANCE.getBz398057B_Value();
+
+    /**
+     * The meta object literal for the '<em><b>Db Id</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ398057_B__DB_ID = eINSTANCE.getBz398057B_DbId();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057B1Impl <em>Bz398057 B1</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057B1Impl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz398057B1()
+     * @generated
+     */
+    EClass BZ398057_B1 = eINSTANCE.getBz398057B1();
+
+    /**
+     * The meta object literal for the '<em><b>Value Str</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ398057_B1__VALUE_STR = eINSTANCE.getBz398057B1_ValueStr();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl <em>Bz397682 P</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz397682P()
+     * @generated
+     */
+    EClass BZ397682_P = eINSTANCE.getBz397682P();
+
+    /**
+     * The meta object literal for the '<em><b>Db Id</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ397682_P__DB_ID = eINSTANCE.getBz397682P_DbId();
+
+    /**
+     * The meta object literal for the '<em><b>List Of C</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ397682_P__LIST_OF_C = eINSTANCE.getBz397682P_ListOfC();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl <em>Bz397682 C</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz397682C()
+     * @generated
+     */
+    EClass BZ397682_C = eINSTANCE.getBz397682C();
+
+    /**
+     * The meta object literal for the '<em><b>Ref To P</b></em>' container reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ397682_C__REF_TO_P = eINSTANCE.getBz397682C_RefToP();
+
+    /**
+     * The meta object literal for the '<em><b>Ref To C</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BZ397682_C__REF_TO_C = eINSTANCE.getBz397682C_RefToC();
+
+    /**
+     * The meta object literal for the '<em><b>Db Id</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute BZ397682_C__DB_ID = eINSTANCE.getBz397682C_DbId();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum <em>Bz387752 Enum</em>}' enum.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum
+     * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.HibernateTestPackageImpl#getBz387752_Enum()
+     * @generated
+     */
+    EEnum BZ387752_ENUM = eINSTANCE.getBz387752_Enum();
+
+  }
+
+} // HibernateTestPackage
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.java
new file mode 100644
index 0000000..867870e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_MainImpl.java
@@ -0,0 +1,394 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz356181 Main</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl#getTransient <em>Transient</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl#getNonTransient <em>Non Transient</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl#getTransientRef <em>Transient Ref</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_MainImpl#getTransientOtherRef <em>Transient Other Ref</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz356181_MainImpl extends EObjectImpl implements Bz356181_Main
+{
+  /**
+   * The default value of the '{@link #getTransient() <em>Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTransient()
+   * @generated
+   * @ordered
+   */
+  protected static final String TRANSIENT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getTransient() <em>Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTransient()
+   * @generated
+   * @ordered
+   */
+  protected String transient_ = TRANSIENT_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getNonTransient() <em>Non Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getNonTransient()
+   * @generated
+   * @ordered
+   */
+  protected static final String NON_TRANSIENT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getNonTransient() <em>Non Transient</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getNonTransient()
+   * @generated
+   * @ordered
+   */
+  protected String nonTransient = NON_TRANSIENT_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getTransientRef() <em>Transient Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTransientRef()
+   * @generated
+   * @ordered
+   */
+  protected Bz356181_Transient transientRef;
+
+  /**
+   * The cached value of the '{@link #getTransientOtherRef() <em>Transient Other Ref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTransientOtherRef()
+   * @generated
+   * @ordered
+   */
+  protected Bz356181_NonTransient transientOtherRef;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz356181_MainImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ356181_MAIN;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getTransient()
+  {
+    return transient_;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTransient(String newTransient)
+  {
+    String oldTransient = transient_;
+    transient_ = newTransient;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ356181_MAIN__TRANSIENT, oldTransient, transient_));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getNonTransient()
+  {
+    return nonTransient;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setNonTransient(String newNonTransient)
+  {
+    String oldNonTransient = nonTransient;
+    nonTransient = newNonTransient;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ356181_MAIN__NON_TRANSIENT, oldNonTransient, nonTransient));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Transient getTransientRef()
+  {
+    if (transientRef != null && transientRef.eIsProxy())
+    {
+      InternalEObject oldTransientRef = (InternalEObject)transientRef;
+      transientRef = (Bz356181_Transient)eResolveProxy(oldTransientRef);
+      if (transientRef != oldTransientRef)
+      {
+        if (eNotificationRequired())
+        {
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF, oldTransientRef, transientRef));
+        }
+      }
+    }
+    return transientRef;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Transient basicGetTransientRef()
+  {
+    return transientRef;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTransientRef(Bz356181_Transient newTransientRef)
+  {
+    Bz356181_Transient oldTransientRef = transientRef;
+    transientRef = newTransientRef;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF, oldTransientRef, transientRef));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_NonTransient getTransientOtherRef()
+  {
+    if (transientOtherRef != null && transientOtherRef.eIsProxy())
+    {
+      InternalEObject oldTransientOtherRef = (InternalEObject)transientOtherRef;
+      transientOtherRef = (Bz356181_NonTransient)eResolveProxy(oldTransientOtherRef);
+      if (transientOtherRef != oldTransientOtherRef)
+      {
+        if (eNotificationRequired())
+        {
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF, oldTransientOtherRef,
+              transientOtherRef));
+        }
+      }
+    }
+    return transientOtherRef;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_NonTransient basicGetTransientOtherRef()
+  {
+    return transientOtherRef;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTransientOtherRef(Bz356181_NonTransient newTransientOtherRef)
+  {
+    Bz356181_NonTransient oldTransientOtherRef = transientOtherRef;
+    transientOtherRef = newTransientOtherRef;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF, oldTransientOtherRef, transientOtherRef));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT:
+      return getTransient();
+    case HibernateTestPackage.BZ356181_MAIN__NON_TRANSIENT:
+      return getNonTransient();
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF:
+      if (resolve)
+      {
+        return getTransientRef();
+      }
+      return basicGetTransientRef();
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF:
+      if (resolve)
+      {
+        return getTransientOtherRef();
+      }
+      return basicGetTransientOtherRef();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT:
+      setTransient((String)newValue);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__NON_TRANSIENT:
+      setNonTransient((String)newValue);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF:
+      setTransientRef((Bz356181_Transient)newValue);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF:
+      setTransientOtherRef((Bz356181_NonTransient)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT:
+      setTransient(TRANSIENT_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__NON_TRANSIENT:
+      setNonTransient(NON_TRANSIENT_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF:
+      setTransientRef((Bz356181_Transient)null);
+      return;
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF:
+      setTransientOtherRef((Bz356181_NonTransient)null);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT:
+      return TRANSIENT_EDEFAULT == null ? transient_ != null : !TRANSIENT_EDEFAULT.equals(transient_);
+    case HibernateTestPackage.BZ356181_MAIN__NON_TRANSIENT:
+      return NON_TRANSIENT_EDEFAULT == null ? nonTransient != null : !NON_TRANSIENT_EDEFAULT.equals(nonTransient);
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_REF:
+      return transientRef != null;
+    case HibernateTestPackage.BZ356181_MAIN__TRANSIENT_OTHER_REF:
+      return transientOtherRef != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (transient: ");
+    result.append(transient_);
+    result.append(", nonTransient: ");
+    result.append(nonTransient);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz356181_MainImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.java
new file mode 100644
index 0000000..eeb47c6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_NonTransientImpl.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz356181 Non Transient</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz356181_NonTransientImpl#getMain <em>Main</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz356181_NonTransientImpl extends EObjectImpl implements Bz356181_NonTransient
+{
+  /**
+   * The cached value of the '{@link #getMain() <em>Main</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMain()
+   * @generated
+   * @ordered
+   */
+  protected Bz356181_Main main;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz356181_NonTransientImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ356181_NON_TRANSIENT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Main getMain()
+  {
+    if (main != null && main.eIsProxy())
+    {
+      InternalEObject oldMain = (InternalEObject)main;
+      main = (Bz356181_Main)eResolveProxy(oldMain);
+      if (main != oldMain)
+      {
+        if (eNotificationRequired())
+        {
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN, oldMain, main));
+        }
+      }
+    }
+    return main;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Main basicGetMain()
+  {
+    return main;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMain(Bz356181_Main newMain)
+  {
+    Bz356181_Main oldMain = main;
+    main = newMain;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN, oldMain, main));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN:
+      if (resolve)
+      {
+        return getMain();
+      }
+      return basicGetMain();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN:
+      setMain((Bz356181_Main)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN:
+      setMain((Bz356181_Main)null);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT__MAIN:
+      return main != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} // Bz356181_NonTransientImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.java
new file mode 100644
index 0000000..15f7880
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz356181_TransientImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz356181 Transient</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz356181_TransientImpl extends EObjectImpl implements Bz356181_Transient
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz356181_TransientImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ356181_TRANSIENT;
+  }
+
+} // Bz356181_TransientImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.java
new file mode 100644
index 0000000..faaf3eb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_GroupImpl.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 2012, 2013, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz380987 Group</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_GroupImpl#getPeople <em>People</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz380987_GroupImpl extends EObjectImpl implements Bz380987_Group
+{
+  /**
+   * The cached value of the '{@link #getPeople() <em>People</em>}' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPeople()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz380987_Person> people;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz380987_GroupImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ380987_GROUP;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz380987_Person> getPeople()
+  {
+    if (people == null)
+    {
+      people = new EObjectWithInverseResolvingEList.ManyInverse<Bz380987_Person>(Bz380987_Person.class, this, HibernateTestPackage.BZ380987_GROUP__PEOPLE,
+          HibernateTestPackage.BZ380987_PERSON__GROUP);
+    }
+    return people;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getPeople()).basicAdd(otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      return ((InternalEList<?>)getPeople()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      return getPeople();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      getPeople().clear();
+      getPeople().addAll((Collection<? extends Bz380987_Person>)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      getPeople().clear();
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_GROUP__PEOPLE:
+      return people != null && !people.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} // Bz380987_GroupImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.java
new file mode 100644
index 0000000..04e0be2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PersonImpl.java
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz380987 Person</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl#getGroup <em>Group</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PersonImpl#getPlaces <em>Places</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz380987_PersonImpl extends EObjectImpl implements Bz380987_Person
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getGroup() <em>Group</em>}' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getGroup()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz380987_Group> group;
+
+  /**
+   * The cached value of the '{@link #getPlaces() <em>Places</em>}' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPlaces()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz380987_Place> places;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz380987_PersonImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ380987_PERSON;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ380987_PERSON__NAME, oldName, name));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz380987_Group> getGroup()
+  {
+    if (group == null)
+    {
+      group = new EObjectWithInverseResolvingEList.ManyInverse<Bz380987_Group>(Bz380987_Group.class, this, HibernateTestPackage.BZ380987_PERSON__GROUP,
+          HibernateTestPackage.BZ380987_GROUP__PEOPLE);
+    }
+    return group;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz380987_Place> getPlaces()
+  {
+    if (places == null)
+    {
+      places = new EObjectWithInverseResolvingEList.ManyInverse<Bz380987_Place>(Bz380987_Place.class, this, HibernateTestPackage.BZ380987_PERSON__PLACES,
+          HibernateTestPackage.BZ380987_PLACE__PEOPLE);
+    }
+    return places;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getGroup()).basicAdd(otherEnd, msgs);
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getPlaces()).basicAdd(otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      return ((InternalEList<?>)getGroup()).basicRemove(otherEnd, msgs);
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      return ((InternalEList<?>)getPlaces()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__NAME:
+      return getName();
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      return getGroup();
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      return getPlaces();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__NAME:
+      setName((String)newValue);
+      return;
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      getGroup().clear();
+      getGroup().addAll((Collection<? extends Bz380987_Group>)newValue);
+      return;
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      getPlaces().clear();
+      getPlaces().addAll((Collection<? extends Bz380987_Place>)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__NAME:
+      setName(NAME_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      getGroup().clear();
+      return;
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      getPlaces().clear();
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PERSON__NAME:
+      return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+    case HibernateTestPackage.BZ380987_PERSON__GROUP:
+      return group != null && !group.isEmpty();
+    case HibernateTestPackage.BZ380987_PERSON__PLACES:
+      return places != null && !places.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz380987_PersonImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.java
new file mode 100644
index 0000000..9da7b3a
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz380987_PlaceImpl.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz380987 Place</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz380987_PlaceImpl#getPeople <em>People</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz380987_PlaceImpl extends EObjectImpl implements Bz380987_Place
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getPeople() <em>People</em>}' reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPeople()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz380987_Person> people;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz380987_PlaceImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ380987_PLACE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ380987_PLACE__NAME, oldName, name));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz380987_Person> getPeople()
+  {
+    if (people == null)
+    {
+      people = new EObjectWithInverseResolvingEList.ManyInverse<Bz380987_Person>(Bz380987_Person.class, this, HibernateTestPackage.BZ380987_PLACE__PEOPLE,
+          HibernateTestPackage.BZ380987_PERSON__PLACES);
+    }
+    return people;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getPeople()).basicAdd(otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      return ((InternalEList<?>)getPeople()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__NAME:
+      return getName();
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      return getPeople();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__NAME:
+      setName((String)newValue);
+      return;
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      getPeople().clear();
+      getPeople().addAll((Collection<? extends Bz380987_Person>)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__NAME:
+      setName(NAME_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      getPeople().clear();
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ380987_PLACE__NAME:
+      return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+    case HibernateTestPackage.BZ380987_PLACE__PEOPLE:
+      return people != null && !people.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz380987_PlaceImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.java
new file mode 100644
index 0000000..25027f6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz387752_MainImpl.java
@@ -0,0 +1,458 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz387752 Main</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl#getStrUnsettable <em>Str Unsettable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl#getStrSettable <em>Str Settable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl#getEnumSettable <em>Enum Settable</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz387752_MainImpl#getEnumUnsettable <em>Enum Unsettable</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz387752_MainImpl extends EObjectImpl implements Bz387752_Main
+{
+  /**
+   * The default value of the '{@link #getStrUnsettable() <em>Str Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getStrUnsettable()
+   * @generated
+   * @ordered
+   */
+  protected static final String STR_UNSETTABLE_EDEFAULT = "def_value";
+
+  /**
+   * The cached value of the '{@link #getStrUnsettable() <em>Str Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getStrUnsettable()
+   * @generated
+   * @ordered
+   */
+  protected String strUnsettable = STR_UNSETTABLE_EDEFAULT;
+
+  /**
+   * This is true if the Str Unsettable attribute has been set.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  protected boolean strUnsettableESet;
+
+  /**
+   * The default value of the '{@link #getStrSettable() <em>Str Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getStrSettable()
+   * @generated
+   * @ordered
+   */
+  protected static final String STR_SETTABLE_EDEFAULT = "value";
+
+  /**
+   * The cached value of the '{@link #getStrSettable() <em>Str Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getStrSettable()
+   * @generated
+   * @ordered
+   */
+  protected String strSettable = STR_SETTABLE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getEnumSettable() <em>Enum Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEnumSettable()
+   * @generated
+   * @ordered
+   */
+  protected static final Bz387752_Enum ENUM_SETTABLE_EDEFAULT = Bz387752_Enum.VAL0;
+
+  /**
+   * The cached value of the '{@link #getEnumSettable() <em>Enum Settable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEnumSettable()
+   * @generated
+   * @ordered
+   */
+  protected Bz387752_Enum enumSettable = ENUM_SETTABLE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getEnumUnsettable() <em>Enum Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEnumUnsettable()
+   * @generated
+   * @ordered
+   */
+  protected static final Bz387752_Enum ENUM_UNSETTABLE_EDEFAULT = Bz387752_Enum.VAL1;
+
+  /**
+   * The cached value of the '{@link #getEnumUnsettable() <em>Enum Unsettable</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getEnumUnsettable()
+   * @generated
+   * @ordered
+   */
+  protected Bz387752_Enum enumUnsettable = ENUM_UNSETTABLE_EDEFAULT;
+
+  /**
+   * This is true if the Enum Unsettable attribute has been set.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  protected boolean enumUnsettableESet;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz387752_MainImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ387752_MAIN;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getStrUnsettable()
+  {
+    return strUnsettable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setStrUnsettable(String newStrUnsettable)
+  {
+    String oldStrUnsettable = strUnsettable;
+    strUnsettable = newStrUnsettable;
+    boolean oldStrUnsettableESet = strUnsettableESet;
+    strUnsettableESet = true;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE, oldStrUnsettable, strUnsettable,
+          !oldStrUnsettableESet));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void unsetStrUnsettable()
+  {
+    String oldStrUnsettable = strUnsettable;
+    boolean oldStrUnsettableESet = strUnsettableESet;
+    strUnsettable = STR_UNSETTABLE_EDEFAULT;
+    strUnsettableESet = false;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.UNSET, HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE, oldStrUnsettable, STR_UNSETTABLE_EDEFAULT,
+          oldStrUnsettableESet));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isSetStrUnsettable()
+  {
+    return strUnsettableESet;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getStrSettable()
+  {
+    return strSettable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setStrSettable(String newStrSettable)
+  {
+    String oldStrSettable = strSettable;
+    strSettable = newStrSettable;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ387752_MAIN__STR_SETTABLE, oldStrSettable, strSettable));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz387752_Enum getEnumSettable()
+  {
+    return enumSettable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setEnumSettable(Bz387752_Enum newEnumSettable)
+  {
+    Bz387752_Enum oldEnumSettable = enumSettable;
+    enumSettable = newEnumSettable == null ? ENUM_SETTABLE_EDEFAULT : newEnumSettable;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ387752_MAIN__ENUM_SETTABLE, oldEnumSettable, enumSettable));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz387752_Enum getEnumUnsettable()
+  {
+    return enumUnsettable;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setEnumUnsettable(Bz387752_Enum newEnumUnsettable)
+  {
+    Bz387752_Enum oldEnumUnsettable = enumUnsettable;
+    enumUnsettable = newEnumUnsettable == null ? ENUM_UNSETTABLE_EDEFAULT : newEnumUnsettable;
+    boolean oldEnumUnsettableESet = enumUnsettableESet;
+    enumUnsettableESet = true;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE, oldEnumUnsettable, enumUnsettable,
+          !oldEnumUnsettableESet));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void unsetEnumUnsettable()
+  {
+    Bz387752_Enum oldEnumUnsettable = enumUnsettable;
+    boolean oldEnumUnsettableESet = enumUnsettableESet;
+    enumUnsettable = ENUM_UNSETTABLE_EDEFAULT;
+    enumUnsettableESet = false;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.UNSET, HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE, oldEnumUnsettable, ENUM_UNSETTABLE_EDEFAULT,
+          oldEnumUnsettableESet));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isSetEnumUnsettable()
+  {
+    return enumUnsettableESet;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE:
+      return getStrUnsettable();
+    case HibernateTestPackage.BZ387752_MAIN__STR_SETTABLE:
+      return getStrSettable();
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_SETTABLE:
+      return getEnumSettable();
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE:
+      return getEnumUnsettable();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE:
+      setStrUnsettable((String)newValue);
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__STR_SETTABLE:
+      setStrSettable((String)newValue);
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_SETTABLE:
+      setEnumSettable((Bz387752_Enum)newValue);
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE:
+      setEnumUnsettable((Bz387752_Enum)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE:
+      unsetStrUnsettable();
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__STR_SETTABLE:
+      setStrSettable(STR_SETTABLE_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_SETTABLE:
+      setEnumSettable(ENUM_SETTABLE_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE:
+      unsetEnumUnsettable();
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("null")
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ387752_MAIN__STR_UNSETTABLE:
+      return isSetStrUnsettable();
+    case HibernateTestPackage.BZ387752_MAIN__STR_SETTABLE:
+      return STR_SETTABLE_EDEFAULT == null ? strSettable != null : !STR_SETTABLE_EDEFAULT.equals(strSettable);
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_SETTABLE:
+      return enumSettable != ENUM_SETTABLE_EDEFAULT;
+    case HibernateTestPackage.BZ387752_MAIN__ENUM_UNSETTABLE:
+      return isSetEnumUnsettable();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (strUnsettable: ");
+    if (strUnsettableESet)
+    {
+      result.append(strUnsettable);
+    }
+    else
+    {
+      result.append("<unset>");
+    }
+    result.append(", strSettable: ");
+    result.append(strSettable);
+    result.append(", enumSettable: ");
+    result.append(enumSettable);
+    result.append(", enumUnsettable: ");
+    if (enumUnsettableESet)
+    {
+      result.append(enumUnsettable);
+    }
+    else
+    {
+      result.append("<unset>");
+    }
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz387752_MainImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.java
new file mode 100644
index 0000000..2916125
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682CImpl.java
@@ -0,0 +1,386 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz397682 C</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl#getRefToP <em>Ref To P</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl#getRefToC <em>Ref To C</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682CImpl#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz397682CImpl extends EObjectImpl implements Bz397682C
+{
+  /**
+   * The cached value of the '{@link #getRefToC() <em>Ref To C</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRefToC()
+   * @generated
+   * @ordered
+   */
+  protected Bz397682C refToC;
+
+  /**
+   * The default value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected static final String DB_ID_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected String dbId = DB_ID_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz397682CImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ397682_C;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz397682P getRefToP()
+  {
+    if (eContainerFeatureID() != HibernateTestPackage.BZ397682_C__REF_TO_P)
+    {
+      return null;
+    }
+    return (Bz397682P)eContainer();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRefToP(Bz397682P newRefToP, NotificationChain msgs)
+  {
+    msgs = eBasicSetContainer((InternalEObject)newRefToP, HibernateTestPackage.BZ397682_C__REF_TO_P, msgs);
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRefToP(Bz397682P newRefToP)
+  {
+    if (newRefToP != eInternalContainer() || eContainerFeatureID() != HibernateTestPackage.BZ397682_C__REF_TO_P && newRefToP != null)
+    {
+      if (EcoreUtil.isAncestor(this, newRefToP))
+      {
+        throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+      }
+      NotificationChain msgs = null;
+      if (eInternalContainer() != null)
+      {
+        msgs = eBasicRemoveFromContainer(msgs);
+      }
+      if (newRefToP != null)
+      {
+        msgs = ((InternalEObject)newRefToP).eInverseAdd(this, HibernateTestPackage.BZ397682_P__LIST_OF_C, Bz397682P.class, msgs);
+      }
+      msgs = basicSetRefToP(newRefToP, msgs);
+      if (msgs != null)
+      {
+        msgs.dispatch();
+      }
+    }
+    else if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ397682_C__REF_TO_P, newRefToP, newRefToP));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz397682C getRefToC()
+  {
+    if (refToC != null && refToC.eIsProxy())
+    {
+      InternalEObject oldRefToC = (InternalEObject)refToC;
+      refToC = (Bz397682C)eResolveProxy(oldRefToC);
+      if (refToC != oldRefToC)
+      {
+        if (eNotificationRequired())
+        {
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, HibernateTestPackage.BZ397682_C__REF_TO_C, oldRefToC, refToC));
+        }
+      }
+    }
+    return refToC;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz397682C basicGetRefToC()
+  {
+    return refToC;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRefToC(Bz397682C newRefToC)
+  {
+    Bz397682C oldRefToC = refToC;
+    refToC = newRefToC;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ397682_C__REF_TO_C, oldRefToC, refToC));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbId()
+  {
+    return dbId;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbId(String newDbId)
+  {
+    String oldDbId = dbId;
+    dbId = newDbId;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ397682_C__DB_ID, oldDbId, dbId));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      if (eInternalContainer() != null)
+      {
+        msgs = eBasicRemoveFromContainer(msgs);
+      }
+      return basicSetRefToP((Bz397682P)otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      return basicSetRefToP(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+  {
+    switch (eContainerFeatureID())
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      return eInternalContainer().eInverseRemove(this, HibernateTestPackage.BZ397682_P__LIST_OF_C, Bz397682P.class, msgs);
+    }
+    return super.eBasicRemoveFromContainerFeature(msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      return getRefToP();
+    case HibernateTestPackage.BZ397682_C__REF_TO_C:
+      if (resolve)
+      {
+        return getRefToC();
+      }
+      return basicGetRefToC();
+    case HibernateTestPackage.BZ397682_C__DB_ID:
+      return getDbId();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      setRefToP((Bz397682P)newValue);
+      return;
+    case HibernateTestPackage.BZ397682_C__REF_TO_C:
+      setRefToC((Bz397682C)newValue);
+      return;
+    case HibernateTestPackage.BZ397682_C__DB_ID:
+      setDbId((String)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      setRefToP((Bz397682P)null);
+      return;
+    case HibernateTestPackage.BZ397682_C__REF_TO_C:
+      setRefToC((Bz397682C)null);
+      return;
+    case HibernateTestPackage.BZ397682_C__DB_ID:
+      setDbId(DB_ID_EDEFAULT);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_C__REF_TO_P:
+      return getRefToP() != null;
+    case HibernateTestPackage.BZ397682_C__REF_TO_C:
+      return refToC != null;
+    case HibernateTestPackage.BZ397682_C__DB_ID:
+      return DB_ID_EDEFAULT == null ? dbId != null : !DB_ID_EDEFAULT.equals(dbId);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (dbId: ");
+    result.append(dbId);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz397682CImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.java
new file mode 100644
index 0000000..b6cb0ca
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz397682PImpl.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz397682 P</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl#getDbId <em>Db Id</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz397682PImpl#getListOfC <em>List Of C</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz397682PImpl extends EObjectImpl implements Bz397682P
+{
+  /**
+   * The default value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected static final String DB_ID_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected String dbId = DB_ID_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getListOfC() <em>List Of C</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getListOfC()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz397682C> listOfC;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz397682PImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ397682_P;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbId()
+  {
+    return dbId;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbId(String newDbId)
+  {
+    String oldDbId = dbId;
+    dbId = newDbId;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ397682_P__DB_ID, oldDbId, dbId));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz397682C> getListOfC()
+  {
+    if (listOfC == null)
+    {
+      listOfC = new EObjectContainmentWithInverseEList<Bz397682C>(Bz397682C.class, this, HibernateTestPackage.BZ397682_P__LIST_OF_C,
+          HibernateTestPackage.BZ397682_C__REF_TO_P);
+    }
+    return listOfC;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getListOfC()).basicAdd(otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      return ((InternalEList<?>)getListOfC()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__DB_ID:
+      return getDbId();
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      return getListOfC();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__DB_ID:
+      setDbId((String)newValue);
+      return;
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      getListOfC().clear();
+      getListOfC().addAll((Collection<? extends Bz397682C>)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__DB_ID:
+      setDbId(DB_ID_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      getListOfC().clear();
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ397682_P__DB_ID:
+      return DB_ID_EDEFAULT == null ? dbId != null : !DB_ID_EDEFAULT.equals(dbId);
+    case HibernateTestPackage.BZ397682_P__LIST_OF_C:
+      return listOfC != null && !listOfC.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (dbId: ");
+    result.append(dbId);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz397682PImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.java
new file mode 100644
index 0000000..21bb0e1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057A1Impl.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz398057 A1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz398057A1Impl extends Bz398057AImpl implements Bz398057A1
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz398057A1Impl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ398057_A1;
+  }
+
+} // Bz398057A1Impl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.java
new file mode 100644
index 0000000..2a269e8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057AImpl.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import java.util.Collection;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz398057 A</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl#getListOfB <em>List Of B</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057AImpl#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz398057AImpl extends EObjectImpl implements Bz398057A
+{
+  /**
+   * The cached value of the '{@link #getListOfB() <em>List Of B</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getListOfB()
+   * @generated
+   * @ordered
+   */
+  protected EList<Bz398057B> listOfB;
+
+  /**
+   * The default value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected static final String DB_ID_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected String dbId = DB_ID_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz398057AImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ398057_A;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Bz398057B> getListOfB()
+  {
+    if (listOfB == null)
+    {
+      listOfB = new EObjectContainmentWithInverseEList<Bz398057B>(Bz398057B.class, this, HibernateTestPackage.BZ398057_A__LIST_OF_B,
+          HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A);
+    }
+    return listOfB;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbId()
+  {
+    return dbId;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbId(String newDbId)
+  {
+    String oldDbId = dbId;
+    dbId = newDbId;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ398057_A__DB_ID, oldDbId, dbId));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      return ((InternalEList<InternalEObject>)(InternalEList<?>)getListOfB()).basicAdd(otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      return ((InternalEList<?>)getListOfB()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      return getListOfB();
+    case HibernateTestPackage.BZ398057_A__DB_ID:
+      return getDbId();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      getListOfB().clear();
+      getListOfB().addAll((Collection<? extends Bz398057B>)newValue);
+      return;
+    case HibernateTestPackage.BZ398057_A__DB_ID:
+      setDbId((String)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      getListOfB().clear();
+      return;
+    case HibernateTestPackage.BZ398057_A__DB_ID:
+      setDbId(DB_ID_EDEFAULT);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_A__LIST_OF_B:
+      return listOfB != null && !listOfB.isEmpty();
+    case HibernateTestPackage.BZ398057_A__DB_ID:
+      return DB_ID_EDEFAULT == null ? dbId != null : !DB_ID_EDEFAULT.equals(dbId);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (dbId: ");
+    result.append(dbId);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz398057AImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.java
new file mode 100644
index 0000000..97eda2c
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057B1Impl.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz398057 B1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057B1Impl#getValueStr <em>Value Str</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz398057B1Impl extends Bz398057BImpl implements Bz398057B1
+{
+  /**
+   * The default value of the '{@link #getValueStr() <em>Value Str</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValueStr()
+   * @generated
+   * @ordered
+   */
+  protected static final String VALUE_STR_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getValueStr() <em>Value Str</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValueStr()
+   * @generated
+   * @ordered
+   */
+  protected String valueStr = VALUE_STR_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz398057B1Impl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ398057_B1;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getValueStr()
+  {
+    return valueStr;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValueStr(String newValueStr)
+  {
+    String oldValueStr = valueStr;
+    valueStr = newValueStr;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ398057_B1__VALUE_STR, oldValueStr, valueStr));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B1__VALUE_STR:
+      return getValueStr();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B1__VALUE_STR:
+      setValueStr((String)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B1__VALUE_STR:
+      setValueStr(VALUE_STR_EDEFAULT);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B1__VALUE_STR:
+      return VALUE_STR_EDEFAULT == null ? valueStr != null : !VALUE_STR_EDEFAULT.equals(valueStr);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (valueStr: ");
+    result.append(valueStr);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz398057B1Impl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.java
new file mode 100644
index 0000000..09223b0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/Bz398057BImpl.java
@@ -0,0 +1,372 @@
+/*
+ * Copyright (c) 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bz398057 B</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl#getRefToClassA <em>Ref To Class A</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl.Bz398057BImpl#getDbId <em>Db Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Bz398057BImpl extends EObjectImpl implements Bz398057B
+{
+  /**
+   * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected static final double VALUE_EDEFAULT = 0.0;
+
+  /**
+   * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getValue()
+   * @generated
+   * @ordered
+   */
+  protected double value = VALUE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected static final String DB_ID_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getDbId() <em>Db Id</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDbId()
+   * @generated
+   * @ordered
+   */
+  protected String dbId = DB_ID_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected Bz398057BImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return HibernateTestPackage.Literals.BZ398057_B;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz398057A getRefToClassA()
+  {
+    if (eContainerFeatureID() != HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A)
+    {
+      return null;
+    }
+    return (Bz398057A)eContainer();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRefToClassA(Bz398057A newRefToClassA, NotificationChain msgs)
+  {
+    msgs = eBasicSetContainer((InternalEObject)newRefToClassA, HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A, msgs);
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRefToClassA(Bz398057A newRefToClassA)
+  {
+    if (newRefToClassA != eInternalContainer() || eContainerFeatureID() != HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A && newRefToClassA != null)
+    {
+      if (EcoreUtil.isAncestor(this, newRefToClassA))
+      {
+        throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+      }
+      NotificationChain msgs = null;
+      if (eInternalContainer() != null)
+      {
+        msgs = eBasicRemoveFromContainer(msgs);
+      }
+      if (newRefToClassA != null)
+      {
+        msgs = ((InternalEObject)newRefToClassA).eInverseAdd(this, HibernateTestPackage.BZ398057_A__LIST_OF_B, Bz398057A.class, msgs);
+      }
+      msgs = basicSetRefToClassA(newRefToClassA, msgs);
+      if (msgs != null)
+      {
+        msgs.dispatch();
+      }
+    }
+    else if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A, newRefToClassA, newRefToClassA));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public double getValue()
+  {
+    return value;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setValue(double newValue)
+  {
+    double oldValue = value;
+    value = newValue;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ398057_B__VALUE, oldValue, value));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getDbId()
+  {
+    return dbId;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDbId(String newDbId)
+  {
+    String oldDbId = dbId;
+    dbId = newDbId;
+    if (eNotificationRequired())
+    {
+      eNotify(new ENotificationImpl(this, Notification.SET, HibernateTestPackage.BZ398057_B__DB_ID, oldDbId, dbId));
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      if (eInternalContainer() != null)
+      {
+        msgs = eBasicRemoveFromContainer(msgs);
+      }
+      return basicSetRefToClassA((Bz398057A)otherEnd, msgs);
+    }
+    return super.eInverseAdd(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      return basicSetRefToClassA(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs)
+  {
+    switch (eContainerFeatureID())
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      return eInternalContainer().eInverseRemove(this, HibernateTestPackage.BZ398057_A__LIST_OF_B, Bz398057A.class, msgs);
+    }
+    return super.eBasicRemoveFromContainerFeature(msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      return getRefToClassA();
+    case HibernateTestPackage.BZ398057_B__VALUE:
+      return getValue();
+    case HibernateTestPackage.BZ398057_B__DB_ID:
+      return getDbId();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      setRefToClassA((Bz398057A)newValue);
+      return;
+    case HibernateTestPackage.BZ398057_B__VALUE:
+      setValue((Double)newValue);
+      return;
+    case HibernateTestPackage.BZ398057_B__DB_ID:
+      setDbId((String)newValue);
+      return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      setRefToClassA((Bz398057A)null);
+      return;
+    case HibernateTestPackage.BZ398057_B__VALUE:
+      setValue(VALUE_EDEFAULT);
+      return;
+    case HibernateTestPackage.BZ398057_B__DB_ID:
+      setDbId(DB_ID_EDEFAULT);
+      return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+    case HibernateTestPackage.BZ398057_B__REF_TO_CLASS_A:
+      return getRefToClassA() != null;
+    case HibernateTestPackage.BZ398057_B__VALUE:
+      return value != VALUE_EDEFAULT;
+    case HibernateTestPackage.BZ398057_B__DB_ID:
+      return DB_ID_EDEFAULT == null ? dbId != null : !DB_ID_EDEFAULT.equals(dbId);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy())
+    {
+      return super.toString();
+    }
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (value: ");
+    result.append(value);
+    result.append(", dbId: ");
+    result.append(dbId);
+    result.append(')');
+    return result.toString();
+  }
+
+} // Bz398057BImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.java
new file mode 100644
index 0000000..bec3ca1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestFactoryImpl.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class HibernateTestFactoryImpl extends EFactoryImpl implements HibernateTestFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static HibernateTestFactory init()
+  {
+    try
+    {
+      HibernateTestFactory theHibernateTestFactory = (HibernateTestFactory)EPackage.Registry.INSTANCE.getEFactory(HibernateTestPackage.eNS_URI);
+      if (theHibernateTestFactory != null)
+      {
+        return theHibernateTestFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new HibernateTestFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HibernateTestFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+    case HibernateTestPackage.BZ356181_MAIN:
+      return createBz356181_Main();
+    case HibernateTestPackage.BZ356181_TRANSIENT:
+      return createBz356181_Transient();
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT:
+      return createBz356181_NonTransient();
+    case HibernateTestPackage.BZ387752_MAIN:
+      return createBz387752_Main();
+    case HibernateTestPackage.BZ380987_GROUP:
+      return createBz380987_Group();
+    case HibernateTestPackage.BZ380987_PLACE:
+      return createBz380987_Place();
+    case HibernateTestPackage.BZ380987_PERSON:
+      return createBz380987_Person();
+    case HibernateTestPackage.BZ398057_A:
+      return createBz398057A();
+    case HibernateTestPackage.BZ398057_A1:
+      return createBz398057A1();
+    case HibernateTestPackage.BZ398057_B:
+      return createBz398057B();
+    case HibernateTestPackage.BZ398057_B1:
+      return createBz398057B1();
+    case HibernateTestPackage.BZ397682_P:
+      return createBz397682P();
+    case HibernateTestPackage.BZ397682_C:
+      return createBz397682C();
+    default:
+      throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object createFromString(EDataType eDataType, String initialValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+    case HibernateTestPackage.BZ387752_ENUM:
+      return createBz387752_EnumFromString(eDataType, initialValue);
+    default:
+      throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String convertToString(EDataType eDataType, Object instanceValue)
+  {
+    switch (eDataType.getClassifierID())
+    {
+    case HibernateTestPackage.BZ387752_ENUM:
+      return convertBz387752_EnumToString(eDataType, instanceValue);
+    default:
+      throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Main createBz356181_Main()
+  {
+    Bz356181_MainImpl bz356181_Main = new Bz356181_MainImpl();
+    return bz356181_Main;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_Transient createBz356181_Transient()
+  {
+    Bz356181_TransientImpl bz356181_Transient = new Bz356181_TransientImpl();
+    return bz356181_Transient;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz356181_NonTransient createBz356181_NonTransient()
+  {
+    Bz356181_NonTransientImpl bz356181_NonTransient = new Bz356181_NonTransientImpl();
+    return bz356181_NonTransient;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz387752_Main createBz387752_Main()
+  {
+    Bz387752_MainImpl bz387752_Main = new Bz387752_MainImpl();
+    return bz387752_Main;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz380987_Group createBz380987_Group()
+  {
+    Bz380987_GroupImpl bz380987_Group = new Bz380987_GroupImpl();
+    return bz380987_Group;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz380987_Place createBz380987_Place()
+  {
+    Bz380987_PlaceImpl bz380987_Place = new Bz380987_PlaceImpl();
+    return bz380987_Place;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz380987_Person createBz380987_Person()
+  {
+    Bz380987_PersonImpl bz380987_Person = new Bz380987_PersonImpl();
+    return bz380987_Person;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz398057A createBz398057A()
+  {
+    Bz398057AImpl bz398057A = new Bz398057AImpl();
+    return bz398057A;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz398057A1 createBz398057A1()
+  {
+    Bz398057A1Impl bz398057A1 = new Bz398057A1Impl();
+    return bz398057A1;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz398057B createBz398057B()
+  {
+    Bz398057BImpl bz398057B = new Bz398057BImpl();
+    return bz398057B;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz398057B1 createBz398057B1()
+  {
+    Bz398057B1Impl bz398057B1 = new Bz398057B1Impl();
+    return bz398057B1;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz397682P createBz397682P()
+  {
+    Bz397682PImpl bz397682P = new Bz397682PImpl();
+    return bz397682P;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz397682C createBz397682C()
+  {
+    Bz397682CImpl bz397682C = new Bz397682CImpl();
+    return bz397682C;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Bz387752_Enum createBz387752_EnumFromString(EDataType eDataType, String initialValue)
+  {
+    Bz387752_Enum result = Bz387752_Enum.get(initialValue);
+    if (result == null)
+    {
+      throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+    }
+    return result;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String convertBz387752_EnumToString(EDataType eDataType, Object instanceValue)
+  {
+    return instanceValue == null ? null : instanceValue.toString();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HibernateTestPackage getHibernateTestPackage()
+  {
+    return (HibernateTestPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static HibernateTestPackage getPackage()
+  {
+    return HibernateTestPackage.eINSTANCE;
+  }
+
+} // HibernateTestFactoryImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.java
new file mode 100644
index 0000000..1fdae12
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/impl/HibernateTestPackageImpl.java
@@ -0,0 +1,845 @@
+/*
+ * Copyright (c) 2012, 2013, 2015, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.impl;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Enum;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestFactory;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class HibernateTestPackageImpl extends EPackageImpl implements HibernateTestPackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz356181_MainEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz356181_TransientEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz356181_NonTransientEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz387752_MainEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz380987_GroupEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz380987_PlaceEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz380987_PersonEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz398057AEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz398057A1EClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz398057BEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz398057B1EClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz397682PEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bz397682CEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EEnum bz387752_EnumEEnum = null;
+
+  /**
+   * Creates an instance of the model <b>Package</b>, registered with
+   * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+   * package URI value.
+   * <p>Note: the correct way to create the package is via the static
+   * factory method {@link #init init()}, which also performs
+   * initialization of the package, or returns the registered package,
+   * if one already exists.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.ecore.EPackage.Registry
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private HibernateTestPackageImpl()
+  {
+    super(eNS_URI, HibernateTestFactory.eINSTANCE);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static boolean isInited = false;
+
+  /**
+   * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+   *
+   * <p>This method is used to initialize {@link HibernateTestPackage#eINSTANCE} when that field is accessed.
+   * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #eNS_URI
+   * @see #createPackageContents()
+   * @see #initializePackageContents()
+   * @generated
+   */
+  public static HibernateTestPackage init()
+  {
+    if (isInited)
+    {
+      return (HibernateTestPackage)EPackage.Registry.INSTANCE.getEPackage(HibernateTestPackage.eNS_URI);
+    }
+
+    // Obtain or create and register package
+    HibernateTestPackageImpl theHibernateTestPackage = (HibernateTestPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof HibernateTestPackageImpl
+        ? EPackage.Registry.INSTANCE.get(eNS_URI) : new HibernateTestPackageImpl());
+
+    isInited = true;
+
+    // Create package meta-data objects
+    theHibernateTestPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theHibernateTestPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theHibernateTestPackage.freeze();
+
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(HibernateTestPackage.eNS_URI, theHibernateTestPackage);
+    return theHibernateTestPackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz356181_Main()
+  {
+    return bz356181_MainEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz356181_Main_Transient()
+  {
+    return (EAttribute)bz356181_MainEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz356181_Main_NonTransient()
+  {
+    return (EAttribute)bz356181_MainEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz356181_Main_TransientRef()
+  {
+    return (EReference)bz356181_MainEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz356181_Main_TransientOtherRef()
+  {
+    return (EReference)bz356181_MainEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz356181_Transient()
+  {
+    return bz356181_TransientEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz356181_NonTransient()
+  {
+    return bz356181_NonTransientEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz356181_NonTransient_Main()
+  {
+    return (EReference)bz356181_NonTransientEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz387752_Main()
+  {
+    return bz387752_MainEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz387752_Main_StrUnsettable()
+  {
+    return (EAttribute)bz387752_MainEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz387752_Main_StrSettable()
+  {
+    return (EAttribute)bz387752_MainEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz387752_Main_EnumSettable()
+  {
+    return (EAttribute)bz387752_MainEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz387752_Main_EnumUnsettable()
+  {
+    return (EAttribute)bz387752_MainEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz380987_Group()
+  {
+    return bz380987_GroupEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz380987_Group_People()
+  {
+    return (EReference)bz380987_GroupEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz380987_Place()
+  {
+    return bz380987_PlaceEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz380987_Place_Name()
+  {
+    return (EAttribute)bz380987_PlaceEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz380987_Place_People()
+  {
+    return (EReference)bz380987_PlaceEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz380987_Person()
+  {
+    return bz380987_PersonEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz380987_Person_Name()
+  {
+    return (EAttribute)bz380987_PersonEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz380987_Person_Group()
+  {
+    return (EReference)bz380987_PersonEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz380987_Person_Places()
+  {
+    return (EReference)bz380987_PersonEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz398057A()
+  {
+    return bz398057AEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz398057A_ListOfB()
+  {
+    return (EReference)bz398057AEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz398057A_DbId()
+  {
+    return (EAttribute)bz398057AEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz398057A1()
+  {
+    return bz398057A1EClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz398057B()
+  {
+    return bz398057BEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz398057B_RefToClassA()
+  {
+    return (EReference)bz398057BEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz398057B_Value()
+  {
+    return (EAttribute)bz398057BEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz398057B_DbId()
+  {
+    return (EAttribute)bz398057BEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz398057B1()
+  {
+    return bz398057B1EClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz398057B1_ValueStr()
+  {
+    return (EAttribute)bz398057B1EClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz397682P()
+  {
+    return bz397682PEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz397682P_DbId()
+  {
+    return (EAttribute)bz397682PEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz397682P_ListOfC()
+  {
+    return (EReference)bz397682PEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBz397682C()
+  {
+    return bz397682CEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz397682C_RefToP()
+  {
+    return (EReference)bz397682CEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBz397682C_RefToC()
+  {
+    return (EReference)bz397682CEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getBz397682C_DbId()
+  {
+    return (EAttribute)bz397682CEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EEnum getBz387752_Enum()
+  {
+    return bz387752_EnumEEnum;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HibernateTestFactory getHibernateTestFactory()
+  {
+    return (HibernateTestFactory)getEFactoryInstance();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isCreated = false;
+
+  /**
+   * Creates the meta-model objects for the package.  This method is
+   * guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void createPackageContents()
+  {
+    if (isCreated)
+    {
+      return;
+    }
+    isCreated = true;
+
+    // Create classes and their features
+    bz356181_MainEClass = createEClass(BZ356181_MAIN);
+    createEAttribute(bz356181_MainEClass, BZ356181_MAIN__TRANSIENT);
+    createEAttribute(bz356181_MainEClass, BZ356181_MAIN__NON_TRANSIENT);
+    createEReference(bz356181_MainEClass, BZ356181_MAIN__TRANSIENT_REF);
+    createEReference(bz356181_MainEClass, BZ356181_MAIN__TRANSIENT_OTHER_REF);
+
+    bz356181_TransientEClass = createEClass(BZ356181_TRANSIENT);
+
+    bz356181_NonTransientEClass = createEClass(BZ356181_NON_TRANSIENT);
+    createEReference(bz356181_NonTransientEClass, BZ356181_NON_TRANSIENT__MAIN);
+
+    bz387752_MainEClass = createEClass(BZ387752_MAIN);
+    createEAttribute(bz387752_MainEClass, BZ387752_MAIN__STR_UNSETTABLE);
+    createEAttribute(bz387752_MainEClass, BZ387752_MAIN__STR_SETTABLE);
+    createEAttribute(bz387752_MainEClass, BZ387752_MAIN__ENUM_SETTABLE);
+    createEAttribute(bz387752_MainEClass, BZ387752_MAIN__ENUM_UNSETTABLE);
+
+    bz380987_GroupEClass = createEClass(BZ380987_GROUP);
+    createEReference(bz380987_GroupEClass, BZ380987_GROUP__PEOPLE);
+
+    bz380987_PlaceEClass = createEClass(BZ380987_PLACE);
+    createEAttribute(bz380987_PlaceEClass, BZ380987_PLACE__NAME);
+    createEReference(bz380987_PlaceEClass, BZ380987_PLACE__PEOPLE);
+
+    bz380987_PersonEClass = createEClass(BZ380987_PERSON);
+    createEAttribute(bz380987_PersonEClass, BZ380987_PERSON__NAME);
+    createEReference(bz380987_PersonEClass, BZ380987_PERSON__GROUP);
+    createEReference(bz380987_PersonEClass, BZ380987_PERSON__PLACES);
+
+    bz398057AEClass = createEClass(BZ398057_A);
+    createEReference(bz398057AEClass, BZ398057_A__LIST_OF_B);
+    createEAttribute(bz398057AEClass, BZ398057_A__DB_ID);
+
+    bz398057A1EClass = createEClass(BZ398057_A1);
+
+    bz398057BEClass = createEClass(BZ398057_B);
+    createEReference(bz398057BEClass, BZ398057_B__REF_TO_CLASS_A);
+    createEAttribute(bz398057BEClass, BZ398057_B__VALUE);
+    createEAttribute(bz398057BEClass, BZ398057_B__DB_ID);
+
+    bz398057B1EClass = createEClass(BZ398057_B1);
+    createEAttribute(bz398057B1EClass, BZ398057_B1__VALUE_STR);
+
+    bz397682PEClass = createEClass(BZ397682_P);
+    createEAttribute(bz397682PEClass, BZ397682_P__DB_ID);
+    createEReference(bz397682PEClass, BZ397682_P__LIST_OF_C);
+
+    bz397682CEClass = createEClass(BZ397682_C);
+    createEReference(bz397682CEClass, BZ397682_C__REF_TO_P);
+    createEReference(bz397682CEClass, BZ397682_C__REF_TO_C);
+    createEAttribute(bz397682CEClass, BZ397682_C__DB_ID);
+
+    // Create enums
+    bz387752_EnumEEnum = createEEnum(BZ387752_ENUM);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isInitialized = false;
+
+  /**
+   * Complete the initialization of the package and its meta-model.  This
+   * method is guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void initializePackageContents()
+  {
+    if (isInitialized)
+    {
+      return;
+    }
+    isInitialized = true;
+
+    // Initialize package
+    setName(eNAME);
+    setNsPrefix(eNS_PREFIX);
+    setNsURI(eNS_URI);
+
+    // Create type parameters
+
+    // Set bounds for type parameters
+
+    // Add supertypes to classes
+    bz398057A1EClass.getESuperTypes().add(getBz398057A());
+    bz398057B1EClass.getESuperTypes().add(getBz398057B());
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(bz356181_MainEClass, Bz356181_Main.class, "Bz356181_Main", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz356181_Main_Transient(), ecorePackage.getEString(), "transient", null, 0, 1, Bz356181_Main.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz356181_Main_NonTransient(), ecorePackage.getEString(), "nonTransient", null, 0, 1, Bz356181_Main.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz356181_Main_TransientRef(), getBz356181_Transient(), null, "transientRef", null, 0, 1, Bz356181_Main.class, IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz356181_Main_TransientOtherRef(), getBz356181_NonTransient(), null, "transientOtherRef", null, 0, 1, Bz356181_Main.class, IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz356181_TransientEClass, Bz356181_Transient.class, "Bz356181_Transient", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(bz356181_NonTransientEClass, Bz356181_NonTransient.class, "Bz356181_NonTransient", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBz356181_NonTransient_Main(), getBz356181_Main(), null, "main", null, 0, 1, Bz356181_NonTransient.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz387752_MainEClass, Bz387752_Main.class, "Bz387752_Main", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz387752_Main_StrUnsettable(), ecorePackage.getEString(), "strUnsettable", "def_value", 0, 1, Bz387752_Main.class, !IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz387752_Main_StrSettable(), ecorePackage.getEString(), "strSettable", "value", 0, 1, Bz387752_Main.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz387752_Main_EnumSettable(), getBz387752_Enum(), "enumSettable", null, 0, 1, Bz387752_Main.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz387752_Main_EnumUnsettable(), getBz387752_Enum(), "enumUnsettable", "VAL1", 0, 1, Bz387752_Main.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz380987_GroupEClass, Bz380987_Group.class, "Bz380987_Group", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBz380987_Group_People(), getBz380987_Person(), getBz380987_Person_Group(), "people", null, 0, -1, Bz380987_Group.class, !IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz380987_PlaceEClass, Bz380987_Place.class, "Bz380987_Place", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz380987_Place_Name(), ecorePackage.getEString(), "name", null, 0, 1, Bz380987_Place.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz380987_Place_People(), getBz380987_Person(), getBz380987_Person_Places(), "people", null, 0, -1, Bz380987_Place.class, !IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz380987_PersonEClass, Bz380987_Person.class, "Bz380987_Person", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz380987_Person_Name(), ecorePackage.getEString(), "name", null, 0, 1, Bz380987_Person.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz380987_Person_Group(), getBz380987_Group(), getBz380987_Group_People(), "group", null, 0, -1, Bz380987_Person.class, !IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz380987_Person_Places(), getBz380987_Place(), getBz380987_Place_People(), "places", null, 0, -1, Bz380987_Person.class, !IS_TRANSIENT,
+        !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz398057AEClass, Bz398057A.class, "Bz398057A", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBz398057A_ListOfB(), getBz398057B(), getBz398057B_RefToClassA(), "listOfB", null, 0, -1, Bz398057A.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz398057A_DbId(), ecorePackage.getEString(), "dbId", null, 1, 1, Bz398057A.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz398057A1EClass, Bz398057A1.class, "Bz398057A1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(bz398057BEClass, Bz398057B.class, "Bz398057B", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBz398057B_RefToClassA(), getBz398057A(), getBz398057A_ListOfB(), "refToClassA", null, 0, 1, Bz398057B.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz398057B_Value(), ecorePackage.getEDouble(), "value", null, 0, 1, Bz398057B.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz398057B_DbId(), ecorePackage.getEString(), "dbId", null, 1, 1, Bz398057B.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz398057B1EClass, Bz398057B1.class, "Bz398057B1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz398057B1_ValueStr(), ecorePackage.getEString(), "valueStr", null, 0, 1, Bz398057B1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz397682PEClass, Bz397682P.class, "Bz397682P", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getBz397682P_DbId(), ecorePackage.getEString(), "dbId", null, 1, 1, Bz397682P.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz397682P_ListOfC(), getBz397682C(), getBz397682C_RefToP(), "listOfC", null, 0, -1, Bz397682P.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bz397682CEClass, Bz397682C.class, "Bz397682C", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBz397682C_RefToP(), getBz397682P(), getBz397682P_ListOfC(), "refToP", null, 0, 1, Bz397682C.class, !IS_TRANSIENT, !IS_VOLATILE,
+        IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBz397682C_RefToC(), getBz397682C(), null, "refToC", null, 0, 1, Bz397682C.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getBz397682C_DbId(), ecorePackage.getEString(), "dbId", null, 1, 1, Bz397682C.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+        !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Initialize enums and add enum literals
+    initEEnum(bz387752_EnumEEnum, Bz387752_Enum.class, "Bz387752_Enum");
+    addEEnumLiteral(bz387752_EnumEEnum, Bz387752_Enum.VAL0);
+    addEEnumLiteral(bz387752_EnumEEnum, Bz387752_Enum.VAL1);
+
+    // Create resource
+    createResource(eNS_URI);
+
+    // Create annotations
+    // teneo.jpa
+    createTeneoAnnotations();
+  }
+
+  /**
+   * Initializes the annotations for <b>teneo.jpa</b>.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected void createTeneoAnnotations()
+  {
+    String source = "teneo.jpa";
+    addAnnotation(getBz356181_Main_Transient(), source, new String[] { "value", "@Transient" });
+    addAnnotation(bz356181_TransientEClass, source, new String[] { "value", "@Transient" });
+    addAnnotation(bz398057AEClass, source, new String[] { "value", "@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)" });
+    addAnnotation(getBz398057A_DbId(), source, new String[] { "value", "@Id" });
+    addAnnotation(bz398057BEClass, source, new String[] { "value", "@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)" });
+    addAnnotation(getBz398057B_DbId(), source, new String[] { "value", "@Id" });
+    addAnnotation(bz397682PEClass, source, new String[] { "value", "@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)" });
+    addAnnotation(getBz397682P_DbId(), source, new String[] { "value", "@Id" });
+    addAnnotation(getBz397682C_DbId(), source, new String[] { "value", "@Id" });
+  }
+
+} // HibernateTestPackageImpl
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.java
new file mode 100644
index 0000000..2ec105e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestAdapterFactory.java
@@ -0,0 +1,402 @@
+/*
+ * Copyright (c) 2012, 2013 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.util;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage
+ * @generated
+ */
+public class HibernateTestAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static HibernateTestPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HibernateTestAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = HibernateTestPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Returns whether this factory is applicable for the type of the object.
+   * <!-- begin-user-doc -->
+   * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+   * <!-- end-user-doc -->
+   * @return whether this factory is applicable for the type of the object.
+   * @generated
+   */
+  @Override
+  public boolean isFactoryForType(Object object)
+  {
+    if (object == modelPackage)
+    {
+      return true;
+    }
+    if (object instanceof EObject)
+    {
+      return ((EObject)object).eClass().getEPackage() == modelPackage;
+    }
+    return false;
+  }
+
+  /**
+   * The switch that delegates to the <code>createXXX</code> methods.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected HibernateTestSwitch<Adapter> modelSwitch = new HibernateTestSwitch<Adapter>()
+  {
+    @Override
+    public Adapter caseBz356181_Main(Bz356181_Main object)
+    {
+      return createBz356181_MainAdapter();
+    }
+
+    @Override
+    public Adapter caseBz356181_Transient(Bz356181_Transient object)
+    {
+      return createBz356181_TransientAdapter();
+    }
+
+    @Override
+    public Adapter caseBz356181_NonTransient(Bz356181_NonTransient object)
+    {
+      return createBz356181_NonTransientAdapter();
+    }
+
+    @Override
+    public Adapter caseBz387752_Main(Bz387752_Main object)
+    {
+      return createBz387752_MainAdapter();
+    }
+
+    @Override
+    public Adapter caseBz380987_Group(Bz380987_Group object)
+    {
+      return createBz380987_GroupAdapter();
+    }
+
+    @Override
+    public Adapter caseBz380987_Place(Bz380987_Place object)
+    {
+      return createBz380987_PlaceAdapter();
+    }
+
+    @Override
+    public Adapter caseBz380987_Person(Bz380987_Person object)
+    {
+      return createBz380987_PersonAdapter();
+    }
+
+    @Override
+    public Adapter caseBz398057A(Bz398057A object)
+    {
+      return createBz398057AAdapter();
+    }
+
+    @Override
+    public Adapter caseBz398057A1(Bz398057A1 object)
+    {
+      return createBz398057A1Adapter();
+    }
+
+    @Override
+    public Adapter caseBz398057B(Bz398057B object)
+    {
+      return createBz398057BAdapter();
+    }
+
+    @Override
+    public Adapter caseBz398057B1(Bz398057B1 object)
+    {
+      return createBz398057B1Adapter();
+    }
+
+    @Override
+    public Adapter caseBz397682P(Bz397682P object)
+    {
+      return createBz397682PAdapter();
+    }
+
+    @Override
+    public Adapter caseBz397682C(Bz397682C object)
+    {
+      return createBz397682CAdapter();
+    }
+
+    @Override
+    public Adapter defaultCase(EObject object)
+    {
+      return createEObjectAdapter();
+    }
+  };
+
+  /**
+   * Creates an adapter for the <code>target</code>.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param target the object to adapt.
+   * @return the adapter for the <code>target</code>.
+   * @generated
+   */
+  @Override
+  public Adapter createAdapter(Notifier target)
+  {
+    return modelSwitch.doSwitch((EObject)target);
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main <em>Bz356181 Main</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main
+   * @generated
+   */
+  public Adapter createBz356181_MainAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient <em>Bz356181 Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient
+   * @generated
+   */
+  public Adapter createBz356181_TransientAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient <em>Bz356181 Non Transient</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient
+   * @generated
+   */
+  public Adapter createBz356181_NonTransientAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main <em>Bz387752 Main</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main
+   * @generated
+   */
+  public Adapter createBz387752_MainAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group <em>Bz380987 Group</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group
+   * @generated
+   */
+  public Adapter createBz380987_GroupAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place <em>Bz380987 Place</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place
+   * @generated
+   */
+  public Adapter createBz380987_PlaceAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person <em>Bz380987 Person</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person
+   * @generated
+   */
+  public Adapter createBz380987_PersonAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A <em>Bz398057 A</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A
+   * @generated
+   */
+  public Adapter createBz398057AAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1 <em>Bz398057 A1</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1
+   * @generated
+   */
+  public Adapter createBz398057A1Adapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B <em>Bz398057 B</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B
+   * @generated
+   */
+  public Adapter createBz398057BAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1 <em>Bz398057 B1</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1
+   * @generated
+   */
+  public Adapter createBz398057B1Adapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P <em>Bz397682 P</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P
+   * @generated
+   */
+  public Adapter createBz397682PAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C <em>Bz397682 C</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C
+   * @generated
+   */
+  public Adapter createBz397682CAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for the default case.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @generated
+   */
+  public Adapter createEObjectAdapter()
+  {
+    return null;
+  }
+
+} // HibernateTestAdapterFactory
diff --git a/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.java b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.java
new file mode 100644
index 0000000..e930808
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.hibernate/src/org/eclipse/emf/cdo/tests/hibernate/model/HibernateTest/util/HibernateTestSwitch.java
@@ -0,0 +1,463 @@
+/*
+ * Copyright (c) 2012, 2013, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.util;
+
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_NonTransient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz356181_Transient;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Group;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Person;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz380987_Place;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz387752_Main;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682C;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz397682P;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057A1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.Bz398057B1;
+import org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.cdo.tests.hibernate.model.HibernateTest.HibernateTestPackage
+ * @generated
+ */
+public class HibernateTestSwitch<T> extends Switch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static HibernateTestPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HibernateTestSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = HibernateTestPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Checks whether this is a switch for the given package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @parameter ePackage the package in question.
+   * @return whether this is a switch for the given package.
+   * @generated
+   */
+  @Override
+  protected boolean isSwitchFor(EPackage ePackage)
+  {
+    return ePackage == modelPackage;
+  }
+
+  /**
+   * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the first non-null result returned by a <code>caseXXX</code> call.
+   * @generated
+   */
+  @Override
+  protected T doSwitch(int classifierID, EObject theEObject)
+  {
+    switch (classifierID)
+    {
+    case HibernateTestPackage.BZ356181_MAIN:
+    {
+      Bz356181_Main bz356181_Main = (Bz356181_Main)theEObject;
+      T result = caseBz356181_Main(bz356181_Main);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ356181_TRANSIENT:
+    {
+      Bz356181_Transient bz356181_Transient = (Bz356181_Transient)theEObject;
+      T result = caseBz356181_Transient(bz356181_Transient);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ356181_NON_TRANSIENT:
+    {
+      Bz356181_NonTransient bz356181_NonTransient = (Bz356181_NonTransient)theEObject;
+      T result = caseBz356181_NonTransient(bz356181_NonTransient);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ387752_MAIN:
+    {
+      Bz387752_Main bz387752_Main = (Bz387752_Main)theEObject;
+      T result = caseBz387752_Main(bz387752_Main);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ380987_GROUP:
+    {
+      Bz380987_Group bz380987_Group = (Bz380987_Group)theEObject;
+      T result = caseBz380987_Group(bz380987_Group);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ380987_PLACE:
+    {
+      Bz380987_Place bz380987_Place = (Bz380987_Place)theEObject;
+      T result = caseBz380987_Place(bz380987_Place);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ380987_PERSON:
+    {
+      Bz380987_Person bz380987_Person = (Bz380987_Person)theEObject;
+      T result = caseBz380987_Person(bz380987_Person);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ398057_A:
+    {
+      Bz398057A bz398057A = (Bz398057A)theEObject;
+      T result = caseBz398057A(bz398057A);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ398057_A1:
+    {
+      Bz398057A1 bz398057A1 = (Bz398057A1)theEObject;
+      T result = caseBz398057A1(bz398057A1);
+      if (result == null)
+      {
+        result = caseBz398057A(bz398057A1);
+      }
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ398057_B:
+    {
+      Bz398057B bz398057B = (Bz398057B)theEObject;
+      T result = caseBz398057B(bz398057B);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ398057_B1:
+    {
+      Bz398057B1 bz398057B1 = (Bz398057B1)theEObject;
+      T result = caseBz398057B1(bz398057B1);
+      if (result == null)
+      {
+        result = caseBz398057B(bz398057B1);
+      }
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ397682_P:
+    {
+      Bz397682P bz397682P = (Bz397682P)theEObject;
+      T result = caseBz397682P(bz397682P);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    case HibernateTestPackage.BZ397682_C:
+    {
+      Bz397682C bz397682C = (Bz397682C)theEObject;
+      T result = caseBz397682C(bz397682C);
+      if (result == null)
+      {
+        result = defaultCase(theEObject);
+      }
+      return result;
+    }
+    default:
+      return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz356181 Main</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz356181 Main</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz356181_Main(Bz356181_Main object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz356181 Transient</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz356181 Transient</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz356181_Transient(Bz356181_Transient object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz356181 Non Transient</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz356181 Non Transient</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz356181_NonTransient(Bz356181_NonTransient object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz387752 Main</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz387752 Main</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz387752_Main(Bz387752_Main object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz380987 Group</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz380987 Group</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz380987_Group(Bz380987_Group object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz380987 Place</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz380987 Place</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz380987_Place(Bz380987_Place object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz380987 Person</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz380987 Person</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz380987_Person(Bz380987_Person object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz398057 A</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz398057 A</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz398057A(Bz398057A object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz398057 A1</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz398057 A1</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz398057A1(Bz398057A1 object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz398057 B</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz398057 B</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz398057B(Bz398057B object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz398057 B1</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz398057 B1</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz398057B1(Bz398057B1 object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz397682 P</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz397682 P</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz397682P(Bz397682P object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bz397682 C</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bz397682 C</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBz397682C(Bz397682C object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch, but this is the last case anyway.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+   * @generated
+   */
+  @Override
+  public T defaultCase(EObject object)
+  {
+    return null;
+  }
+
+} // HibernateTestSwitch
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.classpath b/org.eclipse.emf.cdo.tests.objectivity/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.options b/org.eclipse.emf.cdo.tests.objectivity/.options
new file mode 100644
index 0000000..1100fed
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.options
@@ -0,0 +1,3 @@
+# Debugging and tracing options
+
+org.eclipse.emf.cdo.tests.objectivity/debug = true
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.project b/org.eclipse.emf.cdo.tests.objectivity/.project
new file mode 100644
index 0000000..5d1e92e
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.emf.cdo.tests.objectivity</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.oomph.version.VersionBuilder</name>
+			<arguments>
+				<dictionary>
+					<key>check.maven.pom</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>ignore.lower.bound.dependency.ranges</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>release.path</key>
+					<value>/org.eclipse.emf.cdo.releng/versions/release.xml</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.oomph.version.VersionNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1396938000000</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-true-false-target</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..2157c43
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Jul 04 12:59:52 CEST 2011
+eclipse.preferences.version=1
+
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3413c04
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,381 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,HIGH,LOW,LOW,LOW,LOW,LOW
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,PERF,MEM,POLISH,@generated NOT,@ADDED
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=160
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..222aec0
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,119 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=12
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004-2018 Eike Stepper (Loehne, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n *    Eike Stepper - initial API and implementation\r\n */</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="false" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">${exception_var}.printStackTrace();</template><template autoinsert\="false" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">${body_statement}</template><template autoinsert\="false" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..864e30f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs
new file mode 100644
index 0000000..b050639
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.tasks.ui.prefs
@@ -0,0 +1,4 @@
+#Thu Feb 04 09:44:24 CET 2010
+eclipse.preferences.version=1
+project.repository.kind=bugzilla
+project.repository.url=https\://bugs.eclipse.org/bugs
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs
new file mode 100644
index 0000000..97c11e6
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.mylyn.team.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Feb 04 09:44:24 CET 2010
+commit.comment.template=[${task.id}] ${task.description}\r\n\r\n${task.url}
+eclipse.preferences.version=1
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.core.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..d4e5e9d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Fri May 22 23:02:22 CEST 2009
+eclipse.preferences.version=1
+resolve.requirebundle=false
diff --git a/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.prefs b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..fe01bb7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,31 @@
+#Thu Feb 04 09:44:24 CET 2010
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=2
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=1
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git "a/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Audit.launch" "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Audit.launch"
new file mode 100644
index 0000000..ad05257
--- /dev/null
+++ "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Audit.launch"
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DATA_COLLECTOR" value="org.eclipse.tptp.trace.jvmti.jvmtiMechanism:org.eclipse.tptp.analysisType.jvmti.execution"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_FILE" value=""/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_MONITOR" value="DefaultMonitor"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_PROJECT" value="ProfileProject"/>
+<booleanAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILE_TO_FILE" value="false"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILING_SET" value="tptp-dummy-profiling-set-CDO AllTests (Objectivity)"/>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.objectivity.AllTestsObjyAudit"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.objectivity"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#13;&#10;-Xmx512m"/>
+</launchConfiguration>
diff --git "a/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Branching.launch" "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Branching.launch"
new file mode 100644
index 0000000..326aed8
--- /dev/null
+++ "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 Branching.launch"
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DATA_COLLECTOR" value="org.eclipse.tptp.trace.jvmti.jvmtiMechanism:org.eclipse.tptp.analysisType.jvmti.execution"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_FILE" value=""/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_MONITOR" value="DefaultMonitor"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_PROJECT" value="ProfileProject"/>
+<booleanAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILE_TO_FILE" value="false"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILING_SET" value="tptp-dummy-profiling-set-CDO AllTests (Objectivity)"/>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.objectivity.AllTestsObjyBranching"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.objectivity"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms512m&#13;&#10;-Xmx1024m&#13;&#10;-Dorg.eclipse.net4j.util.om.trace.disable=true"/>
+</launchConfiguration>
diff --git "a/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 NonAudit.launch" "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 NonAudit.launch"
new file mode 100644
index 0000000..69c70ef
--- /dev/null
+++ "b/org.eclipse.emf.cdo.tests.objectivity/CDO AllTests \050Objectivity\051 NonAudit.launch"
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DATA_COLLECTOR" value="org.eclipse.tptp.trace.jvmti.jvmtiMechanism:org.eclipse.tptp.analysisType.jvmti.execution"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_FILE" value=""/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_MONITOR" value="DefaultMonitor"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_DESTINATION_PROJECT" value="ProfileProject"/>
+<booleanAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILE_TO_FILE" value="false"/>
+<stringAttribute key="org.eclipse.hyades.trace.ui.ATTR_PROFILING_SET" value="tptp-dummy-profiling-set-CDO AllTests (Objectivity) NonAudit"/>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.objectivity.AllTestsObjyNonAudit"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.objectivity"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#13;&#10;-Xmx512m"/>
+</launchConfiguration>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/META-INF/MANIFEST.MF b/org.eclipse.emf.cdo.tests.objectivity/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..978dac3
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.emf.cdo.tests.objectivity;singleton:=true
+Bundle-Version: 4.0.600.qualifier
+Require-Bundle: org.eclipse.emf.cdo.server.objectivity;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.emf.cdo.tests;bundle-version="[4.0.0,5.0.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Import-Package: com.objy.as;version="[4.0.0,5.0.0)",
+ com.objy.as.app;version="[4.0.0,5.0.0)",
+ com.objy.db;version="[4.0.0,5.0.0)",
+ com.objy.db.app;version="[4.0.0,5.0.0)",
+ com.objy.db.iapp;version="[4.0.0,5.0.0)",
+ com.objy.db.util;version="[4.0.0,5.0.0)",
+ com.objy.pm;version="[4.0.0,5.0.0)",
+ com.objy.pm.asapp;version="[4.0.0,5.0.0)",
+ com.objy.pm.asexcep;version="[4.0.0,5.0.0)",
+ com.objy.pm.tmi;version="[4.0.0,5.0.0)"
+Export-Package: org.eclipse.emf.cdo.tests.objectivity;version="4.0.600";x-internal:=true
+Automatic-Module-Name: org.eclipse.emf.cdo.tests.objectivity
diff --git a/org.eclipse.emf.cdo.tests.objectivity/about.html b/org.eclipse.emf.cdo.tests.objectivity/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/log4j.properties b/org.eclipse.emf.cdo.tests.objectivity/bin/log4j.properties
new file mode 100644
index 0000000..5fe42d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/log4j.properties
@@ -0,0 +1,9 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.class
new file mode 100644
index 0000000..4d51f73
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.class
new file mode 100644
index 0000000..d144e84
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.class
new file mode 100644
index 0000000..44c47a2
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.class
new file mode 100644
index 0000000..0816a73
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.class
new file mode 100644
index 0000000..4cfe961
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.class
new file mode 100644
index 0000000..441e8f7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.class
new file mode 100644
index 0000000..39e7182
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDbStore.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDbStore.class
new file mode 100644
index 0000000..a585fd7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyDbStore.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.class
new file mode 100644
index 0000000..63975a7
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyLocalArrayListLong.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyLocalArrayListLong.class
new file mode 100644
index 0000000..1f3e544
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyLocalArrayListLong.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$1.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$1.class
new file mode 100644
index 0000000..707aaee
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$1.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$2.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$2.class
new file mode 100644
index 0000000..3b1946b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$2.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$3.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$3.class
new file mode 100644
index 0000000..efb24bd
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest$3.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.class
new file mode 100644
index 0000000..0364b3d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.class
new file mode 100644
index 0000000..8e8f4dc
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/Temp.class b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/Temp.class
new file mode 100644
index 0000000..46ca397
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/bin/org/eclipse/emf/cdo/tests/objectivity/Temp.class
Binary files differ
diff --git a/org.eclipse.emf.cdo.tests.objectivity/build.properties b/org.eclipse.emf.cdo.tests.objectivity/build.properties
new file mode 100644
index 0000000..28f0883
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/build.properties
@@ -0,0 +1,24 @@
+# Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#    Eike Stepper - initial API and implementation
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.properties,\
+               about.html,\
+               .options
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html,\
+               CDO AllTests (Objectivity) NonAudit.launch,\
+               CDO AllTests (Objectivity) Audit.launch,\
+               CDO AllTests (Objectivity) Branching.launch,\
+               pom.xml
+
+generateSourceReferences = true
diff --git a/org.eclipse.emf.cdo.tests.objectivity/config/fdconfig.xml b/org.eclipse.emf.cdo.tests.objectivity/config/fdconfig.xml
new file mode 100644
index 0000000..d1e4b42
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/config/fdconfig.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+<bean id="fdConfig" class="org.eclipse.emf.objy.util.FdManager">
+	<property name="fdName" value="emfoo" />
+	<property name="fdFileHost" value="127.0.0.1" />
+	<property name="fdDirPath" value="e:\data2" />
+	<property name="lockServerHost" value="127.0.0.1" />
+	<property name="fdNumber" value="12345" />
+	<property name="pageSize" value="8192" />
+</bean>	
+
+</beans>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/config/repo1_clustering.xml b/org.eclipse.emf.cdo.tests.objectivity/config/repo1_clustering.xml
new file mode 100644
index 0000000..bded14d
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/config/repo1_clustering.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+<bean id="clusterManager" class="org.eclipse.emf.objy.clustering.impl.ClusteringManagerImpl">
+	<property name="databaseName" value="repo1_clustering" />
+	<property name="mapOfClusteringStrategy">
+	<map>
+		<entry>
+		 	<key><value>*</value></key>
+			<ref bean="DEFAULT"/>
+		</entry> 
+		<entry>
+		 	<key><value>CATEGORY</value></key>
+			<ref bean="CATEGORY"/>
+		</entry> 
+	</map>
+	</property>
+</bean>	
+
+<bean id="DEFAULT" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo1_defaultDatabase" />
+</bean>	
+
+<bean id="CATEGORY" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="name" value="CATEGORY" />
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo1_CATEGORY" />
+</bean>	
+
+</beans>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/config/repo2_clustering.xml b/org.eclipse.emf.cdo.tests.objectivity/config/repo2_clustering.xml
new file mode 100644
index 0000000..4614403
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/config/repo2_clustering.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+<bean id="clusterManager" class="org.eclipse.emf.objy.clustering.impl.ClusteringManagerImpl">
+	<property name="databaseName" value="repo2_clustering" />
+	<property name="mapOfClusteringStrategy">
+	<map>
+		<entry>
+		 	<key><value>*</value></key>
+			<ref bean="DEFAULT"/>
+		</entry> 
+		<entry>
+		 	<key><value>CATEGORY</value></key>
+			<ref bean="CATEGORY"/>
+		</entry> 
+	</map>
+	</property>
+</bean>	
+
+<bean id="DEFAULT" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo2_defaultDatabase" />
+</bean>	
+
+<bean id="CATEGORY" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="name" value="CATEGORY" />
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo2_CATEGORY" />
+</bean>	
+
+</beans>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/config/repo3_clustering.xml b/org.eclipse.emf.cdo.tests.objectivity/config/repo3_clustering.xml
new file mode 100644
index 0000000..aacdc17
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/config/repo3_clustering.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+<bean id="clusterManager" class="org.eclipse.emf.objy.clustering.impl.ClusteringManagerImpl">
+	<property name="databaseName" value="repo3_clustering" />
+	<property name="mapOfClusteringStrategy">
+	<map>
+		<entry>
+		 	<key><value>*</value></key>
+			<ref bean="DEFAULT"/>
+		</entry> 
+		<entry>
+		 	<key><value>CATEGORY</value></key>
+			<ref bean="CATEGORY"/>
+		</entry> 
+	</map>
+	</property>
+</bean>	
+
+<bean id="DEFAULT" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo3_defaultDatabase" />
+</bean>	
+
+<bean id="CATEGORY" class="org.eclipse.emf.objy.clustering.impl.ContainerClusteringStrategy">
+	<property name="name" value="CATEGORY" />
+	<property name="maxPagesPerContainer" value="60000" />
+	<property name="dbName" value="repo3_CATEGORY" />
+</bean>	
+
+</beans>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/plugin.properties b/org.eclipse.emf.cdo.tests.objectivity/plugin.properties
new file mode 100644
index 0000000..f44d549
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/plugin.properties
@@ -0,0 +1,25 @@
+# Copyright (c) 2010, 2012 Eike Stepper (Loehne, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#    Eike Stepper - initial API and implementation
+   
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName = CDO Model Repository Tests Objectivity
+providerName = Eclipse Modeling Project
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/org.eclipse.emf.cdo.tests.objectivity/pom.xml b/org.eclipse.emf.cdo.tests.objectivity/pom.xml
new file mode 100644
index 0000000..7babe24
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright (c) 2017 Eike Stepper (Loehne, Germany) and others.
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+  Contributors:
+    Eike Stepper - initial API and implementation
+-->
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+	  <groupId>org.eclipse.emf.cdo</groupId>
+    <artifactId>org.eclipse.emf.cdo.plugins</artifactId>
+    <version>4.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.emf.cdo.releng.parent/plugins</relativePath>
+  </parent>
+
+  <groupId>org.eclipse.emf.cdo</groupId>
+  <artifactId>org.eclipse.emf.cdo.tests.objectivity</artifactId>
+  <version>4.0.600-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/log4j.properties b/org.eclipse.emf.cdo.tests.objectivity/src/log4j.properties
new file mode 100644
index 0000000..5fe42d8
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/log4j.properties
@@ -0,0 +1,9 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.java
new file mode 100644
index 0000000..a66567b
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyAudit.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010-2013, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Victor Roldan Betancort - 289360: [DB] [maintenance] Support FeatureMaps
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Eike Stepper
+ */
+public class AllTestsObjyAudit extends ObjyDBConfigs
+{
+  public static Test suite()
+  {
+    return new AllTestsObjyAudit().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new ObjyConfig().supportingAudits(true), JVM, NATIVE);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.java
new file mode 100644
index 0000000..d083feb
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyBranching.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2010-2013, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Victor Roldan Betancort - 289360: [DB] [maintenance] Support FeatureMaps
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Eike Stepper
+ */
+public class AllTestsObjyBranching extends ObjyDBConfigs
+{
+  public static Test suite()
+  {
+    return new AllTestsObjyBranching().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new ObjyConfig().supportingBranches(true), JVM, NATIVE);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.java
new file mode 100644
index 0000000..d26fe7f
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/AllTestsObjyNonAudit.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2010-2013, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ *    Victor Roldan Betancort - 289360: [DB] [maintenance] Support FeatureMaps
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.tests.ExternalReferenceTest;
+import org.eclipse.emf.cdo.tests.config.IScenario;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
+
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Eike Stepper
+ */
+public class AllTestsObjyNonAudit extends ObjyDBConfigs
+{
+  public static Test suite()
+  {
+    return new AllTestsObjyNonAudit().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new ObjyConfig(), JVM, NATIVE);
+  }
+
+  @Override
+  protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
+  {
+    super.initTestClasses(testClasses, scenario);
+
+    // There is a problem with the root resource sharing, so for now we're commenting
+    // out ExternalReferenceTest and Bugzilla_259869_Test
+    testClasses.remove(ExternalReferenceTest.class);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.java
new file mode 100644
index 0000000..484a459
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyArrayListTest.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyArrayList;
+
+import com.objy.as.app.Class_Object;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+/**
+ * Class to be used for testing, all persistence related calls are overriden by local ones.
+ *
+ * @author ibrahim
+ */
+class ObjyLocalArrayListLong extends ObjyArrayList<Long>
+{
+  public ObjyLocalArrayListLong(Class_Object classObject)
+  {
+    super(classObject);
+  }
+
+  ArrayList<Long> arrayList = new ArrayList<Long>();
+
+  long arraySize = 0;
+
+  @Override
+  protected void setValue(long index, Long newValue)
+  {
+    arrayList.set((int)index, newValue);
+  }
+
+  @Override
+  protected Long getValue(long index)
+  {
+    return arrayList.get((int)index);
+  }
+
+  @Override
+  protected long cachedSize()
+  {
+    if (cacheSize == -1)
+    {
+      cacheSize = arraySize;
+    }
+    return cacheSize;
+  }
+
+  @Override
+  protected void update()
+  {
+    // do nothing.
+  }
+
+  @Override
+  protected long getVArraySize()
+  {
+    return arrayList.size();
+  }
+
+  @Override
+  protected void saveSize()
+  {
+    arraySize = cacheSize;
+    cacheSize = -1;
+  }
+
+  @Override
+  protected void grow(int item)
+  {
+    for (int i = 0; i < Math.max(item + 10, 10); i++)
+    {
+      arrayList.add(new Long(0));
+    }
+  }
+
+  @Override
+  public long size()
+  {
+    return arraySize;
+  }
+}
+
+public class ObjyArrayListTest
+{
+  ObjyLocalArrayListLong arrayListLong;
+
+  int numItems = 10;
+
+  @Before
+  public void setUp()
+  {
+    arrayListLong = new ObjyLocalArrayListLong(null);
+    // fill the array.
+    for (int i = 0; i < numItems; i++)
+    {
+      arrayListLong.add(new Long(i));
+    }
+  }
+
+  @Test
+  public void moveItems()
+  {
+    // move elemnt 7 to spot 2.
+    arrayListLong.move(2, 7);
+    assertEquals(numItems, arrayListLong.size());
+    assertEquals(new Long(7), arrayListLong.get(2));
+  }
+
+  @Test
+  public void removeLastItem()
+  {
+    //
+    arrayListLong.remove((int)arrayListLong.size());
+    assertEquals(numItems - 1, arrayListLong.size());
+  }
+
+  @Test
+  public void removeMiddleItem()
+  {
+    //
+    arrayListLong.remove(5);
+    assertEquals(numItems - 1, arrayListLong.size());
+  }
+
+  @Test(expected = IndexOutOfBoundsException.class)
+  public void empty()
+  {
+    new ArrayList<Object>().get(0);
+  }
+
+  @After
+  public void tearDown()
+  {
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.java
new file mode 100644
index 0000000..653e8d3
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyBranchManagementTest.java
@@ -0,0 +1,569 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Ibrahim Sallam - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.emf.cdo.server.internal.objectivity.db.FdManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyConnection;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranch;
+import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyBranchManager;
+import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
+
+import com.objy.db.app.oo;
+import com.objy.db.app.ooObj;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+class Temp extends ooObj
+{
+  protected long lValue = 0;
+
+  protected int revision = 0;
+
+  private int branchId = 0;
+
+  public Temp(long value)
+  {
+    lValue = value;
+    revision = 1;
+  }
+
+  public void revisionIt()
+  {
+    markModified();
+    revision++;
+  }
+
+  public void setBranch(int id)
+  {
+    markModified();
+    branchId = id;
+  }
+
+  public int getRevision()
+  {
+    fetch();
+    return revision;
+  }
+
+  public int getBranchId()
+  {
+    fetch();
+    return branchId;
+  }
+
+  public long getValue()
+  {
+    fetch();
+    return lValue;
+  }
+}
+
+/**
+ * This class will hide access to Objectivity/Db
+ *
+ * @author Ibrahim Sallam
+ */
+class ObjyDbStore
+{
+  // private final String fdName = "c:\\data\\objyBranchTest.boot"; // TODO - this is windows path style, generalise it.
+
+  private final String repoName = "TestRepo";
+
+  private FdManager fdManager;
+
+  private ObjyConnection objyConnection;
+
+  private ObjySession objySession;
+
+  public ObjyDbStore()
+  {
+    fdManager = new FdManager();
+    objyConnection = ObjyConnection.INSTANCE;
+  }
+
+  public void startup()
+  {
+    fdManager.setFdDirPath("\\temp");
+    fdManager.configure("objyBrnachTest");
+    objyConnection.connect(fdManager.getFd(), oo.LogNone);
+    objySession = objyConnection.getWriteSessionFromPool("TestSession");
+  }
+
+  public void shutdown()
+  {
+    fdManager.removeData();
+    objyConnection.disconnect();
+  }
+
+  public ObjyBranchManager getBranchManager()
+  {
+    return ObjyDb.getOrCreateBranchManager(repoName);
+  }
+
+  public void begin()
+  {
+    objySession.begin();
+  }
+
+  public void commit()
+  {
+    objySession.commit();
+  }
+
+  public Temp newObject()
+  {
+    return new Temp(System.currentTimeMillis());
+  }
+}
+
+/**
+ * @author Ibrahim Sallam
+ */
+public class ObjyBranchManagementTest
+{
+  private static final String BRANCH_NAME_A = "MyBranchA";
+
+  private static final String BRANCH_NAME_B = "MyBranchB";
+
+  private final int baseBranchId = 0;
+
+  private final long baseBranchTimeStamp = System.currentTimeMillis();
+
+  ObjyDbStore dbStore = null;
+
+  BranchInfo branchInfoA = null;
+
+  BranchInfo branchInfoB = null;
+
+  public static final int NEW_BRANCH = Integer.MAX_VALUE;
+
+  public static final int NEW_LOCAL_BRANCH = Integer.MIN_VALUE;
+
+  @Before
+  public void setUp()
+  {
+    dbStore = new ObjyDbStore();
+    branchInfoA = new BranchInfo(BRANCH_NAME_A, baseBranchId, baseBranchTimeStamp);
+    branchInfoB = new BranchInfo(BRANCH_NAME_B, baseBranchId, baseBranchTimeStamp);
+    dbStore.startup();
+  }
+
+  @Test
+  public void getNextBranchId()
+  {
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().nextBranchId();
+    dbStore.commit();
+    assertEquals(true, branchId > 0);
+  }
+
+  @Test
+  public void createBranch()
+  {
+    dbStore.begin();
+    int nextBranchId = dbStore.getBranchManager().getLastBranchId() + 1;
+    dbStore.commit();
+
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.commit();
+    assertEquals(branchId, nextBranchId);
+  }
+
+  @Test
+  public void getUnavailableBranch()
+  {
+    dbStore.begin();
+    ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(1);
+    dbStore.commit();
+    assertEquals(true, objyBranch == null);
+  }
+
+  @Test
+  public void getBranch()
+  {
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_LOCAL_BRANCH, branchInfoB).getElement1();
+    dbStore.commit();
+    // using the branchId we'll get it from the dbStore.
+    dbStore.begin();
+    BranchInfo branchInfo = dbStore.getBranchManager().getBranch(branchId).getBranchInfo();
+    dbStore.commit();
+    assertEquals(baseBranchId, branchInfo.getBaseBranchID());
+    assertEquals(baseBranchTimeStamp, branchInfo.getBaseTimeStamp());
+    assertEquals(BRANCH_NAME_B, branchInfo.getName());
+  }
+
+  @Test
+  public void createBranches()
+  {
+    // Create a group of branches (no sub-branches)
+    dbStore.begin();
+    int branchIdA = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    int branchIdB = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoB).getElement1();
+    dbStore.commit();
+
+    dbStore.begin();
+    int nextBranchId = dbStore.getBranchManager().nextBranchId();
+    dbStore.commit();
+    assertEquals(true, branchIdA < nextBranchId);
+    assertEquals(true, branchIdB < nextBranchId);
+  }
+
+  @Test
+  public void getBranches()
+  {
+    // Get all branches from a created group.
+
+    // Create a group of branches (no sub-branches)
+    dbStore.begin();
+    int branchIdA = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    int branchIdB = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoB).getElement1();
+    dbStore.commit();
+
+    // using the branchId we'll get it from the dbStore.
+    dbStore.begin();
+    BranchInfo branchInfoB = dbStore.getBranchManager().getBranch(branchIdB).getBranchInfo();
+    dbStore.commit();
+    assertEquals(baseBranchId, branchInfoB.getBaseBranchID());
+    assertEquals(baseBranchTimeStamp, branchInfoB.getBaseTimeStamp());
+    assertEquals(BRANCH_NAME_B, branchInfoB.getName());
+
+    // using the branchId we'll get it from the dbStore.
+    dbStore.begin();
+    BranchInfo branchInfoA = dbStore.getBranchManager().getBranch(branchIdA).getBranchInfo();
+    dbStore.commit();
+    assertEquals(baseBranchId, branchInfoA.getBaseBranchID());
+    assertEquals(baseBranchTimeStamp, branchInfoA.getBaseTimeStamp());
+    assertEquals(BRANCH_NAME_A, branchInfoA.getName());
+  }
+
+  @Test
+  public void getBrancheRange()
+  {
+    // Get a range of branches from a created group.
+    int thisBaseBranchId = 0;
+    long thisBaseBranchTimeStamp = System.currentTimeMillis();
+
+    // Create a group of branches (no sub-branches)
+    dbStore.begin();
+    String prefixString = "Branch_";
+    List<Integer> branchList = new ArrayList<Integer>();
+    for (int i = 0; i < 20; i++)
+    {
+      dbStore.begin();
+      BranchInfo branchInfo = new BranchInfo(prefixString + i, thisBaseBranchId, thisBaseBranchTimeStamp);
+      int id = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfo).getElement1();
+      branchList.add(id);
+      dbStore.commit();
+    }
+    dbStore.commit();
+
+    // Get range from 5 to 10.
+    {
+      dbStore.begin();
+      List<ObjyBranch> branchRangeList = dbStore.getBranchManager().getBranches(branchList.get(5), branchList.get(10));
+      int index = 5;
+      for (ObjyBranch objyBranch : branchRangeList)
+      {
+        int expectedId = branchList.get(index);
+        assertEquals(expectedId, objyBranch.getBranchId());
+        assertEquals(thisBaseBranchId, objyBranch.getBaseBranchId());
+        assertEquals(thisBaseBranchTimeStamp, objyBranch.getBaseBranchTimeStamp());
+        assertEquals("Branch_" + index, objyBranch.getBranchName());
+        index++;
+      }
+      dbStore.commit();
+    }
+
+    // Get range from 7 to end.
+    {
+      dbStore.begin();
+      List<ObjyBranch> branchRangeList = dbStore.getBranchManager().getBranches(branchList.get(7), 0);
+      assertEquals(13, branchRangeList.size());
+
+      int index = 7;
+      for (ObjyBranch objyBranch : branchRangeList)
+      {
+        int expectedId = branchList.get(index);
+        assertEquals(expectedId, objyBranch.getBranchId());
+        assertEquals(thisBaseBranchId, objyBranch.getBaseBranchId());
+        assertEquals(thisBaseBranchTimeStamp, objyBranch.getBaseBranchTimeStamp());
+        assertEquals("Branch_" + index, objyBranch.getBranchName());
+        index++;
+      }
+      dbStore.commit();
+    }
+  }
+
+  @Test
+  public void deleteBranch()
+  {
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.commit();
+
+    // delete it.
+    dbStore.begin();
+    assertEquals(true, dbStore.getBranchManager().deleteBranch(branchId));
+    dbStore.commit();
+  }
+
+  @Test
+  public void createSubBranches()
+  {
+    dbStore.begin();
+    int thisBaseBranchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoB);
+    long thisBaseBranchTimeStamp = System.currentTimeMillis();
+    // using the created branch we'll create subBranches.
+    dbStore.commit();
+
+    String prefixString = "SubBranch_";
+    List<Integer> subBranchList = new ArrayList<Integer>();
+    for (int i = 0; i < 10; i++)
+    {
+      dbStore.begin();
+      BranchInfo branchInfo = new BranchInfo(prefixString + i, thisBaseBranchId, thisBaseBranchTimeStamp);
+      int id = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfo).getElement1();
+      subBranchList.add(id);
+      dbStore.commit();
+    }
+    // get sub-branches for 0.
+    List<ObjyBranch> objyBranchList = new ArrayList<ObjyBranch>();
+
+    dbStore.begin();
+    objyBranchList = dbStore.getBranchManager().getSubBranches(0);
+    assertEquals(2, objyBranchList.size());
+    dbStore.commit();
+
+    dbStore.begin();
+    objyBranchList = dbStore.getBranchManager().getSubBranches(thisBaseBranchId);
+    assertEquals(10, objyBranchList.size());
+    dbStore.commit();
+
+  }
+
+  @Test
+  public void getSubBranches()
+  {
+    dbStore.begin();
+    int thisBaseBranchId = dbStore.getBranchManager().createBranch(NEW_LOCAL_BRANCH, branchInfoA).getElement1();
+    long thisBaseBranchTimeStamp = System.currentTimeMillis();
+    // using the created branch we'll create subBranches.
+    dbStore.commit();
+
+    String prefixString = "SubBranch_";
+    List<Integer> subBranchList = new ArrayList<Integer>();
+    for (int i = 0; i < 10; i++)
+    {
+      dbStore.begin();
+      BranchInfo branchInfo = new BranchInfo(prefixString + i, thisBaseBranchId, thisBaseBranchTimeStamp);
+      int id = dbStore.getBranchManager().createBranch(NEW_LOCAL_BRANCH, branchInfo).getElement1();
+      subBranchList.add(id);
+      dbStore.commit();
+    }
+    // verify that we have sub-branches.
+    dbStore.begin();
+    int i = 0;
+    for (Integer iValue : subBranchList)
+    {
+      BranchInfo branchInfo = dbStore.getBranchManager().getBranch(iValue).getBranchInfo();
+      assertEquals(thisBaseBranchId, branchInfo.getBaseBranchID());
+      assertEquals(thisBaseBranchTimeStamp, branchInfo.getBaseTimeStamp());
+      assertEquals(prefixString + i++, branchInfo.getName());
+    }
+    dbStore.commit();
+
+  }
+
+  @Test
+  public void addRevisionsToBranch()
+  {
+    List<Temp> objectList = new ArrayList<Temp>();
+    // create 100 objects in Objy (Main Branch).
+    dbStore.begin();
+    for (int i = 0; i < 100; i++)
+    {
+      Temp tempObject = dbStore.newObject();
+      if (i % 2 == 0)
+      {
+        objectList.add(tempObject);
+      }
+    }
+    dbStore.commit();
+
+    // create a branch.
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.commit();
+
+    // version what we collected in the array, and put them into a new branch.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+
+      for (Temp tempObj : objectList)
+      {
+        tempObj.setBranch(branchId);
+        tempObj.revisionIt();
+        objyBranch.addRevision(tempObj);
+      }
+      dbStore.commit();
+    }
+    // verify that the number of revisions in a branch is the same as what
+    // we added.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+      assertEquals(objectList.size(), objyBranch.numberOfRevisions());
+      dbStore.commit();
+    }
+  }
+
+  @Test
+  public void getRevisionsFromBranch()
+  {
+    List<Temp> objectList = new ArrayList<Temp>();
+    // create 100 objects in Objy (Main Branch).
+    dbStore.begin();
+    for (int i = 0; i < 200; i++)
+    {
+      Temp tempObject = dbStore.newObject();
+      if (i % 2 == 0)
+      {
+        objectList.add(tempObject);
+      }
+    }
+    dbStore.commit();
+
+    // create a branch.
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.commit();
+
+    // version what we collected in the array, and put them into a new branch.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+
+      for (Temp tempObj : objectList)
+      {
+        tempObj.setBranch(branchId);
+        tempObj.revisionIt();
+        objyBranch.addRevision(tempObj);
+      }
+      dbStore.commit();
+    }
+    // Get the objects from the branch.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+      Iterator<?> itr = objyBranch.getRevisions().iterator();
+      List<Temp> actualList = new ArrayList<Temp>();
+      while (itr.hasNext())
+      {
+        Temp tempObj = (Temp)itr.next();
+        assertEquals(tempObj.getBranchId(), branchId);
+        assertEquals(true, tempObj.getRevision() > 1);
+        actualList.add(tempObj);
+      }
+      assertEquals(objectList.size(), actualList.size());
+      dbStore.commit();
+    }
+  }
+
+  @Test
+  public void deleteRevisionsFromBranch()
+  {
+    List<Temp> objectList = new ArrayList<Temp>();
+    // create 100 objects in Objy (Main Branch).
+    dbStore.begin();
+    for (int i = 0; i < 100; i++)
+    {
+      Temp tempObject = dbStore.newObject();
+      if (i % 2 == 0)
+      {
+        objectList.add(tempObject);
+      }
+    }
+    dbStore.commit();
+
+    // create a branch.
+    dbStore.begin();
+    int branchId = dbStore.getBranchManager().createBranch(NEW_BRANCH, branchInfoA).getElement1();
+    dbStore.commit();
+
+    // version what we collected in the array, and put them into a new branch.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+
+      for (Temp tempObj : objectList)
+      {
+        tempObj.setBranch(branchId);
+        tempObj.revisionIt();
+        objyBranch.addRevision(tempObj);
+      }
+      dbStore.commit();
+    }
+    // verify that the number of revisions in a branch is the same as what
+    // we added.
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+      assertEquals(objectList.size(), objyBranch.numberOfRevisions());
+      dbStore.commit();
+    }
+
+    // delete revisions
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+      for (Temp tempObj : objectList)
+      {
+        assertEquals(true, objyBranch.deleteRevision(tempObj));
+      }
+      dbStore.commit();
+    }
+
+    // verify that the number of revisions are 0
+    {
+      dbStore.begin();
+      ObjyBranch objyBranch = dbStore.getBranchManager().getBranch(branchId);
+      assertEquals(0, objyBranch.numberOfRevisions());
+      dbStore.commit();
+    }
+  }
+
+  @Test(expected = IndexOutOfBoundsException.class)
+  public void empty()
+  {
+    new ArrayList<Object>().get(0);
+  }
+
+  @After
+  public void tearDown()
+  {
+    dbStore.shutdown();
+  }
+
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.java
new file mode 100644
index 0000000..1b10dd1
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyConfig.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 2012, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.server.IStore;
+import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreConfig;
+import org.eclipse.emf.cdo.server.objectivity.ObjyStoreUtil;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+
+/**
+ * @author Eike Stepper
+ */
+public class ObjyConfig extends RepositoryConfig
+{
+  public static final String STORE_NAME = "Objy";
+
+  private static final long serialVersionUID = 1L;
+
+  private static ObjectivityStoreConfig storeConfig = new ObjectivityStoreConfig();
+
+  public ObjyConfig()
+  {
+    super(STORE_NAME);
+
+    org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM.DEBUG.setEnabled(true);
+    org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM.INFO.setEnabled(true);
+  }
+
+  @Override
+  protected String getStoreName()
+  {
+    return STORE_NAME;
+  }
+
+  @Override
+  protected void deactivateRepositories()
+  {
+    super.deactivateRepositories();
+    // System.out.println(">>>>IS:<<<< We need to remove all data created here....");
+    storeConfig.resetFD();
+  }
+
+  public IStore createStore(String repoName)
+  {
+    // We might need to use the repoName to our advantage!!!
+    System.out.println("************* ObjyStore creation ****************\n");
+    return ObjyStoreUtil.createStore(storeConfig);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.java
new file mode 100644
index 0000000..3711ced
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyDBConfigs.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010-2012, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.tests.AllConfigs;
+import org.eclipse.emf.cdo.tests.AuditSameSessionTest;
+import org.eclipse.emf.cdo.tests.AuditTest;
+import org.eclipse.emf.cdo.tests.BranchingSameSessionTest;
+import org.eclipse.emf.cdo.tests.BranchingTest;
+import org.eclipse.emf.cdo.tests.MergingTest;
+import org.eclipse.emf.cdo.tests.XATransactionTest;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_252214_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_303807_Test;
+import org.eclipse.emf.cdo.tests.config.IScenario;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
+
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class ObjyDBConfigs extends AllConfigs
+{
+  @Override
+  protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
+  {
+    super.initTestClasses(testClasses, scenario);
+
+    // remove BranchingTests because most mappings do not support it
+    // Subclasses should add Banching tests if supported
+    if (!scenario.getRepositoryConfig().supportingBranches())
+    {
+      testClasses.remove(BranchingTest.class);
+      testClasses.remove(BranchingSameSessionTest.class);
+      testClasses.remove(MergingTest.class);
+      testClasses.remove(Bugzilla_303807_Test.class);
+    }
+
+    if (!scenario.getRepositoryConfig().supportingAudits())
+    {
+      // non-audit mode - remove audit tests
+      testClasses.remove(AuditTest.class);
+      testClasses.remove(AuditSameSessionTest.class);
+      testClasses.remove(Bugzilla_252214_Test.class);
+    }
+
+    // testClasses.add(DBStoreTest.class);
+    // testClasses.add(SQLQueryTest.class);
+    // testClasses.add(DBAnnotationsTest.class);
+
+    // sometime cause a crash (Investigate!!)
+    testClasses.remove(XATransactionTest.class);
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.java
new file mode 100644
index 0000000..9ced8be
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyExternalReferenceTest.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright (c) 2010-2012, 2016 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.tests.model4.GenRefSingleNonContained;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.DanglingReferenceException;
+
+import org.eclipse.net4j.util.transaction.TransactionException;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+/**
+ * @author Simon McDuff
+ */
+public class ObjyExternalReferenceTest extends AbstractCDOTest
+{
+  static final public String REPOSITORY2_NAME = "repo2";
+
+  public void testExternalWithDynamicEObject() throws Exception
+  {
+    {
+      ResourceSet resourceSet = new ResourceSetImpl();
+      resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("test", new XMIResourceFactoryImpl());
+
+      CDOSession sessionA = openSession();
+      sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+      sessionA.getPackageRegistry().putEPackage(getModel4Package());
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+
+      CDOResource resA = transactionA1.createResource("/resA");
+      Resource resD = resourceSet.createResource(URI.createURI("test://1"));
+
+      EPackage schoolPackage = createDynamicEPackage();
+      resourceSet.getPackageRegistry().put(schoolPackage.getNsURI(), schoolPackage);
+
+      EClass eClass = (EClass)schoolPackage.getEClassifier("SchoolBook");
+      EObject schoolbook = EcoreUtil.create(eClass);
+
+      GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
+      objectFromResA.setElement(schoolbook);
+      resD.getContents().add(schoolbook);
+
+      resA.getContents().add(objectFromResA);
+      transactionA1.commit();
+    }
+  }
+
+  public void testExternalWithEClass() throws Exception
+  {
+    {
+      ResourceSet resourceSet = new ResourceSetImpl();
+
+      CDOSession sessionA = openSession();
+      sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+      sessionA.getPackageRegistry().putEPackage(getModel4Package());
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+
+      CDOResource resA = transactionA1.createResource("/resA");
+      GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
+      objectFromResA.setElement(getModel1Package().getAddress());
+      resA.getContents().add(objectFromResA);
+      transactionA1.commit();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+
+    {
+      CDOSession sessionA = openSession();
+      ResourceSet resourceSet = new ResourceSetImpl();
+      resourceSet.getPackageRegistry().put(getModel1Package().getNsURI(), getModel1Package());
+
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+      CDOResource resA = transactionA1.getResource("/resA");
+
+      GenRefSingleNonContained objectFromResA = (GenRefSingleNonContained)resA.getContents().get(0);
+      assertEquals(getModel1Package().getAddress(), objectFromResA.getElement());
+      transactionA1.commit();
+    }
+  }
+
+  public void testExternalWithEPackage() throws Exception
+  {
+    {
+      CDOSession sessionA = openSession();
+
+      ResourceSet resourceSet = new ResourceSetImpl();
+
+      sessionA.getPackageRegistry().putEPackage(getModel4Package());
+      sessionA.getPackageRegistry().putEPackage(getModel4InterfacesPackage());
+
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+      CDOResource resA = transactionA1.createResource("/resA");
+      GenRefSingleNonContained objectFromResA = getModel4Factory().createGenRefSingleNonContained();
+      objectFromResA.setElement(getModel1Package());
+      resA.getContents().add(objectFromResA);
+      transactionA1.commit();
+    }
+
+    clearCache(getRepository().getRevisionManager());
+    {
+      CDOSession sessionA = openSession();
+
+      ResourceSet resourceSet = new ResourceSetImpl();
+      resourceSet.getPackageRegistry().put(getModel1Package().getNsURI(), getModel1Package());
+
+      CDOTransaction transactionA1 = sessionA.openTransaction(resourceSet);
+      CDOResource resA = transactionA1.getResource("/resA");
+
+      GenRefSingleNonContained objectFromResA = (GenRefSingleNonContained)resA.getContents().get(0);
+      assertEquals(getModel1Package(), objectFromResA.getElement());
+      transactionA1.commit();
+    }
+  }
+
+  public void testOneXMIResourceManyViewsOnOneResourceSet() throws Exception
+  {
+    return;
+
+    /*
+     * byte[] dataOfresD = null; getRepository(REPOSITORY2_NAME); { CDOSession sessionA = openSession(); CDOSession
+     * sessionB = openSession(REPOSITORY2_NAME); ResourceSet resourceSet = new ResourceSetImpl();
+     * resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("test", new XMIResourceFactoryImpl());
+     * sessionA.getPackageRegistry().putEPackage(getModel1Package());
+     * sessionA.getPackageRegistry().putEPackage(Model2Package.eINSTANCE);
+     * sessionB.getPackageRegistry().putEPackage(getModel1Package());
+     * sessionB.getPackageRegistry().putEPackage(Model2Package.eINSTANCE); CDOTransaction transactionA1 =
+     * sessionA.openTransaction(resourceSet); CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+     * CDOResource resA = transactionA1.createResource("/resA"); CDOResource resB =
+     * transactionB1.createResource("/resB"); EList<Resource> resources = resourceSet.getResources(); assertEquals(4,
+     * resources.size()); CDOResource resC = transactionA1.createResource("/resC"); assertNotNull(resC); assertEquals(5,
+     * resources.size()); Resource resD = resourceSet.createResource(URI.createURI("test://1")); assertEquals(6,
+     * resources.size()); assertEquals(false, resD instanceof CDOResource); Company companyA =
+     * getModel1Factory().createCompany(); companyA.setName("VALUEA"); Company companyB =
+     * getModel1Factory().createCompany(); companyB.setName("VALUEB"); Company companyD =
+     * getModel1Factory().createCompany(); companyD.setName("VALUED"); resD.getContents().add(companyD);
+     * resA.getContents().add(companyA); resB.getContents().add(companyB); Supplier supplier =
+     * getModel1Factory().createSupplier(); PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+     * supplier.getPurchaseOrders().add(purchaseOrder); resD.getContents().add(supplier);
+     * resA.getContents().add(purchaseOrder); CDOXATransaction transSet = CDOUtil.createXATransaction();
+     * transSet.add(CDOUtil.getViewSet(resourceSet)); transactionA1.commit(); ByteArrayOutputStream outputStream = new
+     * ByteArrayOutputStream(); resD.save(outputStream, null); dataOfresD = outputStream.toByteArray(); }
+     * clearCache(getRepository().getRevisionManager()); { ResourceSet resourceSet = new ResourceSetImpl(); CDOSession
+     * session = openSession(); CDOTransaction transaction = session.openTransaction(resourceSet); CDOSession session2 =
+     * openSession(REPOSITORY2_NAME); CDOTransaction transaction2 = session2.openTransaction(resourceSet); CDOViewSet
+     * set = CDOUtil.getViewSet(resourceSet); assertNotNull(set);
+     * resourceSet.getPackageRegistry().put(getModel1Package().getNsURI(), getModel1Package());
+     * resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("test", new XMIResourceFactoryImpl());
+     * Resource resD = resourceSet.createResource(URI.createURI("test://1")); resD.load(new
+     * ByteArrayInputStream(dataOfresD), null); CDOResource resA = transaction.getResource("/resA"); CDOResource resB =
+     * transaction2.getResource("/resB"); Company companyA = (Company)resA.getContents().get(0); Company companyB =
+     * (Company)resB.getContents().get(0); Company companyD = (Company)resD.getContents().get(0);
+     * assertNotSame(resA.getURI(), resB.getURI()); assertNotSame(resA.getPath(), "/resA");
+     * assertNotSame(resB.getPath(), "/resB"); assertNotSame(resA.cdoView(), transaction2);
+     * assertNotSame(resB.cdoView(), transaction); assertEquals("VALUEA", companyA.getName()); assertEquals("VALUEB",
+     * companyB.getName()); assertEquals("VALUED", companyD.getName()); Supplier supplierD =
+     * (Supplier)resD.getContents().get(1); PurchaseOrder pO = supplierD.getPurchaseOrders().get(0);
+     * assertEquals(transaction, CDOUtil.getCDOObject(pO).cdoView()); assertEquals(supplierD, pO.getSupplier()); }
+     */
+  }
+
+  public void testManyViewsOnOneResourceSet() throws Exception
+  {
+    /*
+     * getRepository(REPOSITORY2_NAME); { CDOSession sessionA = openSession();
+     * sessionA.getPackageRegistry().putEPackage(getModel1Package()); CDOSession sessionB =
+     * openSession(REPOSITORY2_NAME); ResourceSet resourceSet = new ResourceSetImpl(); CDOTransaction transactionA1 =
+     * sessionA.openTransaction(resourceSet); CDOTransaction transactionB1 = sessionB.openTransaction(resourceSet);
+     * CDOResource resA = transactionA1.createResource("/resA"); CDOResource resB =
+     * transactionB1.createResource("/resB"); Supplier supplier = getModel1Factory().createSupplier(); PurchaseOrder
+     * purchaseOrder = getModel1Factory().createPurchaseOrder(); supplier.getPurchaseOrders().add(purchaseOrder);
+     * resB.getContents().add(supplier); resA.getContents().add(purchaseOrder); CDOXATransaction transSet =
+     * CDOUtil.createXATransaction(); transSet.add(CDOUtil.getViewSet(resourceSet)); transactionA1.commit(); }
+     * clearCache(getRepository().getRevisionManager()); { ResourceSet resourceSet = new ResourceSetImpl(); CDOSession
+     * sessionA = openSession(); CDOTransaction transactionA = sessionA.openTransaction(resourceSet); CDOSession
+     * sessionB = openSession(REPOSITORY2_NAME); CDOTransaction transactionB = sessionB.openTransaction(resourceSet);
+     * CDOResource resA = transactionA.getResource("/resA"); assertNotNull(resA); CDOResource resB =
+     * transactionB.getResource("/resB"); assertNotNull(resB); Supplier supplierB = (Supplier)resB.getContents().get(0);
+     * PurchaseOrder pO = supplierB.getPurchaseOrders().get(0); assertEquals(transactionA,
+     * CDOUtil.getCDOObject(pO).cdoView()); assertEquals(transactionB, CDOUtil.getCDOObject(supplierB).cdoView());
+     * assertEquals(supplierB, pO.getSupplier()); assertEquals(supplierB.getPurchaseOrders().get(0), pO); }
+     */
+  }
+
+  public void testObjectNotAttached() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    msg("Opening transaction");
+    CDOTransaction transaction = session.openTransaction();
+
+    msg("Creating resource");
+    CDOResource resource1 = transaction.createResource("/test1");
+
+    msg("Adding company");
+    Supplier supplier = getModel1Factory().createSupplier();
+    PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+    supplier.getPurchaseOrders().add(purchaseOrder);
+
+    resource1.getContents().add(supplier);
+
+    try
+    {
+      msg("Committing");
+      transaction.commit();
+      fail("TransactionException expected");
+    }
+    catch (TransactionException success)
+    {
+      assertEquals(true, success.getCause() instanceof DanglingReferenceException);
+      assertSame(purchaseOrder, ((DanglingReferenceException)success.getCause()).getTarget());
+    }
+  }
+
+  public void testUsingObjectsBetweenSameTransaction() throws Exception
+  {
+    msg("Opening session");
+    CDOSession session = openSession();
+
+    msg("Opening transaction");
+    CDOTransaction transaction1 = session.openTransaction();
+    CDOTransaction transaction2 = session.openTransaction();
+
+    msg("Creating resource");
+    CDOResource resource1 = transaction1.createResource("/test1");
+    CDOResource resource2 = transaction2.createResource("/test2");
+
+    msg("Adding company");
+    Supplier supplier = getModel1Factory().createSupplier();
+    PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder();
+    supplier.getPurchaseOrders().add(purchaseOrder);
+
+    resource1.getContents().add(supplier);
+    resource2.getContents().add(purchaseOrder);
+
+    msg("Committing");
+    transaction1.commit();
+  }
+
+  private EPackage createDynamicEPackage()
+  {
+    final EcoreFactory efactory = EcoreFactory.eINSTANCE;
+    final EcorePackage epackage = EcorePackage.eINSTANCE;
+
+    EClass schoolBookEClass = efactory.createEClass();
+    schoolBookEClass.setName("SchoolBook");
+
+    // create a new attribute for this EClass
+    EAttribute level = efactory.createEAttribute();
+    level.setName("level");
+    level.setEType(epackage.getEInt());
+    schoolBookEClass.getEStructuralFeatures().add(level);
+
+    // Create a new EPackage and add the new EClasses
+    EPackage schoolPackage = efactory.createEPackage();
+    schoolPackage.setName("elv");
+    schoolPackage.setNsPrefix("elv");
+    schoolPackage.setNsURI("http:///www.elver.org/School");
+    schoolPackage.getEClassifiers().add(schoolBookEClass);
+    return schoolPackage;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.java
new file mode 100644
index 0000000..7359060
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/ObjyStoreQueryTest.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) 2010-2012 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Simon McDuff - initial API and implementation
+ *    Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.view.CDOQuery;
+
+import org.eclipse.emf.internal.cdo.query.CDOQueryResultIteratorImpl;
+
+import org.eclipse.net4j.util.collection.CloseableIterator;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Simon McDuff
+ */
+public class ObjyStoreQueryTest extends AbstractCDOTest
+{
+  public void testObjyStoreBasicQuery() throws Exception
+  {
+    // skipUnlessConfig(MEM);
+
+    Set<Object> objects = new HashSet<Object>();
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+
+    CDOResource resource1 = transaction.createResource("/test1");
+    objects.add(resource1);
+    Company company1 = getModel1Factory().createCompany();
+    Category category1 = getModel1Factory().createCategory();
+
+    resource1.getContents().add(company1);
+    company1.getCategories().add(category1);
+
+    objects.add(company1);
+    objects.add(category1);
+    objects.add(transaction.getRootResource());
+    company1.setName("TEST");
+
+    transaction.commit();
+
+    CDOQuery query = transaction.createQuery("TEST", "QUERYSTRING");
+    List<Object> result = query.getResult(Object.class);
+    assertEquals(4, result.size());
+    for (Object object : result)
+    {
+      assertEquals(true, objects.contains(object));
+    }
+
+    transaction.close();
+    session.close();
+  }
+
+  public void testObjyStoreBasicQuery_EClassParameter() throws Exception
+  {
+    // skipUnlessConfig(MEM);
+
+    Set<Object> objects = new HashSet<Object>();
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+
+    CDOResource resource1 = transaction.createResource("/test1");
+    objects.add(resource1);
+    Company company1 = getModel1Factory().createCompany();
+    Category category1 = getModel1Factory().createCategory();
+
+    resource1.getContents().add(company1);
+    company1.getCategories().add(category1);
+
+    objects.add(company1);
+    objects.add(category1);
+
+    company1.setName("TEST");
+
+    transaction.commit();
+    System.out.println(category1.eClass().getEPackage().getNsURI());
+
+    CDOQuery query = transaction.createQuery("TEST", "QUERYSTRING");
+    query.setParameter("context", getModel1Package().getCategory());
+
+    List<Category> result = query.getResult(Category.class);
+    assertEquals(1, result.size());
+    assertEquals(category1, result.get(0));
+
+    transaction.close();
+    session.close();
+  }
+
+  public void testObjyStoreQueryCancel_successful() throws Exception
+  {
+    // skipUnlessConfig(MEM);
+
+    CDOTransaction transaction = initialize(500);
+    CDOQuery query = transaction.createQuery("TEST", "QUERYSTRING");
+    query.setParameter("sleep", 1000L);
+    final CloseableIterator<Object> result = query.getResultAsync(Object.class);
+    result.close();
+
+    new PollingTimeOuter()
+    {
+      @Override
+      protected boolean successful()
+      {
+        return !getRepository().getQueryManager().isRunning(((CDOQueryResultIteratorImpl<?>)result).getQueryID());
+      }
+    }.assertNoTimeOut();
+
+    CDOSession session = transaction.getSession();
+    transaction.close();
+    session.close();
+  }
+
+  public void testObjyStoreQueryCancel_ViewClose() throws Exception
+  {
+    // skipUnlessConfig(MEM);
+
+    CDOTransaction transaction = initialize(500);
+    CDOQuery query = transaction.createQuery("TEST", "QUERYSTRING");
+    query.setParameter("sleep", 1000L);
+    final CloseableIterator<Object> result = query.getResultAsync(Object.class);
+    CDOSession session = transaction.getSession();
+    transaction.close();
+    new PollingTimeOuter()
+    {
+      @Override
+      protected boolean successful()
+      {
+        return !getRepository().getQueryManager().isRunning(((CDOQueryResultIteratorImpl<?>)result).getQueryID());
+      }
+    }.assertNoTimeOut();
+
+    session.close();
+  }
+
+  public void testObjyStoreQueryCancel_SessionClose() throws Exception
+  {
+    // skipUnlessConfig(MEM);
+
+    CDOTransaction transaction = initialize(500);
+    CDOQuery query = transaction.createQuery("TEST", "QUERYSTRING");
+    query.setParameter("sleep", 1000L);
+    final CloseableIterator<Object> result = query.getResultAsync(Object.class);
+    transaction.getSession().close();
+
+    new PollingTimeOuter()
+    {
+      @Override
+      protected boolean successful()
+      {
+        return !getRepository().getQueryManager().isRunning(((CDOQueryResultIteratorImpl<?>)result).getQueryID());
+      }
+    }.assertNoTimeOut();
+  }
+
+  public void testObjyStoreQueryAsync_UnsupportedLanguage() throws Exception
+  {
+    CDOTransaction transaction = initialize(100);
+    CDOQuery query = transaction.createQuery("TESTss", "QUERYSTRING");
+
+    try
+    {
+      CloseableIterator<Object> result = query.getResultAsync(Object.class);
+      result.hasNext();
+      fail("Should throw an exception");
+    }
+    catch (Exception expected)
+    {
+    }
+  }
+
+  public void testObjyStoreQuerySync_UnsupportedLanguage() throws Exception
+  {
+    CDOTransaction transaction = initialize(100);
+    CDOQuery query = transaction.createQuery("TESTss", "QUERYSTRING");
+
+    try
+    {
+      query.getResult(Object.class);
+      fail("Should throw an exception");
+    }
+    catch (Exception expected)
+    {
+    }
+  }
+
+  private CDOTransaction initialize(int number)
+  {
+    CDOSession session = openSession();
+    CDOTransaction transaction = session.openTransaction();
+    CDOResource resource1 = transaction.createResource("/test1");
+
+    for (int i = 0; i < number; i++)
+    {
+      Category category1 = getModel1Factory().createCategory();
+      resource1.getContents().add(category1);
+    }
+
+    try
+    {
+      transaction.commit();
+    }
+    catch (CommitException ex)
+    {
+      ex.printStackTrace();
+    }
+    return transaction;
+  }
+}
diff --git a/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.java b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.java
new file mode 100644
index 0000000..8cbb127
--- /dev/null
+++ b/org.eclipse.emf.cdo.tests.objectivity/src/org/eclipse/emf/cdo/tests/objectivity/SampleTestsObjy.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2010-2013, 2017 Eike Stepper (Loehne, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.objectivity;
+
+import org.eclipse.emf.cdo.tests.BranchingWithCacheClearTest;
+import org.eclipse.emf.cdo.tests.InitialTest;
+import org.eclipse.emf.cdo.tests.MergingTest;
+import org.eclipse.emf.cdo.tests.PartialCommitTest;
+import org.eclipse.emf.cdo.tests.RevisionDeltaCascadingBranchesTest;
+import org.eclipse.emf.cdo.tests.RevisionDeltaInBranchTest;
+import org.eclipse.emf.cdo.tests.UnsetTest;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test;
+import org.eclipse.emf.cdo.tests.config.IScenario;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
+
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Eike Stepper
+ */
+public class SampleTestsObjy extends ObjyDBConfigs
+{
+  public static Test suite()
+  {
+    return new SampleTestsObjy().getTestSuite();
+  }
+
+  @Override
+  protected void initConfigSuites(TestSuite parent)
+  {
+    addScenario(parent, new ObjyConfig(), JVM, NATIVE);
+  }
+
+  @Override
+  protected void initTestClasses(List<Class<? extends ConfigTest>> testClasses, IScenario scenario)
+  {
+    testClasses.clear();
+
+    // testClasses.add(ComplexTest.class);
+    testClasses.add(InitialTest.class);
+    testClasses.add(UnsetTest.class);
+    testClasses.add(BranchingWithCacheClearTest.class);
+    testClasses.add(MergingTest.class);
+    testClasses.add(PartialCommitTest.class);
+    testClasses.add(RevisionDeltaInBranchTest.class);
+    testClasses.add(RevisionDeltaCascadingBranchesTest.class);
+    // testClasses.add(ExternalReferenceTest.class);
+
+    // testClasses.add(FeatureMapTest.class);
+    // testClasses.add(ComplexTest.class);
+    // testClasses.add(AttributeTest.class);
+    // testClasses.add(UnsetTest.class); // keep
+    // testClasses.add(BranchingTest.class);
+    // testClasses.add(BranchingSameSessionTest.class);
+    // testClasses.add(MergingTest.class); // keep
+    // testClasses.add(PushTransactionTest.class);
+    // testClasses.add(CommitInfoTest.class); // keep (testLogThroughClient and some others fail).
+    // testClasses.add(AuditTest.class);
+    // testClasses.add(AuditSameSessionTest.class);
+    // testClasses.add(ResourceTest.class); // keep
+    // testClasses.add(InvalidationTest.class);
+    // testClasses.add(ChunkingTest.class);
+    // testClasses.add(ChunkingWithMEMTest.class);
+    // testClasses.add(DetachTest.class);
+    // testClasses.add(ExternalReferenceTest.class); // keep
+    // // testClasses.add(XATransactionTest.class);
+    // testClasses.add(RepositoryTest.class); // keep
+    // testClasses.add(LockingManagerTest.class); // keep
+    // testClasses.add(MultiValuedOfAttributeTest.class); // keep
+    // testClasses.add(Bugzilla_248124_Test.class); // keep
+    // testClasses.add(Bugzilla_258933_Test.class); // keep
+    // testClasses.add(Bugzilla_259869_Test.class); // analyse?!! (long and hang for XA).
+    // testClasses.add(Bugzilla_259949_Test.class);
+    // testClasses.add(Bugzilla_272861_Test.class);
+    // testClasses.add(Bugzilla_279982_Test.class);
+    // testClasses.add(Bugzilla_298561_Test.class);
+    // testClasses.add(Bugzilla_302233_Test.class);
+    // testClasses.add(Bugzilla_303807_Test.class);
+    // testClasses.add(Bugzilla_306998_Test.class);
+    // testClasses.add(Bugzilla_308895_Test.class);
+    // testClasses.add(Bugzilla_314264_Test.class);
+
+    // testClasses.add(LockingManagerTest.class);
+    // testClasses.add(MapTest.class);
+    // testClasses.add(FeatureMapTest.class);
+    // testClasses.add(AdapterManagerTest.class);
+    // testClasses.add(ConflictResolverTest.class);
+    // testClasses.add(DynamicXSDTest.class);
+    // testClasses.add(SetFeatureTest.class);
+    // testClasses.add(DynamicPackageTest.class);
+    // testClasses.add(LegacyTest.class);
+    // testClasses.add(Bugzilla_250757_Test.class);
+    // testClasses.add(Bugzilla_252909_Test.class);
+    // testClasses.add(Bugzilla_259949_Test.class);
+    testClasses.add(Bugzilla_261218_Test.class);
+  }
+}