diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index 497fbfc8b00eff815a46b1346bccdf546ec58f94..57572481fdfdc0b382c7898ca45067d405b85cbd 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -47,6 +47,18 @@ public class SessionController {
 		return null;
 	}
 	
+	@RequestMapping(value="/session", method=RequestMethod.POST)
+	public Session postNewSession(@RequestBody Session session, HttpServletResponse response) {
+		Session newSession = sessionService.saveSession(session);
+		if (session != null) {
+			response.setStatus(HttpStatus.CREATED.value());
+			return newSession;
+		}
+
+		response.setStatus(HttpStatus.SERVICE_UNAVAILABLE.value());
+		return null;
+	}
+	
 	@RequestMapping(value="/session/{sessionkey}/feedback", method=RequestMethod.GET)
 	public Feedback getFeedback(@PathVariable String sessionkey, HttpServletResponse response) {
 		Feedback feedback = sessionService.getFeedback(sessionkey);
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 2d6cf3bba4aa8418e81d7cb06ad1ec6616e06a71..bc5a680eec7d2d673985753600d7848edb4aa234 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -25,8 +25,10 @@ import de.thm.arsnova.entities.Session;
 public interface ISessionService {
 
 	public Session getSession(String keyword);
+	public Session saveSession(Session session);
 	public Feedback getFeedback(String keyword);
 	public boolean postFeedback(String keyword, int value);
 	public boolean sessionKeyAvailable(String keyword);
+	public String generateKeyword();
 	
 }
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index 66e595d95ca79c0a92a1574d68980bcc06952a8b..ff7897917c5430132a43448800ba92b11643dbf4 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -71,6 +71,25 @@ public class SessionService implements ISessionService {
 		
 		return null;
 	}
+	
+	@Override
+	public Session saveSession(Session session) {
+		
+		Document sessionDocument = new Document();
+		sessionDocument.put("type","session");
+		sessionDocument.put("name", session.getName());
+		sessionDocument.put("shortName", session.getShortName());
+		sessionDocument.put("keyword", this.generateKeyword());
+		sessionDocument.put("creator", this.actualUserName());
+		sessionDocument.put("active", true);
+		try {
+			database.saveDocument(sessionDocument);
+		} catch (IOException e) {
+			return null;
+		}
+		
+		return this.getSession(sessionDocument.getString("keyword"));
+	}
 
 	@Override
 	public Feedback getFeedback(String keyword) {
@@ -196,10 +215,13 @@ public class SessionService implements ISessionService {
 		return null;
 	}
 
+	@Override
 	public String generateKeyword() {
-		// Generates a number between >=low and <high, so our keyword has exactly 8 digits.
 		final int low = 10000000;
 		final int high = 100000000;
-		return String.valueOf((int)(Math.random() * (high - low) + low));
+		String keyword = String.valueOf((int)(Math.random() * (high - low) + low));
+		
+		if (this.sessionKeyAvailable(keyword)) return keyword;
+		return generateKeyword();
 	}
 }