diff --git a/pom.xml b/pom.xml
index cbb3d77cfa71d9da8aaf1576de6394382d70b795..090f23be568d707d0644fabe1c982634350843ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1393,7 +1393,7 @@
 		<dependency>
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-core</artifactId>
-			<version>3.3.2.GA</version>
+			<version>4.1.4.Final</version>
 			<exclusions>
 				<exclusion>
 					<groupId>org.slf4j</groupId>
@@ -1402,14 +1402,24 @@
 			</exclusions>
 		</dependency>
 		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-entitymanager</artifactId>
+			<version>4.1.4.Final</version>
+		</dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-ehcache</artifactId>
+			<version>4.1.4.Final</version>
+		</dependency>
+		<!-- <dependency>
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-jmx</artifactId>
 			<version>3.3.2.GA</version>
-		</dependency>
+		</dependency> -->
 		<dependency>
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-c3p0</artifactId>
-			<version>3.3.2.GA</version>
+			<version>4.1.1.Final</version>
 			<exclusions>
 				<!-- includes an old version of c3p0 -->
 				<exclusion>
@@ -1432,15 +1442,12 @@
 			<groupId>org.apache.velocity</groupId>
 			<artifactId>velocity</artifactId>
 			<version>1.6.4</version>
-		</dependency>
+		</dependency><!-- 
 		<dependency>
 			<groupId>net.sf.ehcache</groupId>
 			<artifactId>ehcache</artifactId>
 			<version>1.3.0</version>
-			<!-- Needed by axis2 -->
-			<!-- <exclusions> <exclusion> <groupId>backport-util-concurrent</groupId> 
-				<artifactId>backport-util-concurrent</artifactId> </exclusion> </exclusions> -->
-		</dependency>
+		</dependency> -->
 		<dependency>
 			<groupId>org.json</groupId>
 			<artifactId>json</artifactId>
diff --git a/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml b/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml
index 0283b9eb7dd98dad221f4cec7ba89307c1043b86..d72847b06fe79a0ba4567b4fe8f786499e5b16d8 100644
--- a/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml
+++ b/src/main/java/de/bps/olat/modules/cl/Checklist.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="de.bps.olat.modules.cl.Checklist" table="o_checklist">
 	
@@ -15,7 +15,7 @@
 			<column name="description" length="16777210" unique="false" not-null="false" />
     	</property>
 	  	
-		<bag name="checkpoints" table="o_checkpoint" lazy="false" cascade="all,delete-orphan">
+		<bag name="checkpoints" lazy="false" cascade="all,delete-orphan">
 	   	    <key column="checklist_fk" />
 	   	    <one-to-many class="de.bps.olat.modules.cl.Checkpoint" />
 		</bag>
diff --git a/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml b/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml
index dadc703104e13e93442ac60d8ce5e084fdb7487b..707c06d4763b0d9cbf2b5fcb3c8376448c33bb8e 100644
--- a/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml
+++ b/src/main/java/de/bps/olat/modules/cl/Checkpoint.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="de.bps.olat.modules.cl.Checkpoint" table="o_checkpoint">
 	
diff --git a/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml b/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml
index a09ad3ffd5224579e050554354fb0ebd72bf8bb3..c8f11303f3911507b1acdbfa764fc38ad69500d8 100644
--- a/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml
+++ b/src/main/java/de/bps/olat/modules/cl/CheckpointResult.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="de.bps.olat.modules.cl.CheckpointResult" table="o_checkpoint_results">
 	
diff --git a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml
index f63502f297fb40cac144e8f1fb9d3d5301ade94f..d82b1a094b924ced6ce56bdf7877a55b61476366 100644
--- a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
  <class name="org.olat.basesecurity.AuthenticationImpl" table="o_bs_authentication">
diff --git a/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml b/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml
index b9640f8506dad1871ee1103d2b74ea60dc18626d..7fcc94d0f587875dc217149b22580ebbacc77b76 100644
--- a/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/IdentityImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.basesecurity.IdentityImpl" table="o_bs_identity">
diff --git a/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml b/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml
index 3f210634677dab37bf50f1e7c98376c1565b6bcb..90aa24dfcc49963536be3335b177dec7fb0ec4f7 100644
--- a/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/InvitationImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml b/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml
index 217f23144fcb97a6db339a7bb1dfd79d4f5e489f..77efc20f09d0b7c36c7abe0be873a9f0721f1358 100644
--- a/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/NamedGroupImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
  <class name="org.olat.basesecurity.NamedGroupImpl" table="o_bs_namedgroup">
diff --git a/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml b/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml
index c195eed6d399bf03ed4b4301b9aeb7958d4aa0f2..55c2f4db35eaaaf5595fce10bf753d2a50fd5b8e 100644
--- a/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/PolicyImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
  <class name="org.olat.basesecurity.PolicyImpl" table="o_bs_policy">
diff --git a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml
index 55eb566b1685b52d23bcfc570e345c1c11994544..fb3f0f62647e4b63842451b14271b31fe33487da 100644
--- a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
  <class name="org.olat.basesecurity.SecurityGroupImpl" table="o_bs_secgroup">
diff --git a/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml b/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml
index 808f7f2b747d5e82d68cd22930acdc245a37af62..e3099279059bac39c1f795a2e807b827c1585030 100644
--- a/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml
+++ b/src/main/java/org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.basesecurity.SecurityGroupMembershipImpl" table="o_bs_membership">
diff --git a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml b/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
index d19c274dc898bca8dfaa5d22433351176dbb8517..94670c26fcdc219a184484125b3b0798afad475a 100644
--- a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
+++ b/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.bookmark.BookmarkImpl" table="o_bookmark">  
diff --git a/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml b/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml
index e1094ad19f017bdd67a169928fd470ee7a43784a..339de1044bc8d5d28ba5cd58935d468aaff0c33b 100644
--- a/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml
+++ b/src/main/java/org/olat/catalog/CatalogEntryImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml b/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml
index 4ae28165d5e515e618d71d0912e353540d056c32..d6f29756f17b5e69bcc3130ac901014599a9079c 100644
--- a/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml
+++ b/src/main/java/org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.commons.coordinate.cluster.lock.LockImpl" table="oc_lock">
   		
diff --git a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml
index 9b7afa7c080b4db3fee992efae098687f28d2051..9647d60616d6f2ad6fb443cc933d3f2a2214145a 100644
--- a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml
+++ b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.commons.info.model.InfoMessageImpl" table="o_info_message">
 		<cache usage="read-write" />
diff --git a/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml b/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml
index 1158639547e5f8a1cfe23f4b3156d64b10935210..6fc24da0158a301948604809041de495e8ef7d4b 100644
--- a/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml
+++ b/src/main/java/org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java b/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java
index b1a47238cd8d4a707b1d438a7c118cbe85775e57..c77928280b66491a5267c97946cc32ef286a480a 100644
--- a/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java
+++ b/src/main/java/org/olat/core/commons/persistence/AuditInterceptor.java
@@ -31,53 +31,33 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
 
-import org.hibernate.CallbackException;
 import org.hibernate.EmptyInterceptor;
-import org.hibernate.EntityMode;
-import org.hibernate.Interceptor;
 import org.hibernate.type.Type;
 import org.olat.core.id.CreateInfo;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 
 /**
  * @author Andreas Ch. Kapp
  *  
  */
-public class AuditInterceptor extends EmptyInterceptor implements Interceptor, Serializable {
+public class AuditInterceptor extends EmptyInterceptor {
+
+	private static final long serialVersionUID = 7210083323938075881L;
+	private final OLog log = Tracing.createLoggerFor(AuditInterceptor.class);
 
 	private int updates;
 	private int creates;
 
-    public Object instantiate(String arg0, EntityMode arg1, Serializable arg2) throws CallbackException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-	/**
-	 * @see org.hibernate.Interceptor#onDelete(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
-	 */
-	public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
-		// nothing to do here.
-	}
-
 	/**
 	 * @see org.hibernate.Interceptor#onFlushDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
 	 */
 	public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState,
 			String[] propertyNames, Type[] types) {
-		if (Tracing.isDebugEnabled(AuditInterceptor.class))
-			Tracing.logDebug("\nflush:" + entity + "\npre:"
+		if (log.isDebug())
+			log.debug("\nflush:" + entity + "\npre:"
 					+ (previousState == null ? "-" : Arrays.asList(previousState).toString()) + "\ncur:"
-					+ (currentState == null ? "-" : Arrays.asList(currentState).toString()), AuditInterceptor.class);
-		/*if (entity instanceof Auditable) {
-			updates++;
-			for (int i = 0; i < propertyNames.length; i++) {
-				if ("lastModified".equals(propertyNames[i])) {
-					currentState[i] = new Date();
-					return true;
-				}
-			}
-		}*/
+					+ (currentState == null ? "-" : Arrays.asList(currentState).toString()));
 		return false;
 	}
 
@@ -106,36 +86,23 @@ public class AuditInterceptor extends EmptyInterceptor implements Interceptor, S
 		return false;
 	}
 
-	/**
-	 * @see org.hibernate.Interceptor#findDirty(java.lang.Object, java.io.Serializable, java.lang.Object[], java.lang.Object[], java.lang.String[], org.hibernate.type.Type[])
-	 */
-	public int[] findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState,
-			String[] propertyNames, Type[] types) {
-		return null;
-	}
 
 	/**
 	 * @see org.hibernate.Interceptor#postFlush(java.util.Iterator)
 	 */
+	@SuppressWarnings("rawtypes")
 	public void postFlush(Iterator entities) {
-		if (Tracing.isDebugEnabled(AuditInterceptor.class)){
-			Tracing.logDebug("AuditInterceptor - Creations: " + creates + ", Updates: " + updates, AuditInterceptor.class);
+		if (log.isDebug()){
+			log.debug("AuditInterceptor - Creations: " + creates + ", Updates: " + updates);
 		}
 	}
 
 	/**
 	 * @see org.hibernate.Interceptor#preFlush(java.util.Iterator)
 	 */
+	@SuppressWarnings("rawtypes")
 	public void preFlush(Iterator entities) {
 		updates = 0;
 		creates = 0;
 	}
-
-	/**
-	 * @see org.hibernate.Interceptor#isUnsaved(java.lang.Object)
-	 */
-	public Boolean isUnsaved(Object entity) {
-		return null;
-	}
-
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/persistence/DB.java b/src/main/java/org/olat/core/commons/persistence/DB.java
index 1456a3fac1badc3529657f5ec76abf3d1baef86f..3e69bd5b28c91a8082df917a4314f058a6d0046f 100644
--- a/src/main/java/org/olat/core/commons/persistence/DB.java
+++ b/src/main/java/org/olat/core/commons/persistence/DB.java
@@ -28,7 +28,8 @@ package org.olat.core.commons.persistence;
 
 import java.util.List;
 
-import org.hibernate.Query;
+import javax.persistence.EntityManager;
+
 import org.hibernate.stat.Statistics;
 import org.hibernate.type.Type;
 import org.olat.core.id.Persistable;
@@ -127,7 +128,7 @@ public interface DB {
 	 * @param key
 	 * @return Object.
 	 */
-	public Object loadObject(Class theClass, Long key);
+	public Object loadObject(Class<?> theClass, Long key);
 
 	/**
 	 * Save an object.
@@ -215,6 +216,8 @@ public interface DB {
 	 * @return Return Hibernates statistics object.
 	 */
 	public Statistics getStatistics();
+	
+	public String getDbVendor();
 
 	/**
 	 * Call this to intermediate commit current changes.
@@ -243,5 +246,13 @@ public interface DB {
 	 * @return the query or NULL if no such named query exists
 	 */
 	public DBQuery createNamedQuery(final String queryName, boolean vendorSpecific);
+	
+	/**
+	 * 
+	 * Return the current entity manager to work with JPA2
+	 * 
+	 * @return
+	 */
+	public EntityManager getCurrentEntityManager();
 
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/persistence/DBImpl.java b/src/main/java/org/olat/core/commons/persistence/DBImpl.java
index f582cb718957b62b80111b7b2807ba2a1f751d3d..7e1b53ffea6a1ef0f164a87bc8cace92798ad6f4 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBImpl.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBImpl.java
@@ -26,7 +26,6 @@
 
 package org.olat.core.commons.persistence;
 
-import java.sql.Connection;
 import java.sql.Driver;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -43,10 +42,12 @@ import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
 
 import org.hibernate.HibernateException;
-import org.hibernate.Session;
 import org.hibernate.SessionFactory;
+import org.hibernate.ejb.HibernateEntityManagerFactory;
 import org.hibernate.jmx.StatisticsService;
 import org.hibernate.stat.Statistics;
 import org.hibernate.type.Type;
@@ -59,6 +60,8 @@ import org.olat.core.logging.DBRuntimeException;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.group.BusinessGroup;
+import org.olat.group.BusinessGroupImpl;
 import org.olat.testutils.codepoints.server.Codepoint;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.jmx.support.MBeanServerFactoryBean;
@@ -74,7 +77,7 @@ import org.springframework.jmx.support.MBeanServerFactoryBean;
 public class DBImpl extends LogDelegator implements DB, Destroyable {
 	private static final int MAX_DB_ACCESS_COUNT = 500;
 	private static DBImpl INSTANCE;
-	private SessionFactory sessionFactory = null;
+	private EntityManagerFactory emf = null;
 
 	private final ThreadLocal<ThreadLocalData> data = new ThreadLocal<ThreadLocalData>();
 	private OLog forcedLogger;
@@ -217,6 +220,14 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 		if (isLogDebugEnabled() && dbm == null) logDebug("DB manager ist null.", null); 
 		return (dbm == null) ? null : dbm.getDbSession();
 	}
+	
+	@Override
+	public EntityManager getCurrentEntityManager() {
+		DBImpl current = getInstance(true);
+		DBManager dbm = current.getData().getManager();
+		if (isLogDebugEnabled() && dbm == null) logDebug("DB manager ist null.", null); 
+		return (dbm == null) ? null : dbm.getDbSession().getEntityManager();
+	}
 
 	protected void setManager(DBManager manager) {
 		getData().setManager(manager);
@@ -246,25 +257,25 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 		DBSession dbs = getDBSession();
 		if (dbs == null) {
 			if (isLogDebugEnabled()) logDebug("createSession start...", null);
-			Session session = null;
+			EntityManager em = null;
 			Codepoint.codepoint(DBImpl.class, "initializeSession");
 			if (isLogDebugEnabled()) logDebug("initializeSession", null);
 			try {
-				session = sessionFactory.openSession();
+				em = emf.createEntityManager();
 			} catch (HibernateException e) {
 				logError("could not open database session!", e);
 			}
-			setManager(new DBManager(session));
+			setManager(new DBManager(em));
 			getData().resetAccessCounter();
 			getData().resetCommitCounter();
 		} else if (!dbs.isOpen()) {
-			Session session = null;
+			EntityManager em = null;
 			try {
-				session  = sessionFactory.openSession();
+				em = emf.createEntityManager();
 			} catch (HibernateException e) {
 				logError("could not open database session!", e);
 			}
-			setManager(new DBManager(session));
+			setManager(new DBManager(em));
 			getData().resetAccessCounter();
 			getData().resetCommitCounter();
 		}
@@ -550,6 +561,16 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 		beginTransaction(object);
 		getDBManager().updateObject(getTransaction(), object);
 	}
+	
+	public void updateObject(BusinessGroup object) {
+		beginTransaction(object);
+		getDBManager().updateObject(getTransaction(), object);
+	}
+	
+	public void updateObject(BusinessGroupImpl object) {
+		beginTransaction(object);
+		getDBManager().updateObject(getTransaction(), object);
+	}
 
 	/**
 	 * Get any errors from a previous DB call.
@@ -580,13 +601,6 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 		return null == getTransaction() ? false : getTransaction().isInTransaction();
 	}
 
-	/**
-	 * @return a JDBC java.sql.Connection.
-	 */
-	protected Connection getConnection() {
-		return getData().getManager().getConnection();
-	}
-
 	/**
 	 * see DB.loadObject(Persistable persistable, boolean forceReloadFromDB)
 	 * 
@@ -748,7 +762,10 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 	 * @return Return Hibernates statistics object.
 	 */
 	public Statistics getStatistics() {
- 		return sessionFactory.getStatistics();
+		if(emf instanceof HibernateEntityManagerFactory) {
+			return ((HibernateEntityManagerFactory)emf).getSessionFactory().getStatistics();
+		}
+ 		return null;
    }
 
 	/**
@@ -875,7 +892,11 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 	 * @param sessionFactory
 	 */
 	public void setSessionFactory(SessionFactory sessionFactory) {
-		this.sessionFactory = sessionFactory;
+		//this.sessionFactory = sessionFactory;
+	}
+	
+	public void setEntityManagerFactory(EntityManagerFactory emf) {
+		this.emf = emf;
 	}
 
 	@Override
@@ -896,12 +917,17 @@ public class DBImpl extends LogDelegator implements DB, Destroyable {
 	// fxdiff qti-statistics (praktikum MK)
 	// Extensions used for native SQL queries
 	//
-	String dbVendor = null;
+	private String dbVendor = null;
+	
+	@Override
+	public String getDbVendor() {
+		return dbVendor;
+	}
 	/**
 	 * [used by spring]
 	 * @param dbVendor
 	 */
-	public void setDbvendor(String dbVendor) {
+	public void setDbVendor(String dbVendor) {
 		this.dbVendor = dbVendor;
 	}
 
diff --git a/src/main/java/org/olat/core/commons/persistence/DBManager.java b/src/main/java/org/olat/core/commons/persistence/DBManager.java
index 98cd12b99d69e17ce510b8a494e77caac4370ca7..3c472c5790ae59aff60bf07a946422ac92d458af 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBManager.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBManager.java
@@ -26,16 +26,16 @@
 
 package org.olat.core.commons.persistence;
 
-import java.sql.Connection;
 import java.util.List;
 
+import javax.persistence.EntityManager;
+
 import org.hibernate.HibernateException;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.type.Type;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.DBRuntimeException;
-import org.olat.core.logging.Tracing;
 import org.olat.core.manager.BasicManager;
 
 /**
@@ -48,8 +48,8 @@ class DBManager extends BasicManager {
 	private boolean error;
 	private  DBSession dbSession = null;
 
-	DBManager(Session hibernateSession) {
-		setDbSession(new DBSession(hibernateSession));
+	DBManager(EntityManager em) {
+		setDbSession(new DBSession(em));
 	}
 	
 	/**
@@ -74,8 +74,8 @@ class DBManager extends BasicManager {
 		}
 		try {
 			getSession().update(o);
-			if (Tracing.isDebugEnabled(DBManager.class)) {
-				Tracing.logDebug("update (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class);	
+			if (isLogDebugEnabled()) {
+				logDebug("update (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString());	
 			}									
 		} catch (HibernateException e) { // we have some error
 			trx.setErrorAndRollback(e);
@@ -97,8 +97,8 @@ class DBManager extends BasicManager {
 		}
 		try {
 			getSession().delete(o);
-			if (Tracing.isDebugEnabled(DBManager.class)) {
-				Tracing.logDebug("delete (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class);	
+			if (isLogDebugEnabled()) {
+				logDebug("delete (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString());	
 			}
 		} catch (HibernateException e) { // we have some error
 			trx.setErrorAndRollback(e);
@@ -120,8 +120,8 @@ class DBManager extends BasicManager {
 		}
 		try {
 			hibernateSession.save(o);
-			if (Tracing.isDebugEnabled(DBManager.class)) {
-				Tracing.logDebug("save (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString(),DBManager.class);	
+			if (isLogDebugEnabled()) {
+				logDebug("save (trans "+trx.hashCode()+") class "+o.getClass().getName()+" = "+o.toString());	
 			}						
 
 		} catch (HibernateException e) { // we have some error
@@ -142,8 +142,8 @@ class DBManager extends BasicManager {
 		Object o = null;
 		try {
 			o = getSession().load(theClass, pK);
-			if (Tracing.isDebugEnabled(DBManager.class)) {
-				Tracing.logDebug("load (res " +(o == null? "null": "ok")+")(trans "+trx.hashCode()+") key "+pK+" class "+theClass.getName(),DBManager.class);	
+			if (isLogDebugEnabled()) {
+				logDebug("load (res " +(o == null? "null": "ok")+")(trans "+trx.hashCode()+") key "+pK+" class "+theClass.getName());	
 			}
 
 		} catch (HibernateException e) {
@@ -165,7 +165,7 @@ class DBManager extends BasicManager {
 	List find(DBTransaction trx, String query, Object value, Type type) {
 		List li = null;
 		try {
-			boolean doLog = Tracing.isDebugEnabled(DBManager.class);
+			boolean doLog = isLogDebugEnabled();
 			long start = 0;
 			if (doLog) start = System.currentTimeMillis();
 
@@ -198,7 +198,7 @@ class DBManager extends BasicManager {
 	List find(DBTransaction trx, String query, Object [] values, Type [] types) {
 		List li = null;
 		try {
-			boolean doLog = Tracing.isDebugEnabled(DBManager.class);
+			boolean doLog = isLogDebugEnabled();
 			long start = 0;
 			if (doLog) start = System.currentTimeMillis();
 			// old: li = getSession().find(query, values, types);
@@ -230,7 +230,7 @@ class DBManager extends BasicManager {
 	List find(DBTransaction trx, String query) {
 		List li = null;
 		try {
-			boolean doLog = Tracing.isDebugEnabled(DBManager.class);
+			boolean doLog = isLogDebugEnabled();
 			long start = 0;
 			if (doLog) start = System.currentTimeMillis();
 			// old: li = getSession().find(query);
@@ -353,16 +353,6 @@ class DBManager extends BasicManager {
 	boolean isError() {
 		return error;
 	}
-
-	Connection getConnection() {
-		try {
-			return getSession().connection();
-		} catch (HibernateException he) {
-			setError(he);
-			throw new DBRuntimeException("Error in getting sql.Connection.", he); 
-
-		} 
-	}
 	
 	int delete(String query, Object value, Type type) {
 		int deleted = 0;
@@ -379,7 +369,7 @@ class DBManager extends BasicManager {
 			////
 			getSession().flush();
 			
-			if (Tracing.isDebugEnabled(DBManager.class)) {
+			if (isLogDebugEnabled()) {
 				logQuery("delete", new Object[] {value}, new Type[] {type}, query);	
 			}						
 		} catch (HibernateException e) {
@@ -407,7 +397,7 @@ class DBManager extends BasicManager {
 				si.delete( foundToDel.get(i) );
 			}
 			
-			if (Tracing.isDebugEnabled(DBManager.class)) {
+			if (isLogDebugEnabled()) {
 				logQuery("delete (trans "+trx.hashCode()+")",new Object[] {value}, new Type[] {type}, query);	
 			}
 		} catch (HibernateException e) { // we have some error
@@ -434,7 +424,7 @@ class DBManager extends BasicManager {
 				si.delete( foundToDel.get(i) );
 			}
 			
-			if (Tracing.isDebugEnabled(DBManager.class)) {
+			if (isLogDebugEnabled()) {
 				logQuery("delete (trans "+trx.hashCode()+")", values, types, query);	
 			}			
 		} catch (HibernateException e) { // we have some error
@@ -470,8 +460,8 @@ class DBManager extends BasicManager {
 		//try {
 	    	//Object o = getSession().load(theClass, key);
 	    	Object o = getSession().get(theClass, key);
-	    	if (Tracing.isDebugEnabled(DBManager.class)) {
-				Tracing.logDebug("findload (res " +(o == null? "null": "ok")+") key "+key+" class "+theClass.getName(),DBManager.class);	
+	    	if (isLogDebugEnabled()) {
+				logDebug("findload (res " +(o == null? "null": "ok")+") key "+key+" class "+theClass.getName());	
 			}			
             return o;
         //} catch (HibernateException e) {
@@ -507,7 +497,7 @@ class DBManager extends BasicManager {
 			}
 		}
 		sb.append(", query: ").append(query);
-		Tracing.logDebug(sb.toString(),DBManager.class);
+		logDebug(sb.toString());
 	}
 	
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/persistence/DBQuery.java b/src/main/java/org/olat/core/commons/persistence/DBQuery.java
index 6dff358c9055e4389100715d0945ce503654fad7..f2aba72a968338d1a5934dbb725b0c63d19ddd79 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBQuery.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBQuery.java
@@ -33,6 +33,7 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 import org.hibernate.FlushMode;
 import org.hibernate.LockMode;
@@ -430,6 +431,8 @@ public interface DBQuery {
 	 * @see org.hibernate.Query
 	 */
 	public abstract DBQuery setProperties(Object bean);
+	
+	public DBQuery setProperties(Map map);
 
 	/**
 	 * @param position
diff --git a/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java b/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java
index c0e712c594ebed5787562edf6169dced3873c3ef..4c535f23008a7343856d3712c880653708a85d71 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBQueryImpl.java
@@ -600,6 +600,16 @@ public class DBQueryImpl implements DBQuery {
 		}
 		return this;
 	}
+	
+	public DBQuery setProperties(Map map) {
+		try {
+			query.setProperties(map);
+		}
+		catch (HibernateException e) {
+			throw new DBRuntimeException("DBQuery error. ", e);
+		}
+		return this;
+	}
 
 	/**
 	 * @see org.olat.core.commons.persistence.DBQuery#setSerializable(int, java.io.Serializable)
diff --git a/src/main/java/org/olat/core/commons/persistence/DBSession.java b/src/main/java/org/olat/core/commons/persistence/DBSession.java
index 516605e1ae0515f5e27c0970afc1a900dde42498..3e346944f03e2dd48f8db039a99e381f1fa7a4b2 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBSession.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBSession.java
@@ -26,9 +26,12 @@
 
 package org.olat.core.commons.persistence;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
-import org.hibernate.Transaction;
+import org.hibernate.ejb.HibernateEntityManager;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.DBRuntimeException;
 import org.olat.testutils.codepoints.server.Codepoint;
@@ -40,18 +43,18 @@ import org.olat.testutils.codepoints.server.Codepoint;
  * @author Felix Jost
  */
 class DBSession {
-	private Session hibernateSession;
+	private EntityManager em;
 	private DBTransaction trxWrapper = null;
 	
-	protected DBSession(Session hibernateSession) {
-		this.hibernateSession = hibernateSession;
+	protected DBSession(EntityManager em) {
+		this.em = em;
 	}
 	
 	/**
 	 * OLAT-3652: allow clearing of transaction - needed to avoid side-effects of subsequent session usage with error-in-transaction
 	 */
 	protected void clearTransaction() {
-		if ( (hibernateSession != null) && hibernateSession.isOpen()) {
+		if ( (em != null) && em.isOpen()) {
 			throw new DBRuntimeException("clearTransaction expected session to be closed at this point!");
 		}
 		trxWrapper = null;
@@ -60,7 +63,8 @@ class DBSession {
 	protected DBTransaction beginDbTransaction() {
 		if (trxWrapper == null || trxWrapper.isCommitted()) {
 			try {
-				Transaction trx = hibernateSession.beginTransaction();
+				EntityTransaction trx = em.getTransaction();
+				trx.begin();
 				trxWrapper = new DBTransaction(trx);
 				return trxWrapper;
 			} catch (HibernateException e) {
@@ -73,12 +77,16 @@ class DBSession {
 				);
 		}
 	}
+	
+	protected EntityManager getEntityManager() {
+		return em;
+	}
 
 	/**
 	 * @return Session
 	 */
 	protected Session getHibernateSession() {
-		return hibernateSession;
+		return em.unwrap(HibernateEntityManager.class).getSession();
 	}
 
 
@@ -87,13 +95,13 @@ class DBSession {
 	 */
 	protected void close() {
 		try {
-			if ( (hibernateSession != null) && hibernateSession.isOpen()) {
+			if ( (em != null) && em.isOpen()) {
 				Codepoint.codepoint(DBImpl.class, "closeSession");
 				if ( (getTransaction() != null) && getTransaction().isInTransaction()
 						&& !getTransaction().isRolledBack()) {
 					throw new AssertException("Try to close un-committed session");
 				}
-				hibernateSession.close();
+				em.close();
 			}
 		} catch (HibernateException e) {
 			throw new DBRuntimeException("Close Session error.", e);
@@ -101,8 +109,8 @@ class DBSession {
 			throw new DBRuntimeException("Error in dbsession.close: ", e);
 		} finally {
 			try {
-				if (hibernateSession != null) {
-					if (hibernateSession.isOpen())	hibernateSession.close();
+				if (em != null) {
+					if (em.isOpen())	em.close();
 				}
 			} catch (Exception e) {
 				// we did our best to close the hibernate session
@@ -112,7 +120,7 @@ class DBSession {
 	}
 
 	boolean contains(Object object) {
-		return this.hibernateSession.contains(object);
+		return this.em.contains(object);
 	}
 
 	/**
@@ -126,7 +134,7 @@ class DBSession {
 	 * @return true if session is open
 	 */
 	boolean isOpen() {
-		return hibernateSession.isOpen();
+		return em.isOpen();
 	}	
 	
 }
diff --git a/src/main/java/org/olat/core/commons/persistence/DBTransaction.java b/src/main/java/org/olat/core/commons/persistence/DBTransaction.java
index 14034b874e99b7b725c04181ab35faf43edb0de0..e6fe3ef8b6c1a7e2b93353a3a0be820eb146cd3a 100644
--- a/src/main/java/org/olat/core/commons/persistence/DBTransaction.java
+++ b/src/main/java/org/olat/core/commons/persistence/DBTransaction.java
@@ -27,9 +27,11 @@
 package org.olat.core.commons.persistence;
 
 
+import javax.persistence.EntityTransaction;
+
 import org.hibernate.HibernateException;
-import org.hibernate.Transaction;
 import org.olat.core.logging.DBRuntimeException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 
 /**
@@ -41,13 +43,15 @@ import org.olat.core.logging.Tracing;
  */
 final class DBTransaction  {
 	
-	private Transaction hibernateTransaction = null;
+	private final OLog log = Tracing.createLoggerFor(DBTransaction.class);
+	
+	private EntityTransaction hibernateTransaction = null;
 	private boolean rolledBack = false;
 	private boolean committed = false;
 	private Exception error = null;
 	private boolean inTransaction = false;
 
-	DBTransaction(Transaction t) {
+	DBTransaction(EntityTransaction t) {
 		this.hibernateTransaction = t;
 		setInTransaction(true);
 	}
@@ -55,10 +59,10 @@ final class DBTransaction  {
 	protected void commit() {
 		try {
 			if (hibernateTransaction.isActive()
-					&& !hibernateTransaction.wasCommitted()) {
+				/*	&& !hibernateTransaction.wasCommitted() */) {
 				hibernateTransaction.commit();
 			} else {
-				Tracing.logWarn("Could not call hibernateTransaction.commit() because is not Active or already committed",this.getClass());
+				log.warn("Could not call hibernateTransaction.commit() because is not Active or already committed");
 			}
 			setInTransaction(false);
 			this.committed = true;
@@ -74,11 +78,11 @@ final class DBTransaction  {
 	protected void rollback() {
 		try {
 			if (hibernateTransaction.isActive()
-					&& !hibernateTransaction.wasRolledBack()) {
+				/*	&& !hibernateTransaction.wasRolledBack() */) {
 				hibernateTransaction.rollback();
 			}else {
 				// OLAT-3621: raising log level from WARN to ERROR to have this pop up in tests more. plus added a stacktrace for debugging ease.
-				Tracing.logError("Could not call hibernateTransaction.rollback() because is not Active or already rolledback", new Exception("DBTransaction.rollback()"), this.getClass());
+				log.error("Could not call hibernateTransaction.rollback() because is not Active or already rolledback", new Exception("DBTransaction.rollback()"));
 			}
 			this.rolledBack = true;
 		} catch (HibernateException e) {
@@ -120,7 +124,7 @@ final class DBTransaction  {
 	 */
 	protected void setErrorAndRollback(Exception exception) {
 		error = exception;
-		Tracing.logDebug("Hibernate Error, rolling back", error.toString(), DBTransaction.class);
+		log.debug("Hibernate Error, rolling back", error.toString());
 		rollback();
 	}
 
diff --git a/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java b/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java
deleted file mode 100644
index 00289b65b80ca48be95f588a758a4e793cdf57f2..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/core/commons/persistence/OLATLocalSessionFactoryBean.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-
-package org.olat.core.commons.persistence;
-
-import java.util.List;
-
-import org.hibernate.HibernateException;
-import org.hibernate.cfg.Configuration;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
-
-/**
- * 
- * Description:<br>
- * Extends the Spring LocalSessionFactoryBean to allow additional mappings
- * for Hibernate. The additional mappings are defined in beans of the 
- * org.olat.core.commons.persistence.AdditionalDBMappings. These beans must be
- * <strong>singleton</strong> and not use lazy-init.
- * <P>
- * 	&lt;bean id="markingMapping" class="org.olat.core.commons.persistence.AdditionalDBMappings"&gt;
- *		&lt;property name="xmlFiles"&gt;
- *			&lt;list&gt;
- *				&lt;value&gt;org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml&lt;/value&gt;
- *			&lt;/list&gt;
- *		&lt;/property&gt;
- *	&lt;/bean&gt;
- * 
- * <P>
- * Initial Date:  23 jul. 2010 <br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class OLATLocalSessionFactoryBean extends LocalSessionFactoryBean {
-	
-	private OLog log = Tracing.createLoggerFor(OLATLocalSessionFactoryBean.class);
-	
-	private AdditionalDBMappings[] additionalDBMappings;
-
-	public void setAdditionalDBMappings(AdditionalDBMappings[] additionalDBMappings) {
-		this.additionalDBMappings = additionalDBMappings;
-	}
-
-	@Override
-	protected void postProcessMappings(Configuration config) throws HibernateException {
-		try {
-			if(additionalDBMappings != null && additionalDBMappings.length > 0) {
-				for(AdditionalDBMappings addMapping:additionalDBMappings) {
-					List<String> xmlFiles = addMapping.getXmlFiles();
-					if(xmlFiles != null) {
-						for (String mapping : xmlFiles) {
-							//we cannot access the classloader magic used by the LocalSessionFactoryBean
-							Resource resource = new ClassPathResource(mapping.trim());
-							config.addInputStream(resource.getInputStream());
-						}
-					}
-					
-					List<Class<?>> annotatedClasses = addMapping.getAnnotatedClasses();
-					if(annotatedClasses != null) {
-						for(Class<?> annotatedClass:annotatedClasses) {
-							config.addClass(annotatedClass);
-						}
-					}
-				}
-			}
-			super.postProcessMappings(config);
-		} catch (Exception e) {
-			log.error("Error during the post processing of the hibernate session factory.", e);
-		}
-	}
-}
diff --git a/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java b/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3b3dbc30a9990a3b6eeb9defd9dd26a52d7274f
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/persistence/OLATPersistenceUnitManager.java
@@ -0,0 +1,51 @@
+package org.olat.core.commons.persistence;
+
+import java.util.List;
+
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
+import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
+
+/**
+ * 
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class OLATPersistenceUnitManager extends DefaultPersistenceUnitManager {
+
+	private OLog log = Tracing.createLoggerFor(OLATPersistenceUnitManager.class);
+	
+	private AdditionalDBMappings[] additionalDBMappings;
+
+	public void setAdditionalDBMappings(AdditionalDBMappings[] additionalDBMappings) {
+		this.additionalDBMappings = additionalDBMappings;
+	}
+
+	@Override
+	protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
+		try {
+			if(additionalDBMappings != null && additionalDBMappings.length > 0) {
+				for(AdditionalDBMappings addMapping:additionalDBMappings) {
+					List<String> xmlFiles = addMapping.getXmlFiles();
+					if(xmlFiles != null) {
+						for (String mapping : xmlFiles) {
+							pui.addMappingFileName(mapping.trim());
+						}
+					}
+					
+					List<Class<?>> annotatedClasses = addMapping.getAnnotatedClasses();
+					if(annotatedClasses != null) {
+						for(Class<?> annotatedClass:annotatedClasses) {
+							pui.addManagedClassName(annotatedClass.getName());
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			log.error("Error during the post processing of the hibernate session factory.", e);
+		}
+		
+		super.postProcessPersistenceUnitInfo(pui);
+	}
+
+}
diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf2eabbab45bcdeda671b9087f2fe299631d57c2
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/persistence/_spring/core_persistence.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.0"
+   xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="
+        http://java.sun.com/xml/ns/persistence
+        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+	<persistence-unit name="default">
+		<provider>org.hibernate.ejb.HibernatePersistence</provider>
+
+		<mapping-file>de/bps/olat/modules/cl/Checklist.hbm.xml</mapping-file>
+		<mapping-file>de/bps/olat/modules/cl/CheckpointResult.hbm.xml</mapping-file>
+		<mapping-file>de/bps/olat/modules/cl/Checkpoint.hbm.xml</mapping-file>
+		<mapping-file>org/olat/ims/qti/QTIResult.hbm.xml</mapping-file>
+		<mapping-file>org/olat/ims/qti/QTIResultSet.hbm.xml</mapping-file>
+		<mapping-file>org/olat/note/NoteImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/user/UserImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml</mapping-file>
+		<mapping-file>org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/commons/info/model/InfoMessageImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/area/BGAreaImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/area/BGtoAreaRelationImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/context/BGContextImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/context/BGContext2Resource.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/BusinessGroupImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/group/model/BGResourceRelation.hbm.xml</mapping-file>
+		<mapping-file>org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/resource/references/ReferenceImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/resource/OLATResourceImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/AuthenticationImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/PolicyImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/InvitationImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/IdentityImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/NamedGroupImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/SecurityGroupImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/repository/RepositoryEntry.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/modules/fo/ForumImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/modules/fo/MessageImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/modules/fo/ReadMessage.hbm.xml</mapping-file>
+		<mapping-file>org/olat/properties/Property.hbm.xml</mapping-file>
+		<mapping-file>org/olat/catalog/CatalogEntryImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/bookmark/BookmarkImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/notifications/PublisherImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/notifications/SubscriberImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/registration/TemporaryKeyImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/daily/DailyStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/dayofweek/DayOfWeekStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/weekly/WeeklyStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml</mapping-file>
+		<mapping-file>org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml</mapping-file>
+		<mapping-file>org/olat/core/logging/activity/LoggingObject.hbm.xml</mapping-file>
+
+		<properties>
+			<property name="hibernate.archive.autodetection" value=""/>
+			<property name="hibernate.ejb.interceptor" value="org.olat.core.commons.persistence.AuditInterceptor"/>
+		</properties>
+	</persistence-unit>
+</persistence>
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml
index 7653c49a47f9552fbe7518c90fda4f533ad9f3d2..b3b26e794a17fc1f7ce5b695fc7b1ae69e6bf952 100644
--- a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml
+++ b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml
@@ -7,202 +7,134 @@
 
 		
 	<bean id="collectingAdditionalDBMappings" class="org.olat.core.commons.persistence.AdditionalMappingsListFactoryBean"/>
-
-	<!-- Hibernate SessionFactory -->
-    <!-- taken from: http://www.shoesobjects.com/blog/2004/11/21/1101083542880.html -->
-    <bean id="sessionFactory" class="org.olat.core.commons.persistence.OLATLocalSessionFactoryBean"
-    	depends-on="databaseUpgrader">
-        <!-- Setting datasource let Spring using the LocalDataSourceConnectionProvider. Some JUnit Tests fail if not the hibernate C3P0ConnectionProvider is used.
-        Not using the dataSource property in the sessionFactory means setting the connection in the hibernateProperties.
-        DataSources are still defined for the Upgrader and the Statistics feature.
-        <property name="dataSource" ref="${db.vendor}DataSource" /> -->
-        <property name="additionalDBMappings" ref="collectingAdditionalDBMappings"/>
-        <property name="mappingResources">
-					<list>
-            	<!-- OLAT tables -->
-               	<value>de/bps/olat/modules/cl/Checklist.hbm.xml</value>
-				<value>de/bps/olat/modules/cl/CheckpointResult.hbm.xml</value>
-				<value>de/bps/olat/modules/cl/Checkpoint.hbm.xml</value>
-				<value>org/olat/ims/qti/QTIResult.hbm.xml</value>
-				<value>org/olat/ims/qti/QTIResultSet.hbm.xml</value>
-				<value>org/olat/note/NoteImpl.hbm.xml</value>
-				<value>org/olat/user/UserImpl.hbm.xml</value>
-				<value>org/olat/commons/lifecycle/LifeCycleEntry.hbm.xml</value>
-				<value>org/olat/commons/coordinate/cluster/lock/LockImpl.hbm.xml</value>
-				<value>org/olat/commons/info/model/InfoMessageImpl.hbm.xml</value>
-				<value>org/olat/group/area/BGAreaImpl.hbm.xml</value>
-				<value>org/olat/group/area/BGtoAreaRelationImpl.hbm.xml</value>
-				<value>org/olat/group/context/BGContextImpl.hbm.xml</value>
-				<value>org/olat/group/context/BGContext2Resource.hbm.xml</value>
-				<value>org/olat/group/BusinessGroupImpl.hbm.xml</value>
-				<value>org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml</value>
-				<value>org/olat/resource/references/ReferenceImpl.hbm.xml</value>
-				<value>org/olat/resource/OLATResourceImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/AuthenticationImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/PolicyImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/InvitationImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/IdentityImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/NamedGroupImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/SecurityGroupImpl.hbm.xml</value>
-				<value>org/olat/basesecurity/SecurityGroupMembershipImpl.hbm.xml</value>
-				<value>org/olat/repository/RepositoryEntry.hbm.xml</value>
-				<value>org/olat/repository/MetaDataElement.hbm.xml</value>
-				<value>org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml</value>
-				<value>org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml</value>
-				<value>org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml</value>
-				<value>org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml</value>
-				<value>org/olat/modules/fo/ForumImpl.hbm.xml</value>
-				<value>org/olat/modules/fo/MessageImpl.hbm.xml</value>
-				<value>org/olat/modules/fo/ReadMessage.hbm.xml</value>
-				<value>org/olat/properties/Property.hbm.xml</value>
-				<value>org/olat/catalog/CatalogEntryImpl.hbm.xml</value>
-				<value>org/olat/bookmark/BookmarkImpl.hbm.xml</value>
-				<value>org/olat/notifications/PublisherImpl.hbm.xml</value>
-				<value>org/olat/notifications/SubscriberImpl.hbm.xml</value>
-				<value>org/olat/registration/TemporaryKeyImpl.hbm.xml</value>
-				<value>org/olat/course/statistic/daily/DailyStat.hbm.xml</value>
-				<value>org/olat/course/statistic/dayofweek/DayOfWeekStat.hbm.xml</value>
-				<value>org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml</value>
-				<value>org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml</value>
-				<value>org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml</value>
-				<value>org/olat/course/statistic/weekly/WeeklyStat.hbm.xml</value>
-				<value>org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml</value>
-				<value>org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml</value>
-				
-				<!-- why is this one not found? -->
-				<!-- <value>test/java/org/olat/core/commons/persistence/TestTable.hbm.xml</value> -->
-				
-				<!-- core tables -->
-				<value>org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml</value>
-				<value>org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml</value>
-				<value>org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml</value>
-				<value>org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml</value>
-				<value>org/olat/core/logging/activity/LoggingObject.hbm.xml</value>
-            </list>
-        </property>
-        <!-- DB Connection is defined in mysqlHibernateProperties, postgresqlHibernateProperites, etc. and the other hibernate properties in the bean "commonHibernateProperties" -->
-        <property name="hibernateProperties" ref="${db.vendor}HibernateProperties" />
-        <property name="entityInterceptor" ref="AuditInterceptor" />
-    </bean>
-    
+	
+	<!-- Persistence unit manager -->
+	<bean id="pum" class="org.olat.core.commons.persistence.OLATPersistenceUnitManager">
+		<property name="additionalDBMappings" ref="collectingAdditionalDBMappings" />
+  		<property name="persistenceXmlLocations">
+    		<list>
+     			<value>classpath:/org/olat/core/commons/persistence/_spring/core_persistence.xml</value>
+			</list>
+  		</property>
+		<property name="defaultDataSource" ref="${db.vendor}PooledDataSource"/>
+	</bean>
+	
+	<!-- EntityManagerFactory -->
+	<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+		<property name="persistenceUnitManager" ref="pum"/>
+		<property name="jpaProperties" ref="${db.vendor}HibernateProperties"/>
+	</bean>
+	
     <bean id="AuditInterceptor" class="org.olat.core.commons.persistence.AuditInterceptor" />
 
+	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+		<property name="dataSource" ref="${db.vendor}PooledDataSource"/>
+	</bean>
 
-<bean id="database" class="org.olat.core.commons.persistence.DBImpl" destroy-method="destroy">
-	<property name="sessionFactory" ref="sessionFactory"/>
-	<property name="dbvendor" value="${db.vendor}" />
-</bean>
-
-<bean id="persistenceHelper" class="org.olat.core.commons.persistence.PersistenceHelper">
-	<constructor-arg>
-		<props>
-			<prop key="dbvendor">${db.vendor}</prop>
-	        <prop key="mysqloptions">${db.url.options.mysql}</prop>
-	    </props>
-	</constructor-arg>
-</bean>
-
-<bean id="mysqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
-	<constructor-arg>
-		<props>
-		     <!-- Using datasource of hibernate -->
-			<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
-	        <prop key="hibernate.connection.url">jdbc:mysql://${db.host}:${db.host.port}/${db.name}${db.url.options.mysql}</prop>
-	        <prop key="hibernate.connection.username">${db.user}</prop>
-	        <prop key="hibernate.connection.password">${db.pass}</prop>
-	        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
-        </props>            
-	</constructor-arg>
-	<property name="addMoreProperties" ref="c3p0HibernateProperties" />
-</bean>
+	<bean id="database" class="org.olat.core.commons.persistence.DBImpl" destroy-method="destroy">
+		<property name="entityManagerFactory" ref="emf"/>
+		<property name="dbVendor" value="${db.vendor}" />
+	</bean>
 
-<bean id="postgresqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
-	<constructor-arg>
-		<props>
-		     <!-- Using datasource of hibernate -->
-			<prop key="hibernate.connection.driver_class">org.postgresql.Driver</prop>
-	        <prop key="hibernate.connection.url">jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</prop>
-	        <prop key="hibernate.connection.username">${db.user}</prop>
-	        <prop key="hibernate.connection.password">${db.pass}</prop>
-	        <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
-        </props>            
-	</constructor-arg>
-	<property name="addMoreProperties" ref="c3p0HibernateProperties" />
-</bean>
+	<bean id="persistenceHelper" class="org.olat.core.commons.persistence.PersistenceHelper">
+		<constructor-arg>
+			<props>
+				<prop key="dbvendor">${db.vendor}</prop>
+		        <prop key="mysqloptions">${db.url.options.mysql}</prop>
+		    </props>
+		</constructor-arg>
+	</bean>
 
-<bean id="c3p0HibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
-	<constructor-arg>
-		<props>
-            <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
-            <!-- Min pool size -->
-            <prop key="hibernate.c3p0.min_size">${db.hibernate.c3p0.minsize}</prop>
-            <!-- Max pool size , mysql-default value is 100, If you need to support more connections, you should set a larger value for this variable in mysql config -->
-            <prop key="hibernate.c3p0.max_size">${db.hibernate.c3p0.maxsize}</prop>
-            <!-- Connection timeout in sec -->
-            <prop key="hibernate.c3p0.timeout">1800</prop>
-            <!-- Size of prepared statements -->
-            <prop key="hibernate.c3p0.max_statements">10000</prop>
-            <!-- Commit on connection close --> 
-            <prop key="hibernate.c3p0.autoCommitOnClose">false</prop>
-            <!-- Number of connection acquired when pool is exhausted -->
-            <prop key="hibernate.c3p0.acquire_increment">2</prop>
-             <!-- Idle time (in sec) before pooled connection is validated -->
-             <prop key="hibernate.c3p0.idle_test_period">500</prop>
+	<bean id="mysqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
+		<constructor-arg>
+			<props>
+		        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
+	        </props>            
+		</constructor-arg>
+		<property name="addMoreProperties" ref="hibernateProps" />
+	</bean>
 
-            <!--  OLAT-5528: under heavy load situations threads have been seen to deadlock on acquire/release of a connection.
-                             increasing number of helper threads from 3 to 10 plus limiting the max time for administrative tasks to 2min
-                             is expected to allow these situations to resolve themselves -->
-            <!-- Number of c3p0 helper threads - default is 3 --> 
-            <prop key="hibernate.c3p0.numHelperThreads">10</prop>
-            <!-- Maximum time spent by c3p0 for administrative tasks in seconds - default infinity=0 --> 
-            <prop key="hibernate.c3p0.maxAdministrativeTaskTime">120</prop>
-        </props>
-	</constructor-arg>
-	<property name="addMoreProperties" ref="commonHibernateProperties" />
-</bean>
+	<bean id="postgresqlHibernateProperties" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
+		<constructor-arg>
+			<props>
+		        <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
+	        </props>            
+		</constructor-arg>
+		<property name="addMoreProperties" ref="hibernateProps" />
+	</bean>
 
-<bean id="commonHibernateProperties" class="java.util.HashMap">
-	<constructor-arg>
-        <map>  
-            <!-- "validate, update, create, create-drop"  are valid entries for  hibernate.hbm2ddl.auto-->
-            <entry key="hibernate.hbm2ddl.auto"><value>${db.hibernate.ddl.auto}</value></entry>
-            <entry key="hibernate.show_sql"><value>${db.show_sql}</value></entry>
-            <entry key="hibernate.query.factory_class"><value>org.hibernate.hql.ast.ASTQueryTranslatorFactory</value></entry>
-            <!-- <entry key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</value></entry> -->
-            <entry key="hibernate.query.substitutions"><value>true 1, false 0, yes 'Y', no 'N'</value></entry>           
-            <!-- for development phase only: -->
-            <entry key="hibernate.c3p0.debugUnreturnedConnectionStackTraces"><value>true</value></entry>
-            <entry key="hibernate.c3p0.unreturnedConnectionTimeout"><value>${hibernate.connection.timeout}</value></entry>
-            <!-- end for development phase only -->
+	<bean id="hibernateProps" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification">
+		<constructor-arg>
+	        <props>  
+	            <!-- "validate, update, create, create-drop"  are valid entries for  hibernate.hbm2ddl.auto-->
+	            <prop key="hibernate.hbm2ddl.auto">${db.hibernate.ddl.auto}</prop>
+	            <prop key="hibernate.show_sql">${db.show_sql}</prop>
+	            <!-- <entry key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</value></entry> -->
+	            <prop key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</prop>         
+	            <!-- for development phase only: -->
+	            <!-- end for development phase only -->
+	
+				<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
+				<prop key="hibernate.jdbc.batch_size">0</prop>
+				<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
+				<prop key="hibernate.use_outer_join">true</prop>
+				<prop key="hibernate.max_fetch_depth">10</prop>
+	            <prop key="hibernate.cache.provider_class">${hibernate.caching.singlevm.class}</prop>
+				<prop key="hibernate.cache.use_query_cache">${hibernate.caching.use.query.cache}</prop>
+				<prop key="hibernate.cache.use_second_level_cache">${hibernate.use.second.level.cache}</prop>
+				<prop key="hibernate.cache.region.factory_class">${hibernate.caching.cluster.class}</prop>
+				<prop key="hibernate.cache.region.jbc2.query.localonly">true</prop>
+				<prop key="hibernate.cache.region_prefix">olat</prop>
+				<!-- from java.sql.Connection
+					int TRANSACTION_READ_UNCOMMITTED = 1;
+					int TRANSACTION_READ_COMMITTED   = 2;
+					int TRANSACTION_REPEATABLE_READ  = 4;
+					int TRANSACTION_SERIALIZABLE     = 8;
+					olat works only with level 2; the database must support level 2
+				-->
+				<prop key="hibernate.connection.isolation">2</prop>
+				<prop key="javax.persistence.lock.timeout">30000</prop>
+	        </props>
+		</constructor-arg>        
+	</bean>
 
-             <entry key="hibernate.transaction.factory_class"><value>org.hibernate.transaction.JDBCTransactionFactory</value></entry>
-             <entry key="hibernate.jdbc.batch_size"><value>0</value></entry>
-             <entry key="hibernate.jdbc.use_streams_for_binary"><value>true</value></entry>
-             <entry key="hibernate.use_outer_join"><value>true</value></entry>
-             <entry key="hibernate.max_fetch_depth"><value>10</value></entry>
-             <!-- TODO: may update to version 2.x of ehcache which only has the  region.factory_class property-->
-            <!-- <entry key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</value></entry> -->
-			<entry key="hibernate.cache.provider_class"><value>${hibernate.caching.singlevm.class}</value></entry>
-			<entry key="hibernate.cache.use_query_cache"><value>${hibernate.caching.use.query.cache}</value></entry>
-			<entry key="hibernate.cache.use_second_level_cache"><value>${hibernate.use.second.level.cache}</value></entry> <!-- TODO: ask christian, does this need to be false on SV mode? -->
-			<!-- <entry key="hibernate.cache.region.factory_class">org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory</value></entry> -->
-			<entry key="hibernate.cache.region.factory_class"><value>${hibernate.caching.cluster.class}</value></entry>
-			
-			<entry key="hibernate.cache.region.jbc2.query.localonly"><value>true</value></entry>
-			<entry key="hibernate.cache.region_prefix"><value>olat</value></entry>
-			<!-- to disable caching use this class -->
-			<!-- <hibernate.cache.region.factory_class>org.hibernate.cache.NoCacheProvider</hibernate.cache.region.factory_class> -->
-			<!-- from java.sql.Connection
-				int TRANSACTION_READ_UNCOMMITTED = 1;
-				int TRANSACTION_READ_COMMITTED   = 2;
-				int TRANSACTION_REPEATABLE_READ  = 4;
-				int TRANSACTION_SERIALIZABLE     = 8;
-				olat works only with level 2; the database must support level 2
-			-->
-			<entry key="hibernate.connection.isolation"><value>2</value></entry>
-        </map>
-	</constructor-arg>        
-</bean>
+	<!-- c3p0 pooled JDBC connection -->
+	<bean id="mysqlPooledDataSource"
+		class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close">
+    	<!--  connection settings -->
+    	<property name="driverClass"><value>com.mysql.jdbc.Driver</value></property>
+		<property name="jdbcUrl"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&amp;characterEncoding=UTF-8</value></property>
+		<property name="user" value="${db.user}" />
+		<property name="password" value="${db.pass}" />
+		<property name="minPoolSize" value="${db.hibernate.c3p0.minsize}" />
+		<property name="maxPoolSize" value="${db.hibernate.c3p0.maxsize}" />
+		<property name="maxIdleTime" value="1800" />
+		<property name="maxStatements" value="10000" />
+		<property name="autoCommitOnClose" value="false" />
+		<property name="acquireIncrement" value="2" />
+		<property name="idleConnectionTestPeriod" value="500" />
+		<!-- property name="hibernate.c3p0.numHelperThreads" value="10" -->
+		<property name="maxAdministrativeTaskTime" value="120" />
+	</bean>
+	
+	<!-- c3p0 pooled JDBC connection -->
+	<bean id="postgresqlPooledDataSource"
+		class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close">
+    	<!--  connection settings -->
+    	<property name="driverClass"><value>org.postgresql.Driver</value></property>
+		<property name="jdbcUrl"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property>
+		<property name="user" value="${db.user}" />
+		<property name="password" value="${db.pass}" />
+		<property name="minPoolSize" value="${db.hibernate.c3p0.minsize}" />
+		<property name="maxPoolSize" value="${db.hibernate.c3p0.maxsize}" />
+		<property name="maxIdleTime" value="1800" />
+		<property name="maxStatements" value="10000" />
+		<property name="autoCommitOnClose" value="false" />
+		<property name="acquireIncrement" value="2" />
+		<property name="idleConnectionTestPeriod" value="500" />
+		<!-- property name="hibernate.c3p0.numHelperThreads" value="10" -->
+		<property name="maxAdministrativeTaskTime" value="120" />
+	</bean>
 
 	<!-- The following dataresources are referenced from the statisticContext.xml and upgradeContext.xml, but are not used in the SessionFactory!
 		 The SessionFactory's DB Connection is configured with the bean "${db.vendor}HibernateProperties".-->
@@ -210,18 +142,18 @@
 	<!-- The mysql datasource checks upon startup whether the tables are of type InnoDB, if not it will not start. If you have an other type of transactional tables just switch back the spring config
 	to the normal  org.springframework.jdbc.datasource.DriverManagerDataSource and the check is gone.-->                  
 	<bean id="mysqlDataSource" class="org.olat.core.commons.persistence.InnoDBAwareDriverManagerDataSource" lazy-init="true" init-method="init">
-	        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
-	        <property name="url"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&amp;characterEncoding=UTF-8</value></property>
-	        <property name="username" value="${db.user}" />
-	        <property name="password" value="${db.pass}" />
-	        <property name="dbVendor" value="${db.vendor}" />
+		<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
+		<property name="url"><value>jdbc:mysql://${db.host}:${db.host.port}/${db.name}?useUnicode=true&amp;characterEncoding=UTF-8</value></property>
+		<property name="username" value="${db.user}" />
+		<property name="password" value="${db.pass}" />
+		<property name="dbVendor" value="${db.vendor}" />
 	</bean>
 
 	<bean id="postgresqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="true">
-	        <property name="driverClassName"><value>org.postgresql.Driver</value></property>
-	        <property name="url"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property>
-	        <property name="username" value="${db.user}" />
-	        <property name="password" value="${db.pass}" />
+		<property name="driverClassName"><value>org.postgresql.Driver</value></property>
+		<property name="url"><value>jdbc:postgresql://${db.host}:${db.host.port}/${db.name}</value></property>
+		<property name="username" value="${db.user}" />
+		<property name="password" value="${db.pass}" />
 	</bean>
 	
 </beans>
diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml
index fe8ceaf27f34677baf806b3cb624774b7e0e7926..09a2ca0dfb435dfe5e099b6e669a3b28e6f4d18c 100644
--- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml
+++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserCommentImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.core.commons.services.commentAndRating.impl.UserCommentImpl" table="o_usercomment">
   		
diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml
index 1a5002ace1db996cce52a1c1ecbd5b9c489f2f6e..4373b40ee83783cf86ff210f0d196f8c2ff389f3 100644
--- a/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml
+++ b/src/main/java/org/olat/core/commons/services/commentAndRating/impl/UserRatingImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.core.commons.services.commentAndRating.impl.UserRatingImpl" table="o_userrating">
   		
diff --git a/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml
index b7892e67cba3610a3397b090ce6e279e8a5e3ffb..89830f06f48f553bd606f5f8be9e694a53f25d14 100644
--- a/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml
+++ b/src/main/java/org/olat/core/commons/services/mark/impl/MarkImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.core.commons.services.mark.impl.MarkImpl" table="o_mark">
 		<cache usage="read-write" />
diff --git a/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml b/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml
index 7cc29501dd7e38888546cd27d596e36650d1b698..3e17aef314f23c1ead9e500488ae27601fa9cf7f 100644
--- a/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml
+++ b/src/main/java/org/olat/core/commons/services/tagging/model/TagImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.core.commons.services.tagging.model.TagImpl" table="o_tag">
 		<cache usage="read-write" />
diff --git a/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml b/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml
index 3cc598e67ff477b383341b187f7f62e05a01ffd6..d407060ed4b7667840aae71b1a295cbf86167b54 100644
--- a/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml
+++ b/src/main/java/org/olat/core/logging/activity/LoggingObject.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.core.logging.activity.LoggingObject"
diff --git a/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml
index d97fdd2c354a2f55143edea791d38aaf11458318..7d494e856582131ab6c571a5958422986a3f626c 100644
--- a/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml
+++ b/src/main/java/org/olat/core/util/mail/model/DBMail.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 
   <class name="org.olat.core.util.mail.model.DBMailImpl" mutable="false" table="o_mail">
diff --git a/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml
index 49a26127fcfea9e11b6a3eff2ef4618c8cb2a722..49956e12f29a851c5360ebf74b7517c1fb4b6214 100644
--- a/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml
+++ b/src/main/java/org/olat/core/util/mail/model/DBMailAttachment.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   
   <class name="org.olat.core.util.mail.model.DBMailAttachment" table="o_mail_attachment">  
diff --git a/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml b/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml
index 14a7d4379940204ff10ad9f951c06c8beda426db..99a64c0e2bf967cabe5bf87fc2722c89a47eeb02 100644
--- a/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml
+++ b/src/main/java/org/olat/core/util/mail/model/DBMailRecipient.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   
   <class name="org.olat.core.util.mail.model.DBMailRecipient" table="o_mail_recipient">
diff --git a/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml b/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml
index c8374f7e5a09ad69875d0fcbd1ef0305dc8c7a0e..f9ec0fe3dfcbdada9729da0e9f8ff6adc18e1e15 100644
--- a/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml
+++ b/src/main/java/org/olat/course/assessment/model/UserCourseInfosImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   
   <class name="org.olat.course.assessment.model.UserCourseInfosImpl" table="o_as_user_course_infos">	
diff --git a/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml b/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml
index 44af35f69b8c25b566dacecb5a497ead4639b01a..099f3e2ebc4081bb0d1b3bcc4b4e3fd169b0488a 100644
--- a/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml
+++ b/src/main/java/org/olat/course/assessment/model/UserEfficiencyStatementImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   
   <class name="org.olat.course.assessment.model.UserEfficiencyStatementImpl" table="o_as_eff_statement">	
diff --git a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml
index e5b063deff6f59ef5ccf011e6eea12020c523426..9b23245e92460593ca690d5f4bc9fd54a74234e3 100644
--- a/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml
+++ b/src/main/java/org/olat/course/assessment/portfolio/EfficiencyStatementArtefact.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<subclass name="org.olat.course.assessment.portfolio.EfficiencyStatementArtefact" 
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml
index d7e0d83cba4173f2d0d77a25b41ab1fd3eef892b..1da2d604a85763b1d4aa393aaec96bf9d809b902 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml
+++ b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/Project.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml
index 20b651a7a7d8dddf066eff5c52bdc04f6096fb60..0358920d5e3462b2f3672d9b495d2485af3f2c88 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml
+++ b/src/main/java/org/olat/course/nodes/projectbroker/datamodel/ProjectBroker.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.course.nodes.projectbroker.datamodel.ProjectBrokerImpl" table="o_projectbroker">
diff --git a/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml b/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml
index 7c0bfc186e373af1d892a2074fa7d44040db2bd0..72580864bf93d4df927c67c94e6924075581c7ec 100644
--- a/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/daily/DailyStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.daily.DailyStat"
diff --git a/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml b/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml
index c689f6c4db2ebd3e67090e644506f36004f0e5d1..8b279f2afc6894c0573ffa28e39f5e5447256794 100644
--- a/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/homeorg/HomeOrgStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.homeorg.HomeOrgStat"
diff --git a/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml b/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml
index 8c7ea8e153b4979c41216cc3051c5c841d0c77c6..158c616da48474c388288695bcbbd3fd5ee0169d 100644
--- a/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/hourofday/HourOfDayStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.hourofday.HourOfDayStat"
diff --git a/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml b/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml
index fdb87f1fdf784e82595fd40f09f7ef65bdf806fe..2b7ea21c2372f08842ebbf088e8b590917a7fdf2 100644
--- a/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/orgtype/OrgTypeStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.orgtype.OrgTypeStat"
diff --git a/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml b/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml
index cceb8294cf2e08fb9f4c7fa0b08e477c58c00f2c..2268b2336d2eb1109c5e8ae5c5867b32fa367b9c 100644
--- a/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/studybranch3/StudyBranch3Stat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.studybranch3.StudyBranch3Stat"
diff --git a/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml b/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml
index 2f95b43f812314cdd23ca62cffcecaf22b70c8a3..48b66cd46d344b2fb94363b6f111f462ab135eac 100644
--- a/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/studylevel/StudyLevelStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.studylevel.StudyLevelStat"
diff --git a/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml b/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml
index a808b5652384f84233279f0c3f06eef061e71c26..474830595ad7204ba6420fea6fbc8f0022ee1eac 100644
--- a/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml
+++ b/src/main/java/org/olat/course/statistic/weekly/WeeklyStat.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.course.statistic.weekly.WeeklyStat"
diff --git a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml b/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
index 64bd8c87dc309ee2bcc6e39d67a5e92c4464919e..5e0b21f1ce06b0f6f0068b47852037390cae91f8 100644
--- a/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
+++ b/src/main/java/org/olat/modules/fo/ForumImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.modules.fo.ForumImpl" table="o_forum">
diff --git a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml b/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
index 51217b7f8622b1cd7833824471ab6796c38260b2..b3d67af3a9adb08876f446421744215aeb88e38c 100644
--- a/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
+++ b/src/main/java/org/olat/modules/fo/MessageImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml b/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
index 0a4c0c80c7cde593f630a72437c91add7af48a8d..0f93993e90a07549d5c3656a77fa1f659b98d9bb 100644
--- a/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
+++ b/src/main/java/org/olat/modules/fo/ReadMessage.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.modules.fo.ReadMessageImpl" table="o_readmessage">
diff --git a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml
index 08ad99a5aef34796aa2d1e8f0589ce1b668fc744..d560ca0029720afa1ee417ea7ca774575f19f43f 100644
--- a/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml
+++ b/src/main/java/org/olat/modules/fo/portfolio/ForumArtefact.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<subclass name="org.olat.modules.fo.portfolio.ForumArtefact" 
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml
index 96c8d1bfde7a7b43441a27855f16e77a1960a707..564dcc178f6290cd29987ff969944e3c3356fb51 100644
--- a/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml
+++ b/src/main/java/org/olat/modules/webFeed/portfolio/BlogArtefact.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<subclass name="org.olat.modules.webFeed.portfolio.BlogArtefact" 
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml
index 51219126023f351726be6c57846c381b3e761450..a9ab49ae6f949eec093683d730eefc973b050dbd 100644
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml
+++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefact.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<subclass name="org.olat.modules.webFeed.portfolio.LiveBlogArtefact" 
diff --git a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml
index b5aaabb693a049e1454e72f181e99211986901ef..f556fd577a2fc76787cb1f52f94f2a7f459af83f 100644
--- a/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml
+++ b/src/main/java/org/olat/modules/wiki/portfolio/WikiArtefact.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<subclass name="org.olat.modules.wiki.portfolio.WikiArtefact" 
diff --git a/src/main/java/org/olat/note/NoteImpl.hbm.xml b/src/main/java/org/olat/note/NoteImpl.hbm.xml
index 03c6e65cb861b19bb049cf5a3d1670cc261adcf9..1599526c2012ddb705a4b4d67b3a568e2b607a50 100644
--- a/src/main/java/org/olat/note/NoteImpl.hbm.xml
+++ b/src/main/java/org/olat/note/NoteImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml b/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml
index 0d5bb061add2f5cc1d170a9a428e901ab145f53c..d7147d817713522603d15ec69645f0276f138306 100644
--- a/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml
+++ b/src/main/java/org/olat/notifications/PublisherImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.notifications.PublisherImpl" table="o_noti_pub">
diff --git a/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml b/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml
index fcf6f4de10789dbf261d19e3470717f4fc250a26..21f742ed2309f2a9346e202554a284d8c2547199 100644
--- a/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml
+++ b/src/main/java/org/olat/notifications/SubscriberImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.notifications.SubscriberImpl" table="o_noti_sub">
diff --git a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml b/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml
index c6d6553d0540e59684888152eba8d29e57911a1b..d6e41e435832e786892a55b1157896c5610b0b19 100644
--- a/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml
+++ b/src/main/java/org/olat/portfolio/model/notification/Notifications.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 
   <class name="org.olat.portfolio.model.notification.EPStructureElementNotification" table="o_ep_notifications_struct_v" mutable="false">
diff --git a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml
index 67c692f065b1c84cc2e31e312130dfb8552d82ea..54b93bd7e8b6aca470063e1c09f3ae9a94b2a935 100644
--- a/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml
+++ b/src/main/java/org/olat/portfolio/model/restriction/CollectRestriction.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 
   <class name="org.olat.portfolio.model.restriction.CollectRestriction" table="o_ep_collect_restriction">
diff --git a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml b/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml
index c425d254f5846d6cef1461117ae7bb72bfb180d4..6f5ebaaf94d72fe6134b5792e3c76000c0dd6f20 100644
--- a/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml
+++ b/src/main/java/org/olat/portfolio/model/structel/StructureElement.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 
   <class name="org.olat.portfolio.model.structel.EPStructureElement" table="o_ep_struct_el" discriminator-value="element">
diff --git a/src/main/java/org/olat/properties/Property.hbm.xml b/src/main/java/org/olat/properties/Property.hbm.xml
index ec2012543629e13591dd90444126b19a6839219c..817247ec355c4a15a96d9e3d2b1d1851d0f30686 100644
--- a/src/main/java/org/olat/properties/Property.hbm.xml
+++ b/src/main/java/org/olat/properties/Property.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
 
diff --git a/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml b/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml
index 3bb03258da7cf51f37b1be54ccc20a45d5304387..12318d9269a7e6c7aff2c278190cebbe06af5d46 100644
--- a/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml
+++ b/src/main/java/org/olat/registration/TemporaryKeyImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.registration.TemporaryKeyImpl" table="o_temporarykey">
diff --git a/src/main/java/org/olat/repository/MetaDataElement.hbm.xml b/src/main/java/org/olat/repository/MetaDataElement.hbm.xml
index 21fc99e653208744bc0982c198cb1439b9cb1919..be8e3e1476f3d74f5b9fac75c1938bd1ac45ad23 100644
--- a/src/main/java/org/olat/repository/MetaDataElement.hbm.xml
+++ b/src/main/java/org/olat/repository/MetaDataElement.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.repository.MetaDataElement" table="o_repositorymetadata">
 	
diff --git a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml
index 010bdb22e9276205b18fc541ceda623771833073..9685912506e6aade2c1c7cbab5b326c0976f25c5 100644
--- a/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml
+++ b/src/main/java/org/olat/repository/RepositoryEntry.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.repository.RepositoryEntry" table="o_repositoryentry">
 	
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml
index e20faa29f5835c5aa24fa491ef89f76abd53ed75..7f958f89f2b77000905e87cec8198cfc5b3f56e9 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml
+++ b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	
 	<class name="org.olat.resource.accesscontrol.model.AbstractAccessMethod" table="o_ac_method">
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml
index dbe0210db3e0a9f580509f20abcd3cd66e4ccb28..4d23f8abf6e976237adb6f57fdc55d49159ae93d 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml
+++ b/src/main/java/org/olat/resource/accesscontrol/model/AccessTransaction.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 
 	<class name="org.olat.resource.accesscontrol.model.AccessTransactionImpl" table="o_ac_transaction">
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml
index 5709d22a24ba3b29f33d0629bd2658e8de9e5807..e3a5c97abd2d842f0960aaf088bd1df0dd9a5a0b 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml
+++ b/src/main/java/org/olat/resource/accesscontrol/model/Offer.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.resource.accesscontrol.model.OfferImpl" table="o_ac_offer">
 		<id name="key" column="offer_id" type="long" unsaved-value="null">
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml
index 1747f31224288d71a3e85debd7089be574846315..6ff83c07e754ff7fccbe87ee0f592818f61b121c 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml
+++ b/src/main/java/org/olat/resource/accesscontrol/model/OfferAccess.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	<class name="org.olat.resource.accesscontrol.model.OfferAccessImpl" table="o_ac_offer_access">
 		<id name="key" column="offer_method_id" type="long" unsaved-value="null">
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml b/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml
index 7bae9efdf43720f5e9d54eecfb6ebd2c7bde2aeb..6147d39de9d3c7d05ea0c333c92f51b8ed491b51 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml
+++ b/src/main/java/org/olat/resource/accesscontrol/model/Order.hbm.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
 	
 	<class name="org.olat.resource.accesscontrol.model.OrderImpl" table="o_ac_order">
diff --git a/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml b/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml
index a6c931df45d7fc6a8b9132b2a1d2d91b1df643d3..dacf5745f5771c3532879f0a9664e317d620a911 100644
--- a/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml
+++ b/src/main/java/org/olat/resource/lock/pessimistic/PLockImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.resource.lock.pessimistic.PLockImpl" table="o_plock">
   		
diff --git a/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java b/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java
index e79a16536829db31d73572e25290ff55db75df74..9785f7190b74394e970895805d8d3d357ad9a933 100644
--- a/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java
+++ b/src/main/java/org/olat/resource/lock/pessimistic/PessimisticLockManager.java
@@ -24,7 +24,9 @@
 */
 package org.olat.resource.lock.pessimistic;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.hibernate.LockMode;
 import org.olat.core.commons.persistence.DBFactory;
@@ -77,7 +79,11 @@ public class PessimisticLockManager extends BasicManager implements Initializabl
 	private PLock findPLock(String asset) {	
 		DBQuery q = DBFactory.getInstance().createQuery("select plock from org.olat.resource.lock.pessimistic.PLockImpl as plock where plock.asset = :asset");
 		q.setParameter("asset", asset);
-		q.setLockMode("plock", LockMode.UPGRADE);
+		q.setLockMode("plock", LockMode.PESSIMISTIC_WRITE);
+		
+		Map<String,Object> props = new HashMap<String, Object>();
+		props.put("javax.persistence.lock.timeout", new Integer(30000));
+		q.setProperties(props);
 		List res = q.list();
 		if (res.size() == 0) {
 			return null; 
diff --git a/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml b/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml
index 9fb1a35b444a9009fe475d17fabf3df390be6e8a..a828613f43a53db67de9a1f6718bcb2e1408751f 100644
--- a/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml
+++ b/src/main/java/org/olat/resource/references/ReferenceImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.resource.references.ReferenceImpl" table="o_references">
diff --git a/src/main/java/org/olat/user/UserImpl.hbm.xml b/src/main/java/org/olat/user/UserImpl.hbm.xml
index 7ace2e77abecaf8877b08175e71df612b0f42d9f..1f71d3f50ed92d85930175f9989dc7e37592b768 100644
--- a/src/main/java/org/olat/user/UserImpl.hbm.xml
+++ b/src/main/java/org/olat/user/UserImpl.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
   <class name="org.olat.user.UserImpl" table="o_user">  
diff --git a/src/test/java/org/olat/core/commons/persistence/DBTest.java b/src/test/java/org/olat/core/commons/persistence/DBTest.java
index 0439a25fa0a6830158a376f0c1e3725443c75277..f49c28dbe41be3a606471ac89adad511ba457ac2 100644
--- a/src/test/java/org/olat/core/commons/persistence/DBTest.java
+++ b/src/test/java/org/olat/core/commons/persistence/DBTest.java
@@ -35,6 +35,7 @@ import static org.junit.Assert.fail;
 import org.junit.After;
 import org.junit.Test;
 import org.olat.core.logging.DBRuntimeException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
@@ -48,6 +49,8 @@ import org.olat.test.OlatTestCase;
  *
  */
 public class DBTest extends OlatTestCase {
+	
+	private final OLog log = Tracing.createLoggerFor(DBTest.class);
 
 		
 	/**
@@ -107,11 +110,11 @@ public class DBTest extends OlatTestCase {
 			PropertyManager pm = PropertyManager.getInstance();
 			Property p1 = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null);
 			pm.saveProperty(p1);
-			String propertyKey2 = "testRollback-2";
 			String testValue2 = "testRollback-2";
 			// name is null => generated DB error => rollback
 			Property p2 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue2, null);
 			pm.saveProperty(p2);
+			db.commit();
 			fail("Should generate error for rollback.");
 		} catch (Exception ex) {
 			db.closeSession();
@@ -129,7 +132,6 @@ public class DBTest extends OlatTestCase {
 		String testValue1 = "testMixed-1";
 		String propertyKey2 = "testMixed-2";
 		String testValue2 = "testMixed-2";
-		String propertyKey3 = "testMixed-3";
 		String testValue3 = "testMixed-3";
 		try {
 			// outside of transaction
@@ -142,6 +144,7 @@ public class DBTest extends OlatTestCase {
 			// name is null => generated DB error => rollback
 			Property p3 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue3, null);
 			pm.saveProperty(p3);
+			db.commit();
 			fail("Should generate error for rollback.");
 			db.closeSession();
 		} catch (Exception ex) {
@@ -161,7 +164,6 @@ public class DBTest extends OlatTestCase {
 		String testValue1 = "testNonTransactional-1";
 		String propertyKey2 = "testNonTransactional-2";
 		String testValue2 = "testNonTransactional-2";
-		String propertyKey3 = "testNonTransactional-3";
 		String testValue3 = "testNonTransactional-3";
 		try {
 			PropertyManager pm = PropertyManager.getInstance();
@@ -172,6 +174,7 @@ public class DBTest extends OlatTestCase {
 			// name is null => generated DB error => rollback ?
 			Property p3 = pm.createPropertyInstance(null, null, null, null, null, null, null, testValue3, null);
 			pm.saveProperty(p3);
+			db.commit();
 			fail("Should generate error for rollback.");
 			db.closeSession();
 		} catch (Exception ex) {
@@ -193,7 +196,7 @@ public class DBTest extends OlatTestCase {
 	public void testConcurrentUpdate() {
 		int maxWorkers = 5;
 		int loops = 100;
-		Tracing.logInfo("start testConcurrentUpdate maxWorkers=" + maxWorkers + "  loops=" + loops, this.getClass());
+		log.info("start testConcurrentUpdate maxWorkers=" + maxWorkers + "  loops=" + loops);
 		DbWorker[] dbWorkers = new DbWorker[maxWorkers];
 		for (int i=0; i<maxWorkers; i++) {
 			dbWorkers[i] = new DbWorker(i,loops);
@@ -207,21 +210,21 @@ public class DBTest extends OlatTestCase {
 				}
 			}
 			try {
-				Thread.currentThread().sleep(1000);
+				Thread.sleep(1000);
 			} catch (InterruptedException e) {
-				Tracing.logWarn("testConcurrentUpdate InterruptedException=" + e, this.getClass());
+				log.warn("testConcurrentUpdate InterruptedException=" + e);
 			}
 		}
 		for (int i=0; i<maxWorkers; i++) {
 			assertEquals(0,dbWorkers[i].getErrorCounter());
 		}
-		Tracing.logInfo("finished testConcurrentUpdate " , this.getClass());
+		log.info("finished testConcurrentUpdate ");
 	}
 	@Test
 	public void testDbPerf() {
 		int loops = 1000;
 		long timeWithoutTransction = 0;
-		Tracing.logInfo("start testDbPerf with loops=" + loops, this.getClass());
+		log.info("start testDbPerf with loops=" + loops);
 		try {
 			long startTime = System.currentTimeMillis();
 			for (int loopCounter=0; loopCounter<loops; loopCounter++) {
@@ -237,7 +240,7 @@ public class DBTest extends OlatTestCase {
 			}
 			long endTime = System.currentTimeMillis();
 			timeWithoutTransction = endTime - startTime;
-			Tracing.logInfo("testDbPerf without transaction takes :" + timeWithoutTransction + "ms", this.getClass());
+			log.info("testDbPerf without transaction takes :" + timeWithoutTransction + "ms");
 		} catch (Exception ex) {
 			fail("Exception in testDbPerf without transaction ex="+ ex);
 		}
@@ -258,16 +261,15 @@ public class DBTest extends OlatTestCase {
 			}
 			long endTime = System.currentTimeMillis();
 			long timeWithTransction = endTime - startTime;
-			Tracing.logInfo("testDbPerf with transaction takes :" + timeWithTransction + "ms", this.getClass());
-			Tracing.logInfo("testDbPerf diff between transaction and without transaction :" + (timeWithTransction - timeWithoutTransction) + "ms", this.getClass());
+			log.info("testDbPerf with transaction takes :" + timeWithTransction + "ms");
+			log.info("testDbPerf diff between transaction and without transaction :" + (timeWithTransction - timeWithoutTransction) + "ms");
 		} catch (Exception ex) {
 			fail("Exception in testDbPerf with transaction ex="+ ex);
 		}
 	}
+	
 	@Test
 	public void testDBUTF8capable() {
-		//FIXME:fj: move this test to the db module
-		
 		DB db = DBFactory.getInstance();
 		PropertyManager pm = PropertyManager.getInstance();
 		String unicodetest = "a-greek a\u03E2a\u03EAa\u03E8 arab \u0630a\u0631 chinese:\u3150a\u3151a\u3152a\u3153a\u3173a\u3110-z";
@@ -279,8 +281,8 @@ public class DBTest extends OlatTestCase {
 		Property p2 = pm.findProperty(null, null, null, null, "superbluberkey");
 		String lStr = p2.getStringValue();
 		assertEquals(unicodetest, lStr);
-		
 	}
+	
 	@Test
 	public void testFindObject() {
 		// 1. create a property to have an object  
@@ -307,66 +309,64 @@ public class DBTest extends OlatTestCase {
 	public void tearDown() throws Exception {
 		DBFactory.getInstance().closeSession();
 	}
+	
+	class DbWorker implements Runnable {
 
+		private Thread workerThread = null;
+		private int numberOfLoops;
+		private String workerId;
+		private int errorCounter = 0;
+		private boolean isfinished = false;
 
-}
-
-class DbWorker implements Runnable {
-
-	private Thread workerThread = null;
-	private int numberOfLoops;
-	private String workerId;
-	private int errorCounter = 0;
-	private boolean isfinished = false;
-
-	public DbWorker(int id, int numberOfLoops) {
-		this.numberOfLoops = numberOfLoops;
-		this.workerId = Integer.toString(id);
-		if ( (workerThread == null) || !workerThread.isAlive()) {
-			Tracing.logInfo("start DbWorker thread id=" + id, this.getClass());
-			workerThread = new Thread(this, "TestWorkerThread-" + id);
-			workerThread.setPriority(Thread.MAX_PRIORITY);
-			workerThread.setDaemon(true);
-			workerThread.start();
+		public DbWorker(int id, int numberOfLoops) {
+			this.numberOfLoops = numberOfLoops;
+			this.workerId = Integer.toString(id);
+			if ( (workerThread == null) || !workerThread.isAlive()) {
+				log.info("start DbWorker thread id=" + id);
+				workerThread = new Thread(this, "TestWorkerThread-" + id);
+				workerThread.setPriority(Thread.MAX_PRIORITY);
+				workerThread.setDaemon(true);
+				workerThread.start();
+			}
 		}
-	}
 
-	public void run() {
-		int loopCounter = 0;
-		try {
-			while (loopCounter++ < numberOfLoops ) {
-				String propertyKey = "DbWorkerKey-" + workerId + "-" + loopCounter;
-				DB db = DBFactory.getInstance();
-				PropertyManager pm = PropertyManager.getInstance();
-				String testValue = "DbWorkerValue-" + workerId + "-" + loopCounter;
-				Property p = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null);
-				pm.saveProperty(p);
-				// forget session cache etc.
-				db.closeSession();
-				
-				db = DBFactory.getInstance();
-				Property p2 = pm.findProperty(null, null, null, null, propertyKey);
-				String lStr = p2.getStringValue();
-				if (!testValue.equals(lStr)) {
-					Tracing.logInfo("Property ERROR testValue=" + testValue + ": lStr=" + lStr, this.getClass());
-					errorCounter++;
+		public void run() {
+			int loopCounter = 0;
+			try {
+				while (loopCounter++ < numberOfLoops ) {
+					String propertyKey = "DbWorkerKey-" + workerId + "-" + loopCounter;
+					DB db = DBFactory.getInstance();
+					PropertyManager pm = PropertyManager.getInstance();
+					String testValue = "DbWorkerValue-" + workerId + "-" + loopCounter;
+					Property p = pm.createPropertyInstance(null, null, null, null, propertyKey, null, null, testValue, null);
+					pm.saveProperty(p);
+					// forget session cache etc.
+					db.closeSession();
+					
+					db = DBFactory.getInstance();
+					Property p2 = pm.findProperty(null, null, null, null, propertyKey);
+					String lStr = p2.getStringValue();
+					if (!testValue.equals(lStr)) {
+						log.info("Property ERROR testValue=" + testValue + ": lStr=" + lStr);
+						errorCounter++;
+					}
+					db.closeSession();
+					
+					Thread.sleep(5);
 				}
-				db.closeSession();
-				
-				Thread.currentThread().sleep(5);
+			} catch (Exception ex) {
+				log.info("ERROR workerId=" + workerId + ": Exception=" + ex);
+				errorCounter++;
 			}
-		} catch (Exception ex) {
-			Tracing.logInfo("ERROR workerId=" + workerId + ": Exception=" + ex, this.getClass());
-			errorCounter++;
+			isfinished  = true;
+		}
+		
+		protected int getErrorCounter() {
+			return errorCounter;
+		}
+		
+		protected boolean isfinished() {
+			return isfinished;
 		}
-		isfinished  = true;
-	}
-	
-	protected int getErrorCounter() {
-		return errorCounter;
-	}
-	
-	protected boolean isfinished() {
-		return isfinished;
 	}
 }
\ No newline at end of file
diff --git a/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml b/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml
index 0f5dd21d852f3c77e9c69777573bceb7ee4aace4..e4e2ab16b737b037ce656f5bc072e027bb7c0256 100644
--- a/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml
+++ b/src/test/java/org/olat/core/commons/persistence/TestTable.hbm.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
         "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping default-lazy="false">
  <class name="org.olat.core.commons.persistence.TestTable" table="o_tst_testtable">  
diff --git a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java
index ce88e87fe5907d4707cf62c7617fe294c81815b2..fb7d0509b68bf852369dc3c0c76a4a8f468ae389 100644
--- a/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java
+++ b/src/test/java/org/olat/resource/lock/pessimistic/PLockTest.java
@@ -168,6 +168,8 @@ public class PLockTest extends OlatTestCase {
 		//Ignore Test if DB is PostgreSQL. PostgreSQL has not lock timeout
 		assumeTrue(!isPostgresqlConfigured());
 		
+		final String asset = "testLockWaitTimout";
+		
 		System.out.println("testing if holding a lock timeouts");
 		// make sure all three row entries for the locks are created, otherwise the system-wide locking 
 		// applied on lock-row-creation cannot support row-level-locking by definition. 
@@ -197,7 +199,7 @@ public class PLockTest extends OlatTestCase {
 			public void run() {
 				try {
 					sleep(2500);
-					PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli");
+					PLock p3 = PessimisticLockManager.getInstance().findOrPersistPLock(asset);
 					assertNotNull(p3);					
 				} catch (Exception e) {
 					exceptionHolder.add(e);
@@ -214,7 +216,7 @@ public class PLockTest extends OlatTestCase {
 		new Thread(new Runnable() {
 			public void run() {
 				try {
-					PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock("blibli");
+					PLock p2 = PessimisticLockManager.getInstance().findOrPersistPLock(asset);
 					assertNotNull(p2);
 					sleep(60000);
 					// holding the lock for more than the transaction timeout (normally 30secs, configured where? hib) should cause a lock timeout