diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 875b999c37a97d50ad1ec54f6769be7f6bc85a16..b2e63abd9e01fddddf7a0d306c459c53c0cc59de 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -2212,6 +2212,36 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		return false;
 	}
 
+	@Override
+	public boolean deleteInactiveUsers(long lastActivityBefore) {
+		try {
+			NovaView view = new NovaView("user/inactive_by_creation");
+			view.setEndKey(lastActivityBefore);
+			List<Document> results = this.getDatabase().view(view).getResults();
+
+			final List<Document> newDocs = new ArrayList<Document>();
+			for (Document oldDoc : results) {
+				final Document newDoc = new Document();
+				newDoc.setId(oldDoc.getId());
+				newDoc.setRev(oldDoc.getJSONObject("value").getString("_rev"));
+				newDoc.put("_deleted", true);
+				newDocs.add(newDoc);
+				LOGGER.debug("Marked user document {} for deletion.", oldDoc.getId());
+			}
+
+			if (newDocs.size() > 0) {
+				getDatabase().bulkSaveDocuments(newDocs.toArray(new Document[newDocs.size()]));
+				LOGGER.info("Deleted {} inactive users.", newDocs.size());
+			}
+
+			return true;
+		} catch (IOException e) {
+			LOGGER.error("Could not delete inactive users.");
+		}
+
+		return false;
+	}
+
 	@Override
 	public SessionInfo importSession(User user, ImportExportSession importSession) {
 		final Session session = this.saveSession(user, importSession.generateSessionEntity(user));
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index f5d2d2fb6af9bc0041e163a0586213cceb06a4d4..f1ed738724e9378a729998e945de8277915a3054 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -196,6 +196,8 @@ public interface IDatabaseDao {
 
 	boolean deleteUser(DbUser dbUser);
 
+	boolean deleteInactiveUsers(long lastActivityBefore);
+
 	CourseScore getLearningProgress(Session session);
 
 	List<SessionInfo> getMySessionsInfo(User user, final int start, final int limit);
diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java
index 37d054ca57bf40a15d4780c86c6418d7bd870d29..3ca5022eae0e182ccdd5a57e4d1bb82e8f20833a 100644
--- a/src/main/java/de/thm/arsnova/services/UserService.java
+++ b/src/main/java/de/thm/arsnova/services/UserService.java
@@ -56,15 +56,8 @@ import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 import java.io.UnsupportedEncodingException;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 
@@ -82,6 +75,9 @@ public class UserService implements IUserService {
 
 	private static final int PASSWORD_RESET_KEY_DURABILITY_MS = 2 * 60 * 60 * 1000;
 
+	private static final long ACTIVATION_KEY_CHECK_INTERVAL_MS = 30 * 60 * 1000L;
+	private static final long ACTIVATION_KEY_DURABILITY_MS = 6 * 60 * 60 * 1000L;
+
 	public static final Logger LOGGER = LoggerFactory.getLogger(UserService.class);
 
 	private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>();
@@ -161,6 +157,14 @@ public class UserService implements IUserService {
 		}
 	}
 
+	@Scheduled(fixedDelay = ACTIVATION_KEY_CHECK_INTERVAL_MS)
+	public void deleteInactiveUsers() {
+		LOGGER.info("Delete inactive users.");
+		long unixTime = System.currentTimeMillis();
+		long lastActivityBefore = unixTime - ACTIVATION_KEY_DURABILITY_MS;
+		databaseDao.deleteInactiveUsers(lastActivityBefore);
+	}
+
 	@Override
 	public User getCurrentUser() {
 		final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index c9bae3974ac242ad2b8cda3fb89a61ba839e40e6..675efb8a5bedaa4647105aa1fc3a805abfbb820d 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -458,6 +458,12 @@ public class StubDatabaseDao implements IDatabaseDao {
 		return false;
 	}
 
+	@Override
+	public boolean deleteInactiveUsers(long lastActivityBefore) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
 	@Override
 	public List<InterposedQuestion> getInterposedQuestions(Session session, User user, final int start, final int limit) {
 		// TODO Auto-generated method stub