diff --git a/pom.xml b/pom.xml
index 897842bf55e13ca9c45dab99c143f2a70c92ab51..7699138070609225357fa41715d5df8d83406179 100644
--- a/pom.xml
+++ b/pom.xml
@@ -313,6 +313,12 @@
 			<version>2.25.0</version>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-all</artifactId>
+			<version>1.9.5</version>
+			<scope>test</scope>
+		</dependency>
 		<!-- 
 		<dependency>
 			<groupId>org.codehaus.groovy</groupId>
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index cbd791bb65e9644ccb7ca4503bb655e368f0c710..6d46ace9596a0a11ab8de143bce45c90349229b2 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -64,6 +64,13 @@ public class SessionController extends AbstractController {
 		return sessionService.joinSession(sessionkey);
 	}
 
+	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE)
+	@ResponseBody
+	public final void deleteSession(@PathVariable final String sessionkey) {
+		User user = userService.getCurrentUser();
+		sessionService.deleteSession(sessionkey, user);
+	}
+
 	@RequestMapping(value = "/{sessionkey}/online", method = RequestMethod.POST)
 	@ResponseBody
 	@ResponseStatus(HttpStatus.CREATED)
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 956a45ae16da68690c43c10058e42800d5841100..a48c1f0eae6e240f2062cca9194808cc835c7c8e 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -773,7 +773,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final void deleteQuestion(final Question question) {
+	public final void deleteQuestionWithAnswers(final Question question) {
 		try {
 			this.deleteAnswers(question);
 			this.deleteDocument(question.get_id());
@@ -1508,4 +1508,13 @@ public class CouchDBDao implements IDatabaseDao {
 		}
 		return null;
 	}
+
+	@Override
+	public void deleteSession(Session session) {
+		try {
+			this.deleteDocument(session.get_id());
+		} catch (IOException e) {
+			LOGGER.error("Could not delete 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 e9ce0c34e097af2c19596cdfc380fa524644b43b..72afe35aef7a11305700c3c69915b7c30fe3659e 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -68,7 +68,7 @@ public interface IDatabaseDao {
 
 	List<String> getQuestionIds(Session session, User user);
 
-	void deleteQuestion(Question question);
+	void deleteQuestionWithAnswers(Question question);
 
 	List<String> getUnAnsweredQuestionIds(Session session, User user);
 
@@ -135,4 +135,6 @@ public interface IDatabaseDao {
 	Session lockSession(Session session, Boolean lock);
 
 	List<String> getActiveUsers(int timeDifference);
+
+	void deleteSession(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 5687d1172bbc249d207eb0c62fff1cd586e087cb..7efe5e0491ac75935814e5b3af7c07b2822590ef 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -49,4 +49,6 @@ public interface ISessionService {
 	Session setActive(String sessionkey, Boolean lock);
 
 	Session joinSession(String keyword, UUID socketId);
+
+	void deleteSession(String sessionkey, User user);
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index 35ab9abc17410b6761223cf1a08ad5bb714f23c3..b1efb373be88e396240eec04d50eae175ab247aa 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -146,7 +146,7 @@ public class QuestionService implements IQuestionService {
 		if (user == null || session == null || !session.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
-		databaseDao.deleteQuestion(question);
+		databaseDao.deleteQuestionWithAnswers(question);
 	}
 	
 	@Override
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index a003462b49082e5841a85034c4989115860e6e37..1a4473b3f81de6dca9f56b6a98f12b9459c4038b 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -21,7 +21,6 @@ package de.thm.arsnova.services;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -36,6 +35,7 @@ import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.dao.IDatabaseDao;
 import de.thm.arsnova.entities.LoggedIn;
+import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.exceptions.ForbiddenException;
@@ -56,7 +56,7 @@ public class SessionService implements ISessionService {
 	@Autowired
 	private ARSnovaSocketIOServer socketIoServer;
 
-	@Autowired(required=false)
+	@Autowired(required = false)
 	private ConnectorClient connectorClient;
 
 	public void setDatabaseDao(final IDatabaseDao newDatabaseDao) {
@@ -117,26 +117,22 @@ public class SessionService implements ISessionService {
 		if (connectorClient == null) {
 			return mySessions;
 		}
-		
+
 		List<Session> courseSessions = databaseDao.getCourseSessions(
 			connectorClient.getCourses(user.getUsername()).getCourse()
 		);
-		
+
 		Map<String, Session> allAvailableSessions = new HashMap<String, Session>();
-		
+
 		for (Session session : mySessions) {
 			allAvailableSessions.put(session.get_id(), session);
 		}
-		
 		for (Session session : courseSessions) {
 			allAvailableSessions.put(session.get_id(), session);
 		}
-		
-		List<Session> result = new ArrayList<Session>(allAvailableSessions.values());
-		
-		return result;
+		return new ArrayList<Session>(allAvailableSessions.values());
 	}
-	
+
 	@Override
 	public final List<Session> getMyVisitedSessions(final User user) {
 		return databaseDao.getMyVisitedSessions(user);
@@ -152,7 +148,6 @@ public class SessionService implements ISessionService {
 				throw new ForbiddenException();
 			}
 		}
-		
 		return databaseDao.saveSession(session);
 	}
 
@@ -196,7 +191,7 @@ public class SessionService implements ISessionService {
 		Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		return databaseDao.countActiveUsers(session, since);
 	}
-	
+
 	public static class SessionNameComperator implements Comparator<Session>, Serializable {
 		private static final long serialVersionUID = 1L;
 
@@ -205,8 +200,8 @@ public class SessionService implements ISessionService {
 			return session1.getName().compareToIgnoreCase(session2.getName());
 		}
 	}
-	
-	public static class SessionShortNameComperator implements Comparator<Session>, Serializable{
+
+	public static class SessionShortNameComperator implements Comparator<Session>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
@@ -229,4 +224,17 @@ public class SessionService implements ISessionService {
 		Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		return databaseDao.lockSession(session, lock);
 	}
+
+	@Override
+	@Authenticated
+	public void deleteSession(String sessionkey, User user) {
+		Session session = databaseDao.getSession(sessionkey);
+		if (!session.isCreator(user)) {
+			throw new ForbiddenException();
+		}
+		for (Question q : databaseDao.getSkillQuestions(sessionkey)) {
+			databaseDao.deleteQuestionWithAnswers(q);
+		}
+		databaseDao.deleteSession(session);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index af6a51ffe93b340295441a699812c629fd7b3969..37750ff80cbf436768c341d0ff483e2a30e2e9ec 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -379,7 +379,7 @@ public class StubDatabaseDao implements IDatabaseDao {
 	}
 
 	@Override
-	public void deleteQuestion(Question question) {
+	public void deleteQuestionWithAnswers(Question question) {
 		// TODO Auto-generated method stub
 	}
 
@@ -432,4 +432,9 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		return null;
 	}
+
+	@Override
+	public void deleteSession(Session session) {
+		// TODO Auto-generated method stub
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
index f7c4a52f6628a93398d3601ce5ccc934a4bd7386..fa5500863772c3beb351c498c41e9939317ab932 100644
--- a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
@@ -22,14 +22,23 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
+
+import static org.mockito.Mockito.*;
+
 import org.junit.After;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.springframework.aop.framework.Advised;
+import org.springframework.aop.support.AopUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.util.ReflectionTestUtils;
 
+import de.thm.arsnova.dao.IDatabaseDao;
 import de.thm.arsnova.dao.StubDatabaseDao;
+import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.exceptions.UnauthorizedException;
@@ -55,7 +64,7 @@ public class SessionServiceTest {
 		databaseDao.cleanupTestData();
 		userService.setUserAuthenticated(false);
 	}
-
+	
 	@Test
 	public void testShouldGenerateSessionKeyword() {
 		System.out.println(sessionService.generateKeyword());
@@ -104,4 +113,37 @@ public class SessionServiceTest {
 		sessionService.saveSession(session);
 		assertNotNull(sessionService.joinSession("11111111"));
 	}
+
+	@Test
+	public void testShouldDeleteAllSessionData() {
+		userService.setUserAuthenticated(true);
+
+		Session session = new Session();
+		session.setCreator(userService.getCurrentUser().getUsername());
+		Question q1 = new Question();
+		Question q2 = new Question();
+
+		IDatabaseDao mockDatabase = mock(IDatabaseDao.class);
+		when(mockDatabase.getSkillQuestions(anyString())).thenReturn(Arrays.asList(q1, q2));
+		when(mockDatabase.getSession(anyString())).thenReturn(session);
+		ReflectionTestUtils.setField(getTargetObject(sessionService), "databaseDao", mockDatabase);
+
+		sessionService.deleteSession(session.getKeyword(), userService.getCurrentUser());
+
+		verify(mockDatabase).deleteQuestionWithAnswers(q1);
+		verify(mockDatabase).deleteQuestionWithAnswers(q2);
+		verify(mockDatabase).deleteSession(session);
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <T> T getTargetObject(Object proxy) {
+		if ((AopUtils.isJdkDynamicProxy(proxy))) {
+			try {
+				return (T) getTargetObject(((Advised) proxy).getTargetSource().getTarget());
+			} catch (Exception e) {
+				throw new RuntimeException("Failed to unproxy target.", e);
+			}
+		}
+		return (T) proxy;
+	}
 }
\ No newline at end of file