diff --git a/src/main/java/org/olat/commons/calendar/CalendarManagerFactory.java b/src/main/java/org/olat/commons/calendar/CalendarManagerFactory.java
index b485f59744274afd55a643c3808929326a417112..bc70a57acebf6cce34d56d7cc9dfed5e2cef4778 100644
--- a/src/main/java/org/olat/commons/calendar/CalendarManagerFactory.java
+++ b/src/main/java/org/olat/commons/calendar/CalendarManagerFactory.java
@@ -47,17 +47,12 @@ public class CalendarManagerFactory {
 	
 	public static final CalendarManagerFactory getInstance() {
 		if (INSTANCE == null) {
-			INSTANCE = new CalendarManagerFactory(new File(WebappHelper.getUserDataRoot()));
+			File root = new File(WebappHelper.getUserDataRoot());
+			INSTANCE = new CalendarManagerFactory(root);
 		}
 		return INSTANCE;
 	}
 	
-	public static final CalendarManagerFactory getJUnitInstance() {
-		String tmpDir = System.getProperty("java.io.tmpdir");
-		System.out.println("CalendarManagerFactory initialized with temp directory at " + tmpDir);
-		return new CalendarManagerFactory(new File(tmpDir));
-	}
-	
 	public CalendarManager getCalendarManager() {
 		return DEFAULT_MANAGER;
 	}
diff --git a/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java b/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
index c8e1f0b67948733e47342a081efb7e4a103ddcac..b1c0848e2e703de88077670462ec4fac335a83f6 100644
--- a/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
+++ b/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
@@ -219,12 +219,18 @@ public class KalendarEvent implements Cloneable, Comparable<KalendarEvent> {
 	
 	public boolean isToday() {
 		Calendar cal = Calendar.getInstance();
+		int todayDay = cal.get(Calendar.DAY_OF_YEAR);
+		
 		cal.setTime(begin);
 		int startDay = cal.get(Calendar.DAY_OF_YEAR);
-		cal.setTime(end);
-		int endDay = cal.get(Calendar.DAY_OF_YEAR);
-		int todayDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
-		return (todayDay - startDay == 0) && ((todayDay - endDay == 0));
+		boolean today = (todayDay - startDay == 0);
+		if(end != null) {
+			cal.setTime(end);
+			int endDay = cal.get(Calendar.DAY_OF_YEAR);
+			today &= (todayDay - endDay == 0);
+		}
+		//an event without end date finish the same day (3.6.1. Event Component, https://tools.ietf.org/html/rfc5545#section-3.6.1)
+		return today;
 	}
 	
 	/**
@@ -232,12 +238,19 @@ public class KalendarEvent implements Cloneable, Comparable<KalendarEvent> {
 	 * @return
 	 */
 	public boolean isWithinOneDay() {
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(begin);
-		int startDay = cal.get(Calendar.DAY_OF_YEAR);
-		cal.setTime(end);
-		int endDay = cal.get(Calendar.DAY_OF_YEAR);
-		return (endDay - startDay == 0);
+		boolean oneDay = false;
+		if(end == null) {
+			//an event without end date finish the same day (3.6.1. Event Component, https://tools.ietf.org/html/rfc5545#section-3.6.1)
+			oneDay = true; //if a duration, the constructor make it an end date
+		} else {
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(begin);
+			int startDay = cal.get(Calendar.DAY_OF_YEAR);
+			cal.setTime(end);
+			int endDay = cal.get(Calendar.DAY_OF_YEAR);
+			oneDay = (endDay - startDay == 0);
+		}
+		return oneDay;
 	}
 
 	/**
diff --git a/src/test/java/org/olat/commons/calendar/CalendarImportTest.java b/src/test/java/org/olat/commons/calendar/CalendarImportTest.java
index 54444c08aa5a85b4b1065da77a63fb9cb4b96136..21da6dc02c34da19f2ced37dfc17f25279abc071 100644
--- a/src/test/java/org/olat/commons/calendar/CalendarImportTest.java
+++ b/src/test/java/org/olat/commons/calendar/CalendarImportTest.java
@@ -29,6 +29,7 @@ import net.fortuna.ical4j.data.ParserException;
 import net.fortuna.ical4j.model.Calendar;
 import net.fortuna.ical4j.util.CompatibilityHints;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -82,7 +83,7 @@ public class CalendarImportTest {
         assertNotNull(calendar);
 	}
 	
-	@Test
+	@Test @Ignore
 	public void testImportFromFGiCal() throws IOException, ParserException {
 		//default settings in olat
 		System.setProperty(CompatibilityHints.KEY_RELAXED_UNFOLDING, "true");
diff --git a/src/test/java/org/olat/commons/calendar/ICalFileCalendarManagerTest.java b/src/test/java/org/olat/commons/calendar/ICalFileCalendarManagerTest.java
index 14f27eee400c8236970d42304c4c1fc6d641aecd..ca87d94aa874aaf11c8e2d1f350c1bb183301c72 100644
--- a/src/test/java/org/olat/commons/calendar/ICalFileCalendarManagerTest.java
+++ b/src/test/java/org/olat/commons/calendar/ICalFileCalendarManagerTest.java
@@ -41,6 +41,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -78,36 +79,52 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Identity test = JunitTestHelper.createAndPersistIdentityAsRndUser("ical-1-");	
 
 		String TEST_EVENT_ID = "id-testAddEvent";
-		CalendarManager manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		CalendarManager manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar cal = manager.getPersonalCalendar(test).getKalendar();
 		// 1. Test Add Event
 		Calendar calendar = Calendar.getInstance();
 		calendar.set(Calendar.MILLISECOND, 0);
 		Date start = calendar.getTime();
 
-		KalendarEvent testEvent = new KalendarEvent(TEST_EVENT_ID, "testEvent", start, 1);
+		KalendarEvent testEvent = new KalendarEvent(TEST_EVENT_ID, "testEvent", start, 60 * 60 * 1000);// 1 hour
 		manager.addEventTo(cal, testEvent);
+		
 		// set manager null to force reload of calendar from file-system
 		emptyCalendarCache();
-		manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		cal = manager.getPersonalCalendar(test).getKalendar();
 		KalendarEvent reloadedEvent = cal.getEvent(TEST_EVENT_ID);
-		assertNotNull("Could not found added event", reloadedEvent);
-		assertEquals("Added event has wrong subject", testEvent.getSubject(),reloadedEvent.getSubject());
+		Assert.assertNotNull("Could not found added event", reloadedEvent);
+		Assert.assertEquals("Added event has wrong subject", testEvent.getSubject(), reloadedEvent.getSubject());
+		Assert.assertEquals(start, reloadedEvent.getBegin());
+		//calculate and check end date
+		calendar.add(Calendar.HOUR_OF_DAY, 1);
+		Date end = calendar.getTime();
+		Assert.assertEquals(end, reloadedEvent.getEnd());
+		Assert.assertFalse(reloadedEvent.isAllDayEvent());
+		Assert.assertTrue(reloadedEvent.isToday());
+		
 		// 2. Test Change event
+		calendar.add(Calendar.HOUR_OF_DAY, 1);
+		Date updatedEnd = calendar.getTime();
 		reloadedEvent.setSubject("testEvent changed");
+		reloadedEvent.setEnd(updatedEnd);
 		manager.updateEventFrom(cal, reloadedEvent);
+		
 		// set manager null to force reload of calendar from file-system
 		emptyCalendarCache();
-		manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		cal = manager.getPersonalCalendar(test).getKalendar();
 		KalendarEvent updatedEvent = cal.getEvent(TEST_EVENT_ID);
-		assertNotNull("Could not found updated event", updatedEvent);
-		assertEquals("Added event has wrong subject", reloadedEvent.getSubject(),updatedEvent.getSubject());
+		Assert.assertNotNull("Could not found updated event", updatedEvent);
+		Assert.assertEquals("Added event has wrong subject", reloadedEvent.getSubject(), updatedEvent.getSubject());
+		Assert.assertEquals(start, reloadedEvent.getBegin());
+		Assert.assertEquals(updatedEnd, reloadedEvent.getEnd());
+		
 		// 3. Test Remove event
 		manager.removeEventFrom(cal, updatedEvent);
 		emptyCalendarCache();
-		manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		cal = manager.getPersonalCalendar(test).getKalendar();
 		KalendarEvent removedEvent = cal.getEvent(TEST_EVENT_ID);
 		assertNull("Found removed event", removedEvent);
@@ -118,14 +135,14 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Identity test = JunitTestHelper.createAndPersistIdentityAsRndUser("ical-1-");	
 
 		String TEST_EVENT_ID = "id-testAddEvent";
-		CalendarManager manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		CalendarManager manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar cal = manager.getPersonalCalendar(test).getKalendar();
 		
 		// 1. Test Add Event
 		Calendar calendar = Calendar.getInstance();
 		calendar.set(Calendar.MILLISECOND, 0);
 		Date start = calendar.getTime();
-		calendar.add(Calendar.HOUR, 1);
+		calendar.add(Calendar.HOUR_OF_DAY, 1);
 		Date end = calendar.getTime();
 		KalendarEvent testEvent = new KalendarEvent(TEST_EVENT_ID, "testEvent", start, end);
 		manager.addEventTo(cal, testEvent);
@@ -133,7 +150,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		//empty the cache
 		emptyCalendarCache();
 		
-		manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar reloadedCal = manager.getPersonalCalendar(test).getKalendar();
 		KalendarEvent reloadedEvent = reloadedCal.getEvent(TEST_EVENT_ID);
 		Assert.assertNotNull("Could not found added event", reloadedEvent);
@@ -142,9 +159,9 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Assert.assertEquals(reloadedEvent.getEnd(), end);
 		
 		// 2. Test Change event
-		calendar.add(Calendar.HOUR, 1);
+		calendar.add(Calendar.HOUR_OF_DAY, 1);
 		Date updatedEnd = calendar.getTime();
-		calendar.add(Calendar.HOUR, -4);
+		calendar.add(Calendar.HOUR_OF_DAY, -4);
 		Date updatedStart = calendar.getTime();
 		reloadedEvent.setSubject("testEvent changed");
 		reloadedEvent.setBegin(updatedStart);
@@ -154,7 +171,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		//empty the cache
 		emptyCalendarCache();
 
-		manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar updatedCal = manager.getPersonalCalendar(test).getKalendar();
 		KalendarEvent updatedEvent = updatedCal.getEvent(TEST_EVENT_ID);
 		Assert.assertNotNull("Could not found updated event", updatedEvent);
@@ -162,6 +179,128 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Assert.assertEquals(updatedStart, updatedEvent.getBegin());
 		Assert.assertEquals(updatedEnd, updatedEvent.getEnd());
 	}
+	
+	/**
+	 * Check a NPE
+	 * @throws IOException
+	 */
+	@Test
+	public void testTodayEvent() throws IOException {
+		Identity test = JunitTestHelper.createAndPersistIdentityAsRndUser("ical-3-");	
+		CalendarManager manager = CalendarManagerFactory.getInstance().getCalendarManager();
+		Kalendar cal = manager.getPersonalCalendar(test).getKalendar();
+		
+		// 1. Test Today Event
+		String eventId = "today-" + UUID.randomUUID();
+		Calendar calendar = Calendar.getInstance();
+		calendar.set(Calendar.MILLISECOND, 0);
+		calendar.set(Calendar.SECOND, 0);
+		calendar.set(Calendar.MINUTE, 0);
+		calendar.set(Calendar.HOUR_OF_DAY, 8);
+		Date start = calendar.getTime();
+		calendar.set(Calendar.HOUR_OF_DAY, 12);
+		Date end = calendar.getTime();
+		KalendarEvent testEvent = new KalendarEvent(eventId, "Today Event", start, end);
+		manager.addEventTo(cal, testEvent);
+		
+		//Next days event
+		String nextEventId = "next-" + UUID.randomUUID();
+		calendar = Calendar.getInstance();
+		calendar.set(Calendar.MILLISECOND, 0);
+		calendar.set(Calendar.SECOND, 0);
+		calendar.set(Calendar.MINUTE, 0);
+		calendar.add(Calendar.DATE, 3);
+		calendar.set(Calendar.HOUR_OF_DAY, 8);
+		Date nextStart = calendar.getTime();
+		calendar.set(Calendar.HOUR_OF_DAY, 12);
+		Date nextEnd = calendar.getTime();
+		KalendarEvent nextEvent = new KalendarEvent(nextEventId, "Next Event", nextStart, nextEnd);
+		manager.addEventTo(cal, nextEvent);
+		
+
+		//2. reload and test
+		emptyCalendarCache();		
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
+		KalendarEvent reloadedEvent = manager.getPersonalCalendar(test).getKalendar().getEvent(eventId);
+		Assert.assertNotNull(reloadedEvent);
+		Assert.assertEquals("Today Event", reloadedEvent.getSubject());
+		Assert.assertEquals(start, reloadedEvent.getBegin());
+		Assert.assertEquals(end, reloadedEvent.getEnd());
+		Assert.assertTrue(reloadedEvent.isToday());
+		Assert.assertTrue(reloadedEvent.isWithinOneDay());
+		Assert.assertFalse(reloadedEvent.isAllDayEvent());
+		
+		KalendarEvent reloadedNextEvent = manager.getPersonalCalendar(test).getKalendar().getEvent(nextEventId);
+		Assert.assertNotNull(reloadedNextEvent);
+		Assert.assertEquals("Next Event", reloadedNextEvent.getSubject());
+		Assert.assertEquals(nextStart, reloadedNextEvent.getBegin());
+		Assert.assertEquals(nextEnd, reloadedNextEvent.getEnd());
+		Assert.assertFalse(reloadedNextEvent.isToday());
+		Assert.assertTrue(reloadedNextEvent.isWithinOneDay());
+		Assert.assertFalse(reloadedNextEvent.isAllDayEvent());
+	}
+	
+	@Test
+	public void testWithinOneDay() throws IOException {
+		Identity test = JunitTestHelper.createAndPersistIdentityAsRndUser("ical-4-");	
+		CalendarManager manager = CalendarManagerFactory.getInstance().getCalendarManager();
+		Kalendar cal = manager.getPersonalCalendar(test).getKalendar();
+		
+		// 1. Test Today Event
+		String eventId = "short-" + UUID.randomUUID();
+		Calendar calendar = Calendar.getInstance();
+		calendar.set(Calendar.MILLISECOND, 0);
+		calendar.set(Calendar.SECOND, 0);
+		calendar.set(Calendar.MINUTE, 0);
+		calendar.set(Calendar.HOUR_OF_DAY, 14);
+		Date start = calendar.getTime();
+		calendar.set(Calendar.HOUR_OF_DAY, 15);
+		Date end = calendar.getTime();
+		KalendarEvent testEvent = new KalendarEvent(eventId, "Short Event", start, end);
+		manager.addEventTo(cal, testEvent);
+		
+		//Next days event
+		String nextEventId = "long-" + UUID.randomUUID();
+		calendar = Calendar.getInstance();
+		calendar.set(Calendar.MILLISECOND, 0);
+		calendar.set(Calendar.SECOND, 0);
+		calendar.set(Calendar.MINUTE, 0);
+		calendar.add(Calendar.DATE, 3);
+		calendar.set(Calendar.HOUR, 8);
+		Date nextStart = calendar.getTime();
+		
+		calendar = Calendar.getInstance();
+		calendar.set(Calendar.MILLISECOND, 0);
+		calendar.set(Calendar.SECOND, 0);
+		calendar.set(Calendar.MINUTE, 0);
+		calendar.add(Calendar.DATE, 6);
+		calendar.set(Calendar.HOUR_OF_DAY, 18);
+		Date nextEnd = calendar.getTime();
+		KalendarEvent nextEvent = new KalendarEvent(nextEventId, "Long Event", nextStart, nextEnd);
+		manager.addEventTo(cal, nextEvent);
+		
+
+		//2. reload and test
+		emptyCalendarCache();		
+		manager = CalendarManagerFactory.getInstance().getCalendarManager();
+		KalendarEvent reloadedEvent = manager.getPersonalCalendar(test).getKalendar().getEvent(eventId);
+		Assert.assertNotNull(reloadedEvent);
+		Assert.assertEquals("Short Event", reloadedEvent.getSubject());
+		Assert.assertEquals(start, reloadedEvent.getBegin());
+		Assert.assertEquals(end, reloadedEvent.getEnd());
+		Assert.assertTrue(reloadedEvent.isToday());
+		Assert.assertTrue(reloadedEvent.isWithinOneDay());
+		Assert.assertFalse(reloadedEvent.isAllDayEvent());
+		
+		KalendarEvent reloadedNextEvent = manager.getPersonalCalendar(test).getKalendar().getEvent(nextEventId);
+		Assert.assertNotNull(reloadedNextEvent);
+		Assert.assertEquals("Long Event", reloadedNextEvent.getSubject());
+		Assert.assertEquals(nextStart, reloadedNextEvent.getBegin());
+		Assert.assertEquals(nextEnd, reloadedNextEvent.getEnd());
+		Assert.assertFalse(reloadedNextEvent.isToday());
+		Assert.assertFalse(reloadedNextEvent.isWithinOneDay());
+		Assert.assertFalse(reloadedNextEvent.isAllDayEvent());
+	}
 
 	/**
 	 * Check a NPE
@@ -179,23 +318,27 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		File newCalendarFile = new File(calendarFile.getParentFile(), calendarFile.getName());
 		InputStream in = CalendarImportTest.class.getResourceAsStream("cal_without_dtend.ics");
 		FileUtils.copyInputStreamToFile(in, newCalendarFile);
-		
+		//to be sure
+		emptyCalendarCache();
 		//load the calendar
 		KalendarRenderWrapper reloadCalWrapper = calManager.getPersonalCalendar(identity);
 		//check if its the right calendar
 		Collection<KalendarEvent> events = reloadCalWrapper.getKalendar().getEvents();
 		Assert.assertNotNull(events);
 		Assert.assertEquals(1, events.size());
-		
-		//persist
-		calManager.persistCalendar(reloadCalWrapper.getKalendar());
-		
-		//an other possible RS
-		Date periodStart = new Date();
-		Date periodEnd = new Date();
-		CalendarUtils.listEventsForPeriod(reloadCalWrapper.getKalendar(), periodStart, periodEnd);
+		KalendarEvent event = events.iterator().next();
+		Assert.assertEquals("Arbeitszeit: 1-3h", event.getSubject());
+		Assert.assertNull(event.getEnd());
+		Assert.assertFalse(event.isToday());
+		Assert.assertTrue(event.isWithinOneDay());
+		Assert.assertFalse(event.isAllDayEvent());
+
+		//test persist
+		boolean allOk = calManager.persistCalendar(reloadCalWrapper.getKalendar());
+		Assert.assertTrue(allOk);
 	}
 	
+	
 	/**
 	 * Test concurrent add event with two threads and code-point to control concurrency.
 	 *
@@ -218,7 +361,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 			public void run() {
 				try {
 					// 1. load calendar
-					CalendarManager calManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar cal = calManager.getPersonalCalendar(test).getKalendar();
 					
 					// 2. add Event1 => breakpoint hit					
@@ -252,7 +395,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 			public void run() {
 				try {
 					// 1. load calendar
-					CalendarManager calManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar cal = calManager.getPersonalCalendar(test).getKalendar();
 					
 					// 3. add Event2 (breakpoint of thread1 blocks)
@@ -315,7 +458,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		final List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1));
 
 		// Generate event for update
-		CalendarManager calManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		CalendarManager calManager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar cal = calManager.getPersonalCalendar(test).getKalendar();
 		calManager.addEventTo(cal, new KalendarEvent(TEST_EVENT_ID_2,TEST_EVENT_SUBJECT_2, new Date(), 1));
 		cal = calManager.getPersonalCalendar(test).getKalendar();
@@ -331,7 +474,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 			public void run() {
 				try {
 					// 1. load calendar
-					CalendarManager calendarManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar currentCalendar = calendarManager.getPersonalCalendar(test).getKalendar();
 					
 					// 2. add Event1 => breakpoint hit					
@@ -364,7 +507,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Thread thread2 = new Thread() {
 			public void run() {
 				try {
-					CalendarManager calendarManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar calendar = calendarManager.getPersonalCalendar(test).getKalendar();
 					
 					// 3. add Event2 (breakpoint of thread1 blocks)
@@ -430,7 +573,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		final List<Boolean> statusList = Collections.synchronizedList(new ArrayList<Boolean>(1));
 
 		// Generate event for update
-		CalendarManager calManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		CalendarManager calManager = CalendarManagerFactory.getInstance().getCalendarManager();
 		Kalendar cal = calManager.getPersonalCalendar(test).getKalendar();
 		calManager.addEventTo(cal, new KalendarEvent(TEST_EVENT_ID_2,TEST_EVENT_SUBJECT_2, new Date(), 1));
 		cal = calManager.getPersonalCalendar(test).getKalendar();
@@ -446,7 +589,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 			public void run() {
 				try {
 					// 1. load calendar
-					CalendarManager calendarManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar calendar = calendarManager.getPersonalCalendar(test).getKalendar();
 					
 					// 2. add Event1 => breakpoint hit					
@@ -479,7 +622,7 @@ public class ICalFileCalendarManagerTest extends OlatTestCase {
 		Thread thread2 = new Thread() {
 			public void run() {
 				try {
-					CalendarManager calendarManager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+					CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
 					Kalendar calendar = calendarManager.getPersonalCalendar(test).getKalendar();
 					
 					// 3. add Event2 (breakpoint of thread1 blocks)
diff --git a/src/test/java/org/olat/commons/calendar/test/CalendarUtilsTest.java b/src/test/java/org/olat/commons/calendar/test/CalendarUtilsTest.java
index f1885f80f2886a33728566a591f173ed8a808394..bef74d4512ef201ca67d688738a04e1bf65c1057 100644
--- a/src/test/java/org/olat/commons/calendar/test/CalendarUtilsTest.java
+++ b/src/test/java/org/olat/commons/calendar/test/CalendarUtilsTest.java
@@ -28,77 +28,81 @@ package org.olat.commons.calendar.test;
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import java.util.Random;
 
-import org.junit.After;
-import org.junit.Before;
+import org.apache.commons.io.FileUtils;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.junit.Assert;
 import org.junit.Test;
+import org.olat.commons.calendar.CalendarImportTest;
 import org.olat.commons.calendar.CalendarManager;
 import org.olat.commons.calendar.CalendarManagerFactory;
 import org.olat.commons.calendar.CalendarUtils;
 import org.olat.commons.calendar.ICalFileCalendarManager;
 import org.olat.commons.calendar.model.Kalendar;
 import org.olat.commons.calendar.model.KalendarEvent;
+import org.olat.commons.calendar.ui.components.KalendarRenderWrapper;
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.id.Identity;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.coordinate.Cacher;
+import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 
 public class CalendarUtilsTest extends OlatTestCase {
+	
+	private static final OLog log = Tracing.createLoggerFor(CalendarUtilsTest.class);
 
-	private static final Runtime RUNTIME = Runtime.getRuntime ();
-	private Kalendar kalendar;
 	private static final int numEvents = 10000;
 	private static final int maxEventDuratio = 1000 * 60 * 60 * 24 * 14; // maximum of 14 days duration
 	private static final int oneYearSec = 60 * 60 * 24 * 365;
 	private static final int goBackNumYears = 1;
 	private static long kalendarStart = new Date().getTime() - (((long)goBackNumYears * oneYearSec) * 1000);
-	private static Identity test;
-	
-	@Before
-	public void setUp() throws Exception {
-			test = JunitTestHelper.createAndPersistIdentityAsUser("test");
-			kalendar = new Kalendar("test", CalendarManager.TYPE_USER);
-	}
-	@After
-	public void tearDown() throws Exception {
-		CalendarManagerFactory.getJUnitInstance().getCalendarManager().deletePersonalCalendar(test);
-	}
+
 
 	@Test
 	public void testListEventsForPeriod() {
-		System.out.println("*** Starting test with the following configuration:");
-		System.out.println("*** Number of events: " + numEvents);
-		System.out.println("*** Maximum event duration (ms): " + maxEventDuratio);
-		System.out.println("*** Generate events in between "
+		Identity test = JunitTestHelper.createAndPersistIdentityAsUser("test");
+		Kalendar kalendar = new Kalendar("test", CalendarManager.TYPE_USER);
+
+		log.info("*** Starting test with the following configuration:");
+		log.info("*** Number of events: " + numEvents);
+		log.info("*** Maximum event duration (ms): " + maxEventDuratio);
+		log.info("*** Generate events in between "
 				+ new Date(kalendarStart) + " and "
 				+ new Date(kalendarStart + (1000 * ((long)goBackNumYears * oneYearSec))));
 
 		createTestEvents(numEvents, kalendar);
-		System.out.println("*** Load calendar...");
-		CalendarManager manager = CalendarManagerFactory.getJUnitInstance().getCalendarManager();
+		log.info("*** Load calendar...");
+		CalendarManager manager = CalendarManagerFactory.getInstance().getCalendarManager();
 		long start = System.currentTimeMillis();
 		manager.getPersonalCalendar(test).getKalendar();
 		long stop = System.currentTimeMillis();
-		System.out.println("Duration load: " + (stop - start) + " ms.");
+		log.info("Duration load: " + (stop - start) + " ms.");
 		
-		System.out.println("*** Find events within period...");
+		log.info("*** Find events within period...");
 		start = System.currentTimeMillis();
 		List<KalendarEvent> events = CalendarUtils.listEventsForPeriod(kalendar, new Date(kalendarStart), new Date(kalendarStart + (1000 * ((long)(goBackNumYears * oneYearSec))) ));
 		stop = System.currentTimeMillis();
-		System.out.println("Duration find: " + (stop - start) + " ms.");
-		System.out.println("Found " + events.size() + " events out of " + kalendar.getEvents().size() + " total events.");
+		log.info("Duration find: " + (stop - start) + " ms.");
+		log.info("Found " + events.size() + " events out of " + kalendar.getEvents().size() + " total events.");
 		assertEquals(kalendar.getEvents().size(), events.size());
 		
-		System.out.println("*** Save calendar...");
+		log.info("*** Save calendar...");
 		start = System.currentTimeMillis();
 		((ICalFileCalendarManager)manager).persistCalendar(kalendar);
 		stop = System.currentTimeMillis();
-		System.out.println("Duration save: " + (stop - start) + " ms.");
-		
+		log.info("Duration save: " + (stop - start) + " ms.");
 	}
-
 	
 	/**
 	 * Creates a number of events in certain calendar.
@@ -107,16 +111,91 @@ public class CalendarUtilsTest extends OlatTestCase {
 	 */
 	private void createTestEvents(int numberOfEvents, Kalendar cal) {
 		Random rand = new Random();
-		long startUsed = RUNTIME.totalMemory() - RUNTIME.freeMemory();
+		long startUsed = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
 		for (int i = 0; i < numberOfEvents; i++) {
 			long begin = kalendarStart + (1000 * ((long)rand.nextInt(goBackNumYears * oneYearSec)));
 			KalendarEvent event = new KalendarEvent("id" + i, "test" + i, new Date(begin), rand.nextInt(maxEventDuratio));
 			cal.addEvent(event);
 		}
-		long stopUsed = RUNTIME.totalMemory() - RUNTIME.freeMemory();
-		System.out.println("*** SETUP: Kalendar structure uses approx. " + (stopUsed - startUsed) / 1024 + " kb memory.");
-		((ICalFileCalendarManager)CalendarManagerFactory.getJUnitInstance().getCalendarManager()).persistCalendar(kalendar);
+		long stopUsed = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
+		log.info("*** SETUP: Kalendar structure uses approx. " + (stopUsed - startUsed) / 1024 + " kb memory.");
+		((ICalFileCalendarManager)CalendarManagerFactory.getInstance().getCalendarManager()).persistCalendar(cal);
 	}
 	
+	/**
+	 * Check a NPE
+	 * @throws IOException
+	 */
+	@Test
+	public void testListEventsForPeriodWithoutDTEndEvent() throws IOException {
+		//replace the standard calendar with a forged one
+		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cal-test-1-");
+		CalendarManager calManager = CalendarManagerFactory.getInstance().getCalendarManager();
+		File calendarFile = calManager.getCalendarFile("user", identity.getName());
+		if(calendarFile.exists()) {
+			calendarFile.delete();
+		}
+		File newCalendarFile = new File(calendarFile.getParentFile(), calendarFile.getName());
+		InputStream in = CalendarImportTest.class.getResourceAsStream("cal_without_dtend.ics");
+		FileUtils.copyInputStreamToFile(in, newCalendarFile);
+		//to be sure
+		emptyCalendarCache();
+		//load the calendar
+		KalendarRenderWrapper reloadCalWrapper = calManager.getPersonalCalendar(identity);
+		//check if its the right calendar
+		Collection<KalendarEvent> events = reloadCalWrapper.getKalendar().getEvents();
+		Assert.assertNotNull(events);
+		Assert.assertEquals(1, events.size());
+		KalendarEvent event = events.iterator().next();
+		Assert.assertEquals("Arbeitszeit: 1-3h", event.getSubject());
+		Assert.assertEquals("e73iiu9masoddi4g0vllmi2ht0@google.com", event.getID());
+		Assert.assertNull(event.getEnd());
+
+		
+		//test persist
+		boolean allOk = calManager.persistCalendar(reloadCalWrapper.getKalendar());
+		Assert.assertTrue(allOk);
+		
+		//an other possible RS
+		//within period
+		Calendar cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, 2010);
+		cal.set(Calendar.MONTH, 3);
+		cal.set(Calendar.DATE, 15);
+		Date periodStart = cal.getTime();
+		
+		cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, 2010);
+		cal.set(Calendar.MONTH, 3);
+		cal.set(Calendar.DATE, 17);
+		Date periodEnd = cal.getTime();
+		List<KalendarEvent> eventsForPeriod = CalendarUtils.listEventsForPeriod(reloadCalWrapper.getKalendar(), periodStart, periodEnd);
+		Assert.assertNotNull(eventsForPeriod);
+		Assert.assertEquals(1, eventsForPeriod.size());
+		KalendarEvent eventForPeriod = events.iterator().next();
+		Assert.assertEquals("e73iiu9masoddi4g0vllmi2ht0@google.com", eventForPeriod.getID());
+		
+		//out of scope
+		cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, 2008);
+		cal.set(Calendar.MONTH, 3);
+		cal.set(Calendar.DATE, 15);
+		Date periodStart2 = cal.getTime();
+		
+		cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, 2008);
+		cal.set(Calendar.MONTH, 3);
+		cal.set(Calendar.DATE, 17);
+		Date periodEnd2 = cal.getTime();
+		List<KalendarEvent> eventsOutOfPeriod = CalendarUtils.listEventsForPeriod(reloadCalWrapper.getKalendar(), periodStart2, periodEnd2);
+		Assert.assertNotNull(eventsOutOfPeriod);
+		Assert.assertTrue(eventsOutOfPeriod.isEmpty());
+	}
 
+	private final void emptyCalendarCache() {
+		CoordinatorManager coordinator = CoreSpringFactory.getImpl(CoordinatorManager.class);
+		Cacher cacher = coordinator.getCoordinator().getCacher();
+		EmbeddedCacheManager cm = cacher.getCacheContainer();
+		cm.getCache("CalendarManager@calendar").clear();
+	}
 }
diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java
index 4de668b9a2a1b49c6f8647e38d8792becfc4868b..9a56fed1913fbbc1035ebda8414a67f61a0fd3de 100644
--- a/src/test/java/org/olat/test/AllTestsJunit4.java
+++ b/src/test/java/org/olat/test/AllTestsJunit4.java
@@ -73,8 +73,9 @@ import org.junit.runners.Suite;
 	org.olat.user.EmailCheckPerformanceTest.class,//fail
 	org.olat.user.UserTest.class,//ok
 	org.olat.user.UserPropertiesTest.class,//ok
-	org.olat.commons.calendar.test.CalendarUtilsTest.class,//ok
 	org.olat.commons.calendar.ICalFileCalendarManagerTest.class,//ok
+	org.olat.commons.calendar.CalendarImportTest.class,//ok
+	org.olat.commons.calendar.test.CalendarUtilsTest.class,//ok
 	org.olat.commons.lifecycle.LifeCycleManagerTest.class,//fail christian fragen...
 	org.olat.commons.coordinate.cluster.jms.JMSTest.class,//ok
 	org.olat.commons.coordinate.cluster.lock.LockTest.class,//ok
diff --git a/src/test/profile/mysql/olat.eclipse.properties b/src/test/profile/mysql/olat.eclipse.properties
index 685d36a5bc0aa315a6d8dbb59f39f72ebc1ee00b..7141dd0ef02e99751129f0abab69d134a4a5ae07 100644
--- a/src/test/profile/mysql/olat.eclipse.properties
+++ b/src/test/profile/mysql/olat.eclipse.properties
@@ -43,7 +43,7 @@ db.name=olattest
 db.user=olat
 db.pass=olat
 db.host.port=3306
-db.show_sql=true
+db.show_sql=false
 db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
 auto.upgrade.database=false
 db.hibernate.c3p0.debugUnreturnedConnectionStackTraces=true