diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index c59d5395704787c3eff64536e919b290215e60bf..8165a526e946aaf7289bfb796a5b378bb3790211 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -801,7 +801,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public Session updateSessionOwnerActivity(final Session session) {
 		try {
 			/* Do not clutter CouchDB. Only update once every 3 hours. */
-			if (session.getLastOwnerActivity() > System.currentTimeMillis() - 3 * 3600000) {
+			if (session.getLastOwnerActivity() > System.currentTimeMillis() - 60 * 1000) {
 				return session;
 			}
 
@@ -1677,11 +1677,32 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public void deleteSession(final Session session) {
 		try {
 			deleteDocument(session.get_id());
+			LOGGER.debug("Deleted session document {} and related data.", session.get_id());
 		} catch (final IOException e) {
 			LOGGER.error("Could not delete session {}", session);
 		}
 	}
 
+	@Override
+	public boolean deleteInactiveGuestSessions(long lastActivityBefore) {
+		NovaView view = new NovaView("session/by_last_activity_for_guests");
+		view.setEndKey(lastActivityBefore);
+		List<Document> results = this.getDatabase().view(view).getResults();
+
+		for (Document oldDoc : results) {
+			Session s = new Session();
+			s.set_id(oldDoc.getId());
+			s.set_rev(oldDoc.getJSONObject("value").getString("_rev"));
+			deleteSession(s);
+		}
+
+		if (results.size() > 0) {
+			LOGGER.info("Deleted {} inactive guest sessions.", results.size());
+		}
+
+		return false;
+	}
+
 	@Cacheable("lecturequestions")
 	@Override
 	public List<Question> getLectureQuestionsForUsers(final Session session) {
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index f1ed738724e9378a729998e945de8277915a3054..c8ccf8c3c3aa95c3eefd7091cf591be2a9380252 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -146,6 +146,8 @@ public interface IDatabaseDao {
 
 	void deleteSession(Session session);
 
+	boolean deleteInactiveGuestSessions(long lastActivityBefore);
+
 	List<Question> getLectureQuestionsForUsers(Session session);
 
 	List<Question> getLectureQuestionsForTeachers(Session session);
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 373f78d27b5ce813c0d374e0ca735ec17d954386..7b6c742068adb955a7e43845ac1ab90a88f7227d 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -91,6 +91,8 @@ public interface ISessionService {
 	SessionFeature changeSessionFeatures(String sessionkey, SessionFeature features);
 
 	boolean lockFeedbackInput(String sessionkey, Boolean lock);
-	
+
 	boolean flipFlashcards(String sessionkey, Boolean flip);
+
+	void deleteInactiveSessions();
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index e2c4b94a80392acbe452cfc880c0a1638c30a7bd..378684fc20720b154292d4547dc1e4eff10c96c1 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -47,6 +47,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 
@@ -98,6 +99,9 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 		}
 	}
 
+	private static final long SESSION_INACTIVITY_CHECK_INTERVAL_MS = 60 * 1000L; // 30 * 60 * 1000L;
+	private static final long SESSION_INACTIVITY_THRESHOLD_MS = 3 * 60 * 1000L; // 90 * 24 * 60 * 60 * 1000L;
+
 	@Autowired
 	private IDatabaseDao databaseDao;
 
@@ -123,6 +127,14 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(SessionService.class);
 
+	@Scheduled(fixedDelay = SESSION_INACTIVITY_CHECK_INTERVAL_MS)
+	public void deleteInactiveSessions() {
+		LOGGER.info("Delete inactive sessions.");
+		long unixTime = System.currentTimeMillis();
+		long lastActivityBefore = unixTime - SESSION_INACTIVITY_THRESHOLD_MS;
+		databaseDao.deleteInactiveGuestSessions(lastActivityBefore);
+	}
+
 	public void setDatabaseDao(final IDatabaseDao newDatabaseDao) {
 		databaseDao = newDatabaseDao;
 	}
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 675efb8a5bedaa4647105aa1fc3a805abfbb820d..1a1c4c6688daa283a8b6f210d4309a6e1d5b69c7 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -345,6 +345,12 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 	}
 
+	@Override
+	public boolean deleteInactiveGuestSessions(long lastActivityBefore) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
 	@Override
 	public void deleteAllQuestionsWithAnswers(Session session) {
 		// TODO Auto-generated method stub