diff --git a/src/main/java/org/olat/resource/_spring/resourceContext.xml b/src/main/java/org/olat/resource/_spring/resourceContext.xml
index e2cc09c3ae325409fc4c9f0b4bdb764d33965cd9..405da6ce38bedbf900bfb0722b62f2eacc2dfb80 100644
--- a/src/main/java/org/olat/resource/_spring/resourceContext.xml
+++ b/src/main/java/org/olat/resource/_spring/resourceContext.xml
@@ -5,12 +5,13 @@
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
-<bean id="resourceManager" class="org.olat.resource.OLATResourceManager">
-	<property name="dbInstance" ref="database"/>
-</bean>
+	<bean id="resourceManager" class="org.olat.resource.OLATResourceManager">
+		<property name="dbInstance" ref="database"/>
+	</bean>
 
-<bean id="referenceManager" class="org.olat.resource.references.ReferenceManager">
-	<constructor-arg ref="resourceManager" />
-</bean>
+	<bean id="referenceManager" class="org.olat.resource.references.ReferenceManager">
+		<property name="dbInstance" ref="database"/>
+		<property name="resourceManager" ref="resourceManager"/>
+	</bean>
 
 </beans>
\ No newline at end of file
diff --git a/src/main/java/org/olat/resource/references/ReferenceManager.java b/src/main/java/org/olat/resource/references/ReferenceManager.java
index 6855727aebab27b032cb0300da808f00f7655990..96175413fe30555dd48968da6699e0142128f169 100644
--- a/src/main/java/org/olat/resource/references/ReferenceManager.java
+++ b/src/main/java/org/olat/resource/references/ReferenceManager.java
@@ -26,14 +26,15 @@
 package org.olat.resource.references;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 
-import org.hibernate.type.StandardBasicTypes;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.manager.BasicManager;
 import org.olat.core.util.Util;
 import org.olat.course.CourseFactory;
@@ -54,11 +55,14 @@ import org.olat.resource.OLATResourceManager;
  */
 public class ReferenceManager extends BasicManager {
 	
+	private static final OLog log = Tracing.createLoggerFor(ReferenceManager.class);
+	
 	private static ReferenceManager INSTANCE;
+	
+	private DB dbInstance;
 	private OLATResourceManager olatResourceManager;
 	
-	private ReferenceManager(OLATResourceManager olatResourceManager) {
-		this.olatResourceManager = olatResourceManager;
+	private ReferenceManager() {
 		INSTANCE = this;
 	}
 
@@ -67,6 +71,23 @@ public class ReferenceManager extends BasicManager {
 	 */
 	public static ReferenceManager getInstance() { return INSTANCE; }
 	
+
+	/**
+	 * [used by Spring]
+	 * @param dbInstance
+	 */
+	public void setDbInstance(DB dbInstance) {
+		this.dbInstance = dbInstance;
+	}
+
+	/**
+	 * [used by Spring]
+	 * @param olatResourceManager
+	 */
+	public void setResourceManager(OLATResourceManager olatResourceManager) {
+		this.olatResourceManager = olatResourceManager;
+	}
+
 	/**
 	 * Add a new reference. The meaning of source and target is
 	 * such as the source references the target.
@@ -80,7 +101,7 @@ public class ReferenceManager extends BasicManager {
 		OLATResourceImpl sourceImpl = (OLATResourceImpl)olatResourceManager.findResourceable(source);
 		OLATResourceImpl targetImpl = (OLATResourceImpl)olatResourceManager.findResourceable(target);
 		ReferenceImpl ref = new ReferenceImpl(sourceImpl, targetImpl, userdata);
-		DBFactory.getInstance().saveObject(ref);
+		dbInstance.saveObject(ref);
 	}
 
 	/**
@@ -90,12 +111,15 @@ public class ReferenceManager extends BasicManager {
 	 * @return List of renerences.
 	 */
 	public List<ReferenceImpl> getReferences(OLATResourceable source) {
-		OLATResourceImpl sourceImpl = (OLATResourceImpl)olatResourceManager.findResourceable(source);
-		if (sourceImpl == null) return new ArrayList<ReferenceImpl>(0);
-		
-		return DBFactory.getInstance().find(
-				"select v from org.olat.resource.references.ReferenceImpl as v where v.source = ?",
-				sourceImpl.getKey(), StandardBasicTypes.LONG);
+		Long sourceKey = getResourceKey(source);
+		if (sourceKey == null) {
+			return new ArrayList<ReferenceImpl>(0);
+		}
+		StringBuilder sb = new StringBuilder();
+		sb.append("select v from ").append(ReferenceImpl.class.getName()).append(" as v where v.source.key=:sourceKey");
+		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), ReferenceImpl.class)
+				.setParameter("sourceKey", sourceKey)
+				.getResultList();
 	}
 	
 	/**
@@ -104,13 +128,31 @@ public class ReferenceManager extends BasicManager {
 	 * @param target
 	 * @return List of references.
 	 */
-	public List getReferencesTo(OLATResourceable target) {
-		OLATResourceImpl targetImpl = (OLATResourceImpl)olatResourceManager.findResourceable(target);
-		if (targetImpl == null) return new ArrayList(0);
-		
-		return DBFactory.getInstance().find(
-				"select v from org.olat.resource.references.ReferenceImpl as v where v.target = ?",
-				targetImpl.getKey(), StandardBasicTypes.LONG);
+	public List<ReferenceImpl> getReferencesTo(OLATResourceable target) {
+		Long targetKey = getResourceKey(target);
+		if (targetKey == null) {
+			return new ArrayList<ReferenceImpl>(0);
+		}
+		StringBuilder sb = new StringBuilder();
+		sb.append("select v from ").append(ReferenceImpl.class.getName()).append(" as v where v.target.key=:targetKey");
+		return dbInstance.getCurrentEntityManager().createQuery(sb.toString(), ReferenceImpl.class)
+				.setParameter("targetKey", targetKey)
+				.getResultList();
+	}
+	
+	private Long getResourceKey(OLATResourceable resource) {
+		Long sourceKey;
+		if(resource instanceof OLATResource) {
+			sourceKey = ((OLATResource)resource).getKey();
+		} else {
+			OLATResource sourceImpl = olatResourceManager.findResourceable(resource);
+			if (sourceImpl == null) {
+				sourceKey =  null;
+			} else {
+				sourceKey = sourceImpl.getKey();
+			}
+		}
+		return sourceKey;
 	}
 
 	/**
@@ -131,16 +173,19 @@ public class ReferenceManager extends BasicManager {
 	public String getReferencesToSummary(OLATResourceable target, Locale locale) {
 		Translator translator = Util.createPackageTranslator(this.getClass(), locale);
 		StringBuilder result = new StringBuilder(100);
-		List refs = getReferencesTo(target);
+		List<ReferenceImpl> refs = getReferencesTo(target);
 		if (refs.size() == 0) return null;
-		for (Iterator iter = refs.iterator(); iter.hasNext();) {
-			ReferenceImpl ref = (ReferenceImpl) iter.next();
+		for (ReferenceImpl ref:refs) {
 			OLATResourceImpl source = ref.getSource();
-			
 			// special treatment for referenced courses: find out the course title
 			if (source.getResourceableTypeName().equals(CourseModule.getCourseTypeName())) {
-				ICourse course = CourseFactory.loadCourse(source);
-				result.append(translator.translate("ref.course", new String[] { course.getCourseTitle() }));
+				try {
+					ICourse course = CourseFactory.loadCourse(source);
+					result.append(translator.translate("ref.course", new String[] { course.getCourseTitle() }));
+				} catch (Exception e) {
+					log.error("", e);
+					result.append(translator.translate("ref.course", new String[] { "<strike>" + source.getKey().toString() + "</strike>" }));
+				}
 			} else {
 				result.append(translator.translate("ref.generic", new String[] { source.getKey().toString() }));
 			}
@@ -161,11 +206,9 @@ public class ReferenceManager extends BasicManager {
 	 * @param olatResource  an OLAT-Resource
 	 */
 	public void deleteAllReferencesOf(OLATResource olatResource) {
-		List references = ReferenceManager.getInstance().getReferences(olatResource);
-		for (Iterator iterator = references.iterator(); iterator.hasNext();) {
-			ReferenceImpl ref = (ReferenceImpl) iterator.next();
-			ReferenceManager.getInstance().delete( ref);
+		List<ReferenceImpl> references = getReferences(olatResource);
+		for (ReferenceImpl ref:references) {
+			delete(ref);
 		}
 	}
-
 }
diff --git a/src/test/java/org/olat/resource/references/ReferenceManagerTest.java b/src/test/java/org/olat/resource/references/ReferenceManagerTest.java
index 7749c7e7dd2effe4882a4abd928ba0ed8c5f40ab..fde9bb52922ed73b830ccaf4ff8d8cba32568a15 100644
--- a/src/test/java/org/olat/resource/references/ReferenceManagerTest.java
+++ b/src/test/java/org/olat/resource/references/ReferenceManagerTest.java
@@ -28,17 +28,18 @@ package org.olat.resource.references;
 
 import static org.junit.Assert.assertTrue;
 
-import java.util.Iterator;
 import java.util.List;
 
-import org.apache.log4j.Logger;
-import org.junit.After;
+import org.junit.Assert;
 import org.junit.Test;
-import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
+import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
+import org.springframework.beans.factory.annotation.Autowired;
 
 
 /**
@@ -46,107 +47,125 @@ import org.olat.test.OlatTestCase;
  */
 public class ReferenceManagerTest extends OlatTestCase {
 
-	private static Logger log = Logger.getLogger(ReferenceManagerTest.class.getName());
-	private static Long RESOURCABLE_ID_1 = new Long(123);
-	private static Long RESOURCABLE_ID_2 = new Long(456);
-	private static Long RESOURCABLE_ID_3 = new Long(457);
-
-
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private ReferenceManager referenceManager;
+	@Autowired
+	private OLATResourceManager resourceManager;
+	
+	
 	// Already tested in BusinessGroupTest :
 	//  - getGroupsWithPermissionOnOlatResourceable
 	//  - getIdentitiesWithPermissionOnOlatResourceable
 	/**
 	 * 
 	 */
-	@Test public void testAddReference() {
-		OLATResource oressource = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type1", RESOURCABLE_ID_1));
-		OLATResource orestarget = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type2targ", RESOURCABLE_ID_2));
+	@Test
+	public void testAddReference() {
+		OLATResource oressource = JunitTestHelper.createRandomResource();
+		OLATResource orestarget = JunitTestHelper.createRandomResource();
 		String udata = "üserdätä";
 		
 		// add a reference
-		ReferenceManager.getInstance().addReference(oressource, orestarget, udata);
-		DBFactory.getInstance().closeSession();
+		referenceManager.addReference(oressource, orestarget, udata);
+		dbInstance.closeSession();
 		
-		OLATResource orestarget2 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type2targ", RESOURCABLE_ID_2));
-		List refs = ReferenceManager.getInstance().getReferencesTo(orestarget2);
-		for (Iterator it_refs = refs.iterator(); it_refs.hasNext();) {
-			ReferenceImpl ref = (ReferenceImpl) it_refs.next();
-			System.out.println("ref:"+ref);
-		}
-		assertTrue("only one reference may exist", refs.size() == 1);
+		OLATResourceable targetOres = OresHelper.createOLATResourceableInstance(orestarget.getResourceableTypeName(), orestarget.getResourceableId());
+		OLATResource orestarget2 = resourceManager.findOrPersistResourceable(targetOres);
+		List<ReferenceImpl> refs = referenceManager.getReferencesTo(orestarget2);
+		Assert.assertNotNull(refs);
+		Assert.assertEquals("only one reference may exist", 1, refs.size());
+		Assert.assertEquals(oressource, refs.get(0).getSource());
 	}
 	
-	@Test public void testReferencesToAndFrom() {
+	@Test
+	public void testReferencesToAndFrom() {
 		// same resouceable id on purpose
-		OLATResource s1 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("s1rrtype1",  RESOURCABLE_ID_1));
-		OLATResource s2 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("s2rrtype1",  RESOURCABLE_ID_1));
-		OLATResource s3 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("s31rrtype1", RESOURCABLE_ID_1));
-		OLATResource t1 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("t1rrtype1",  RESOURCABLE_ID_1));
-		OLATResource t2 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("t2rrtype1",  RESOURCABLE_ID_1));
+		OLATResource s1 = JunitTestHelper.createRandomResource();
+		OLATResource s2 = JunitTestHelper.createRandomResource();
+		OLATResource s3 = JunitTestHelper.createRandomResource();
+		OLATResource t1 = JunitTestHelper.createRandomResource();
+		OLATResource t2 = JunitTestHelper.createRandomResource();
 		
 		// add references
-		ReferenceManager.getInstance().addReference(s1,t1,"r11");
-		ReferenceManager.getInstance().addReference(s2,t1,"r21");
-		ReferenceManager.getInstance().addReference(s2,t2,"r22");
-		ReferenceManager.getInstance().addReference(s3,t2,"r32");
+		referenceManager.addReference(s1,t1,"r11");
+		referenceManager.addReference(s2,t1,"r21");
+		referenceManager.addReference(s2,t2,"r22");
+		referenceManager.addReference(s3,t2,"r32");
 		
-		DBFactory.getInstance().closeSession();
+		dbInstance.closeSession();
 
-		// find the refs again
-		
-		List s1R = ReferenceManager.getInstance().getReferences(s1);
-		assertTrue("s1 only has one reference", s1R.size() == 1);
+		// find the refs again with DB resource
+		List<ReferenceImpl> s1R =referenceManager.getReferences(s1);
+		Assert.assertEquals("s1 only has one reference", 1, s1R.size());
 		ReferenceImpl ref = (ReferenceImpl)s1R.get(0);
-		assertTrue("source and s1 the same", OresHelper.equals(ref.getSource(), s1));
-		assertTrue("target and t1 the same", OresHelper.equals(ref.getTarget(), t1));
+		Assert.assertEquals("source and s1 the same", s1, ref.getSource());
+		Assert.assertEquals("target and t1 the same", t1, ref.getTarget());
+		
+		// find the same refs again with  resourceable
+		OLATResourceable s1Ores = OresHelper.createOLATResourceableInstance(s1.getResourceableTypeName(), s1.getResourceableId());
+		List<ReferenceImpl> s1Rb =referenceManager.getReferences(s1Ores);
+		Assert.assertEquals("s1 only has one reference", 1, s1Rb.size());
+		ReferenceImpl refb = (ReferenceImpl)s1R.get(0);
+		Assert.assertEquals("source and s1 the same", s1, refb.getSource());
+		Assert.assertEquals("target and t1 the same", t1, refb.getTarget());
 		
 		// two refs from s2
-		List s2refs = ReferenceManager.getInstance().getReferences(s2);
-		assertTrue ("s2 holds two refs (to t1 and t2)", s2refs.size() == 2);
+		List<ReferenceImpl> s2refs = referenceManager.getReferences(s2);
+		Assert.assertEquals("s2 holds two refs (to t1 and t2)", 2, s2refs.size());
 		
 		// two refs to t2
-		List t2refs = ReferenceManager.getInstance().getReferencesTo(t2);
-		assertTrue ("t2 holds two source refs (to s2 and s3)", t2refs.size() == 2);		
-		
+		List<ReferenceImpl> t2refs = referenceManager.getReferencesTo(t2);
+		Assert.assertEquals("t2 holds two source refs (to s2 and s3)", 2, t2refs.size());		
 	}
 	
-	@Test public void testAddAndDeleteReference() {
-		OLATResource oressource = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type1", RESOURCABLE_ID_1));
-		OLATResource orestarget = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type2targ", RESOURCABLE_ID_3));
+	@Test
+	public void testAddAndDeleteReference() {
+		OLATResource oressource = JunitTestHelper.createRandomResource();
+		OLATResource orestarget = JunitTestHelper.createRandomResource();
 		String udata = "üserdätä";
-		
 		// add a reference
-		ReferenceManager.getInstance().addReference(oressource, orestarget, udata);
-		DBFactory.getInstance().closeSession();
+		referenceManager.addReference(oressource, orestarget, udata);
+		dbInstance.commitAndCloseSession();
 				
-		OLATResource orestarget2 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type2targ", RESOURCABLE_ID_3));
-		List refs = ReferenceManager.getInstance().getReferencesTo(orestarget2);
-		assertTrue("only one reference may exist", refs.size() == 1);
-		for (Iterator it_refs = refs.iterator(); it_refs.hasNext();) {
-			ReferenceImpl ref = (ReferenceImpl) it_refs.next();
-			ReferenceManager.getInstance().delete(ref);
+		OLATResourceable orestarget2 = OresHelper.createOLATResourceableInstance(orestarget.getResourceableTypeName(), orestarget.getResourceableId());
+		List<ReferenceImpl> refs = referenceManager.getReferencesTo(orestarget2);
+		Assert.assertEquals("only one reference may exist", 1, refs.size());
+		dbInstance.commitAndCloseSession();
+		
+		for (ReferenceImpl ref : refs) {
+			referenceManager.delete(ref);
 		}
-
-		DBFactory.getInstance().closeSession();
+		dbInstance.commitAndCloseSession();
 
 		// now make sure the reference was deleted
-		OLATResource orestarget3 = OLATResourceManager.getInstance().findOrPersistResourceable(OresHelper.createOLATResourceableInstance("type2targ", RESOURCABLE_ID_3));
-		List norefs = ReferenceManager.getInstance().getReferencesTo(orestarget3);
-		assertTrue("reference should now be deleted", norefs.size() == 0);
-		
+		OLATResourceable orestarget3 = OresHelper.createOLATResourceableInstance(orestarget.getResourceableTypeName(), orestarget.getResourceableId());
+		List<ReferenceImpl> norefs = referenceManager.getReferencesTo(orestarget3);
+		assertTrue("reference should now be deleted", norefs.isEmpty());
 	}
+	
+	@Test
+	public void testAddAndDeleteAllReferences() {
+		OLATResource oressource = JunitTestHelper.createRandomResource();
+		OLATResource orestarget1 = JunitTestHelper.createRandomResource();
+		OLATResource orestarget2 = JunitTestHelper.createRandomResource();
+		// add the references
+		referenceManager.addReference(oressource, orestarget1, "üserdätä");
+		referenceManager.addReference(oressource, orestarget2, "éserdàtà");
+		dbInstance.commitAndCloseSession();
+				
+		List<ReferenceImpl> refs = referenceManager.getReferences(oressource);
+		Assert.assertEquals("2 references exist", 2, refs.size());
+		dbInstance.commitAndCloseSession();
+		
+		referenceManager.deleteAllReferencesOf(oressource);
+		dbInstance.commitAndCloseSession();
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	@After public void tearDown() throws Exception {
-		try {
-			//DB.getInstance().delete("select * from o_bookmark");
-			DBFactory.getInstance().closeSession();
-		} catch (Exception e) {
-			log.error("tearDown failed: ", e);
-		}
+		// now make sure the reference was deleted
+
+		List<ReferenceImpl> norefs = referenceManager.getReferences(oressource);
+		assertTrue("reference should now be deleted", norefs.isEmpty());
 	}
+	
 }
\ No newline at end of file