diff --git a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
index 4d8a7ed9289f6979627e961cd53ffe925b2aff60..30c13fac71a360f530639ff36fcb37d99de51123 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
@@ -39,36 +39,36 @@ public class CacheBusterImpl implements CacheBuster {
 	@CacheEvict(value = "statistics", allEntries = true)
 	@EventListener
 	public void handleAfterCommentCreation(final AfterCreationEvent<Comment> event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@EventListener
 	public void handleAfterCommentDeletion(final AfterDeletionEvent<Comment> event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "answerlists", key = "#event.content.id")
 	@EventListener
 	public void handleAfterAnswerCreation(final AfterCreationEvent<Answer> event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@EventListener
 	public void handleChangeScore(final ChangeScoreEvent event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@EventListener
 	public void handleAfterRoomCreation(final AfterCreationEvent<Room> event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@EventListener
 	public void handleAfterRoomDeletion(final AfterDeletionEvent<Room> event) {
-
+		/* Implementation provided by caching aspect. */
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
index fa9e37d23eb3a8e9439cce26c6c74cf6cec8f549..0db9518989c97f1d4e5cb093d03a79ef1da82487 100644
--- a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
+++ b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
@@ -41,49 +41,49 @@ public class ScheduledCacheBuster {
 	@CacheEvict(value = "rooms", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 25, fixedRate = 1000 * 60 * 60 * 6)
 	private void clearSessionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "contents", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 50, fixedRate = 1000 * 60 * 30)
 	private void clearQuestionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "contentlists", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 75, fixedRate = 1000 * 60 * 30)
 	private void clearSkillQuestionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "lecturecontentlists", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 100, fixedRate = 1000 * 60 * 30)
 	private void clearLectureQuestionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "preparationcontentlists", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 125, fixedRate = 1000 * 60 * 30)
 	private void clearPreparationQuestionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "flashcardcontentlists", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 150, fixedRate = 1000 * 60 * 30)
 	private void clearFlashcardQuestionCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "answerlists", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 175, fixedRate = 1000 * 60 * 15)
 	private void clearAnswerCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 	@CacheEvict(value = "score", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 200, fixedRate = 1000 * 60 * 15)
 	private void clearLearningProgressCache() {
-
+		/* Implementation provided by caching aspect. */
 	}
 
 }
diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java
index 1e992cb6dfbec9909b35417a56a4646f5b2ad3e6..5be42080de92e3dece36b1bb8ac671b7da660edb 100644
--- a/src/main/java/de/thm/arsnova/config/AppConfig.java
+++ b/src/main/java/de/thm/arsnova/config/AppConfig.java
@@ -22,9 +22,10 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.micrometer.core.instrument.MeterRegistry;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.lang.CharEncoding;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.PropertiesFactoryBean;
 import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
@@ -116,7 +117,7 @@ import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
 			"classpath:config/actuator.yml",
 			"file:${arsnova.config-dir:.}/application.yml"},
 		ignoreResourceNotFound = true,
-		encoding = "UTF-8",
+		encoding = CharEncoding.UTF_8,
 		factory = YamlPropertySourceFactory.class
 )
 @EnableConfigurationProperties(SystemProperties.class)
@@ -209,7 +210,7 @@ public class AppConfig implements WebMvcConfigurer {
 	@Bean
 	public StringHttpMessageConverter stringMessageConverter() {
 		final StringHttpMessageConverter messageConverter = new StringHttpMessageConverter();
-		messageConverter.setDefaultCharset(Charset.forName("UTF-8"));
+		messageConverter.setDefaultCharset(StandardCharsets.UTF_8);
 		messageConverter.setWriteAcceptCharset(false);
 		final List<MediaType> mediaTypes = new ArrayList<>();
 		mediaTypes.add(MediaType.TEXT_PLAIN);
diff --git a/src/main/java/de/thm/arsnova/config/SecurityConfig.java b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
index cb327b08e0ae5208230a5d6d3c7c4f530f144100..d35604377a0d1f412cf372a32b099c5efa3606c1 100644
--- a/src/main/java/de/thm/arsnova/config/SecurityConfig.java
+++ b/src/main/java/de/thm/arsnova/config/SecurityConfig.java
@@ -116,6 +116,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 	public static final String CAS_LOGIN_PATH_SUFFIX = "/auth/login/cas";
 	public static final String CAS_LOGOUT_PATH_SUFFIX = "/auth/logout/cas";
 	public static final String RUN_AS_KEY_PREFIX = "RUN_AS_KEY";
+	public static final String INTERNAL_PROVIDER_ID = "user-db";
+	public static final String LDAP_PROVIDER_ID = "ldap";
+	public static final String OIDC_PROVIDER_ID = "oidc";
+	public static final String CAS_PROVIDER_ID = "cas";
+	public static final String GOOGLE_PROVIDER_ID = "google";
+	public static final String TWITTER_PROVIDER_ID = "twitter";
+	public static final String FACEBOOK_PROVIDER_ID = "facebook";
 	private static final Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
 
 	private ServletContext servletContext;
@@ -250,32 +257,32 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 		auth.authenticationProvider(jwtAuthenticationProvider());
 		logger.info("oauthProps: {}", providerProperties.getOauth());
 		if (providerProperties.getLdap().stream().anyMatch(p -> p.isEnabled())) {
-			providers.add("ldap");
+			providers.add(LDAP_PROVIDER_ID);
 			auth.authenticationProvider(ldapAuthenticationProvider());
 		}
 		if (providerProperties.getCas().isEnabled()) {
-			providers.add("cas");
+			providers.add(CAS_PROVIDER_ID);
 			auth.authenticationProvider(casAuthenticationProvider());
 		}
 		if (providerProperties.getRegistered().isEnabled()) {
-			providers.add("user-db");
+			providers.add(INTERNAL_PROVIDER_ID);
 			auth.authenticationProvider(daoAuthenticationProvider());
 		}
 		if (providerProperties.getOidc().stream().anyMatch(p -> p.isEnabled())) {
-			providers.add("oidc");
+			providers.add(OIDC_PROVIDER_ID);
 		}
 		if (providerProperties.getOauth().values().stream().anyMatch(p -> p.isEnabled())) {
-			if (providerProperties.getOauth().containsKey("google")
-					&& providerProperties.getOauth().get("google").isEnabled()) {
-				providers.add("google");
+			if (providerProperties.getOauth().containsKey(GOOGLE_PROVIDER_ID)
+					&& providerProperties.getOauth().get(GOOGLE_PROVIDER_ID).isEnabled()) {
+				providers.add(GOOGLE_PROVIDER_ID);
 			}
-			if (providerProperties.getOauth().containsKey("facebook")
-					&& providerProperties.getOauth().get("facebook").isEnabled()) {
-				providers.add("facebook");
+			if (providerProperties.getOauth().containsKey(FACEBOOK_PROVIDER_ID)
+					&& providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID).isEnabled()) {
+				providers.add(FACEBOOK_PROVIDER_ID);
 			}
-			if (providerProperties.getOauth().containsKey("twitter")
-					&& providerProperties.getOauth().get("twitter").isEnabled()) {
-				providers.add("twitter");
+			if (providerProperties.getOauth().containsKey(TWITTER_PROVIDER_ID)
+					&& providerProperties.getOauth().get(TWITTER_PROVIDER_ID).isEnabled()) {
+				providers.add(TWITTER_PROVIDER_ID);
 			}
 			auth.authenticationProvider(oauthAuthenticationProvider());
 		}
@@ -513,16 +520,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 		if (providerProperties.getOidc().stream().anyMatch(p -> p.isEnabled())) {
 			clients.add(oidcClient());
 		}
-		if (providerProperties.getOauth().containsKey("facebook")
-				&& providerProperties.getOauth().get("facebook").isEnabled()) {
+		if (providerProperties.getOauth().containsKey(FACEBOOK_PROVIDER_ID)
+				&& providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID).isEnabled()) {
 			clients.add(facebookClient());
 		}
-		if (providerProperties.getOauth().containsKey("google")
-				&& providerProperties.getOauth().get("google").isEnabled()) {
+		if (providerProperties.getOauth().containsKey(GOOGLE_PROVIDER_ID)
+				&& providerProperties.getOauth().get(GOOGLE_PROVIDER_ID).isEnabled()) {
 			clients.add(googleClient());
 		}
-		if (providerProperties.getOauth().containsKey("twitter")
-				&& providerProperties.getOauth().get("twitter").isEnabled()) {
+		if (providerProperties.getOauth().containsKey(TWITTER_PROVIDER_ID)
+				&& providerProperties.getOauth().get(TWITTER_PROVIDER_ID).isEnabled()) {
 			clients.add(twitterClient());
 		}
 
@@ -559,7 +566,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
 	@Bean
 	public FacebookClient facebookClient() {
-		final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("facebook");
+		final AuthenticationProviderProperties.Oauth oauthProperties =
+				providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID);
 		final FacebookClient client = new FacebookClient(oauthProperties.getKey(), oauthProperties.getSecret());
 		client.setCallbackUrl(rootUrl + apiPath + OAUTH_CALLBACK_PATH_SUFFIX + "?client_name=FacebookClient");
 
@@ -568,7 +576,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
 	@Bean
 	public TwitterClient twitterClient() {
-		final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("twitter");
+		final AuthenticationProviderProperties.Oauth oauthProperties =
+				providerProperties.getOauth().get(TWITTER_PROVIDER_ID);
 		final TwitterClient client = new TwitterClient(oauthProperties.getKey(), oauthProperties.getSecret());
 		client.setCallbackUrl(rootUrl + apiPath + OAUTH_CALLBACK_PATH_SUFFIX + "?client_name=TwitterClient");
 
@@ -577,7 +586,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
 	@Bean
 	public GoogleOidcClient googleClient() {
-		final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("google");
+		final AuthenticationProviderProperties.Oauth oauthProperties =
+				providerProperties.getOauth().get(GOOGLE_PROVIDER_ID);
 		final OidcConfiguration config = new OidcConfiguration();
 		config.setClientId(oauthProperties.getKey());
 		config.setSecret(oauthProperties.getSecret());
diff --git a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
index a3bbe2dfb6a0206a58c6fee46047521ac4b5e6ad..5b956ef0bec1b9312a8c5f6afa60a7eab8420e3e 100644
--- a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
+++ b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
@@ -25,6 +25,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -164,7 +165,7 @@ public class ConfigurationController extends AbstractController {
 		socketioPath = systemProperties.getSocketio().getProxyPath();
 	}
 
-	@RequestMapping(method = RequestMethod.GET)
+	@GetMapping
 	@ResponseBody
 	public Map<String, Object> getConfiguration(final HttpServletRequest request) {
 		final Map<String, Object> config = new HashMap<>();
diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java
index fb8880f249752cbc05a0b385ba0b81dfce4cd01c..abc74d0ce2ad0b03cdd998fb87d241559b1c79d6 100644
--- a/src/main/java/de/thm/arsnova/controller/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/UserController.java
@@ -101,7 +101,7 @@ public class UserController extends AbstractEntityController<UserProfile> {
 		}
 	}
 
-	@RequestMapping(value = ACTIVATE_MAPPING, method = RequestMethod.POST)
+	@PostMapping(ACTIVATE_MAPPING)
 	public void activate(
 			@PathVariable final String id,
 			@RequestParam final String key) {
@@ -113,7 +113,7 @@ public class UserController extends AbstractEntityController<UserProfile> {
 		userService.update(userProfile);
 	}
 
-	@RequestMapping(value = RESET_PASSWORD_MAPPING, method = RequestMethod.POST)
+	@PostMapping(RESET_PASSWORD_MAPPING)
 	public void resetPassword(
 			@PathVariable final String id,
 			@RequestBody final PasswordReset passwordReset) {
diff --git a/src/main/java/de/thm/arsnova/controller/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
index 59c32288119caecd187a47e055c4675149899207..0db5fd395157e8d025b789094920254b606efaa1 100644
--- a/src/main/java/de/thm/arsnova/controller/WelcomeController.java
+++ b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
@@ -30,8 +30,8 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.client.SimpleClientHttpRequestFactory;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
@@ -56,18 +56,18 @@ public class WelcomeController extends AbstractController {
 	@Autowired
 	private VersionInfoContributor versionInfoContributor;
 
-	@RequestMapping(value = "/", method = RequestMethod.GET)
+	@GetMapping("/")
 	public View home() {
 		return new RedirectView(mobileContextPath + "/", false);
 	}
 
-	@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json")
+	@GetMapping(value = "/", produces = "application/json")
 	@ResponseBody
 	public Map<String, Object> jsonHome() {
 		return versionInfoContributor.getInfoDetails();
 	}
 
-	@RequestMapping(value = "/checkframeoptionsheader", method = RequestMethod.POST)
+	@PostMapping("/checkframeoptionsheader")
 	@ResponseStatus(HttpStatus.OK)
 	public void checkFrameOptionsHeader(
 			@RequestParam final String url,
diff --git a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java
index 5644dfee48ab545c65f1fc036b15d855a988073d..fd52193a804f77260d518bfec4cf578e7d5ca130 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java
@@ -50,8 +50,9 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.util.UrlUtils;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.View;
@@ -124,7 +125,7 @@ public class AuthenticationController extends AbstractController {
 		oauthProperties = authenticationProviderProperties.getOauth();
 	}
 
-	@RequestMapping(value = { "/login", "/doLogin" }, method = { RequestMethod.POST, RequestMethod.GET })
+	@PostMapping({ "/login", "/doLogin" })
 	public void doLogin(
 			@RequestParam("type") final String type,
 			@RequestParam(value = "user", required = false) final String username,
@@ -170,7 +171,7 @@ public class AuthenticationController extends AbstractController {
 		}
 	}
 
-	@RequestMapping(value = { "/dialog" }, method = RequestMethod.GET)
+	@GetMapping("/dialog")
 	@ResponseBody
 	public View dialog(
 			@RequestParam("type") final String type,
@@ -231,7 +232,7 @@ public class AuthenticationController extends AbstractController {
 		return result;
 	}
 
-	@RequestMapping(value = { "/", "/whoami" }, method = RequestMethod.GET)
+	@GetMapping({ "/", "/whoami" })
 	@ResponseBody
 	public ClientAuthentication whoami(@AuthenticationPrincipal final User user) {
 		if (user == null) {
@@ -240,7 +241,7 @@ public class AuthenticationController extends AbstractController {
 		return new ClientAuthentication(user);
 	}
 
-	@RequestMapping(value = { "/logout" }, method = { RequestMethod.POST, RequestMethod.GET })
+	@PostMapping("/logout")
 	public String doLogout(final HttpServletRequest request) {
 		final Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 		userService.removeUserIdFromMaps(userService.getCurrentUser().getId());
@@ -249,10 +250,10 @@ public class AuthenticationController extends AbstractController {
 		if (auth instanceof CasAuthenticationToken) {
 			return "redirect:" + apiPath + SecurityConfig.CAS_LOGOUT_PATH_SUFFIX;
 		}
-		return "redirect:" + request.getHeader("referer") != null ? request.getHeader("referer") : "/";
+		return "redirect:" + (request.getHeader("referer") != null ? request.getHeader("referer") : "/");
 	}
 
-	@RequestMapping(value = { "/services" }, method = RequestMethod.GET)
+	@GetMapping("/services")
 	@ResponseBody
 	public List<ServiceDescription> getServices(final HttpServletRequest request) {
 		final List<ServiceDescription> services = new ArrayList<>();
@@ -284,9 +285,9 @@ public class AuthenticationController extends AbstractController {
 
 		if (ldapProperties.get(0).isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"ldap",
+					SecurityConfig.LDAP_PROVIDER_ID,
 					ldapProperties.get(0).getTitle(),
-					customizationPath + "/login?provider=ldap&redirect={0}",
+					customizationPath + "/login?provider=" + SecurityConfig.LDAP_PROVIDER_ID + "&redirect={0}",
 					ldapProperties.get(0).getAllowedRoles()
 			);
 			sdesc.setOrder(ldapProperties.get(0).getOrder());
@@ -295,9 +296,9 @@ public class AuthenticationController extends AbstractController {
 
 		if (casProperties.isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"cas",
+					SecurityConfig.CAS_PROVIDER_ID,
 					casProperties.getTitle(),
-					MessageFormat.format(dialogUrl, "cas"),
+					MessageFormat.format(dialogUrl, SecurityConfig.CAS_PROVIDER_ID),
 					casProperties.getAllowedRoles()
 			);
 			sdesc.setOrder(casProperties.getOrder());
@@ -306,45 +307,48 @@ public class AuthenticationController extends AbstractController {
 
 		if (oidcProperties.get(0).isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"oidc",
+					SecurityConfig.OIDC_PROVIDER_ID,
 					oidcProperties.get(0).getTitle(),
-					MessageFormat.format(dialogUrl, "oidc"),
+					MessageFormat.format(dialogUrl, SecurityConfig.OIDC_PROVIDER_ID),
 					oidcProperties.get(0).getAllowedRoles()
 			);
 			sdesc.setOrder(oidcProperties.get(0).getOrder());
 			services.add(sdesc);
 		}
 
-		final AuthenticationProviderProperties.Oauth facebookProperties = oauthProperties.get("facebook");
+		final AuthenticationProviderProperties.Oauth facebookProperties =
+				oauthProperties.get(SecurityConfig.FACEBOOK_PROVIDER_ID);
 		if (facebookProperties != null && facebookProperties.isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"facebook",
+					SecurityConfig.FACEBOOK_PROVIDER_ID,
 					"Facebook",
-					MessageFormat.format(dialogUrl, "facebook"),
+					MessageFormat.format(dialogUrl, SecurityConfig.FACEBOOK_PROVIDER_ID),
 					facebookProperties.getAllowedRoles()
 			);
 			sdesc.setOrder(facebookProperties.getOrder());
 			services.add(sdesc);
 		}
 
-		final AuthenticationProviderProperties.Oauth googleProperties = oauthProperties.get("google");
+		final AuthenticationProviderProperties.Oauth googleProperties =
+				oauthProperties.get(SecurityConfig.GOOGLE_PROVIDER_ID);
 		if (googleProperties != null && googleProperties.isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"google",
+					SecurityConfig.GOOGLE_PROVIDER_ID,
 					"Google",
-					MessageFormat.format(dialogUrl, "google"),
+					MessageFormat.format(dialogUrl, SecurityConfig.GOOGLE_PROVIDER_ID),
 					googleProperties.getAllowedRoles()
 			);
 			sdesc.setOrder(googleProperties.getOrder());
 			services.add(sdesc);
 		}
 
-		final AuthenticationProviderProperties.Oauth twitterProperties = oauthProperties.get("twitter");
+		final AuthenticationProviderProperties.Oauth twitterProperties =
+				oauthProperties.get(SecurityConfig.TWITTER_PROVIDER_ID);
 		if (twitterProperties != null && twitterProperties.isEnabled()) {
 			final ServiceDescription sdesc = new ServiceDescription(
-					"twitter",
+					SecurityConfig.TWITTER_PROVIDER_ID,
 					"Twitter",
-					MessageFormat.format(dialogUrl, "twitter"),
+					MessageFormat.format(dialogUrl, SecurityConfig.TWITTER_PROVIDER_ID),
 					twitterProperties.getAllowedRoles()
 			);
 			sdesc.setOrder(twitterProperties.getOrder());
diff --git a/src/main/java/de/thm/arsnova/controller/v2/CommentController.java b/src/main/java/de/thm/arsnova/controller/v2/CommentController.java
index 9ee584c8e160268eba13ad15d4de94d1de73fa5d..088f70362982c799d307a52716135e0238cecef9 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/CommentController.java
@@ -29,7 +29,10 @@ import java.util.stream.Collectors;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -74,7 +77,7 @@ public class CommentController extends PaginationController {
 
 	@ApiOperation(value = "Count all the comments in current room",
 			nickname = "getCommentCount")
-	@RequestMapping(value = "/count", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/count", produces = MediaType.TEXT_PLAIN_VALUE)
 	@DeprecatedApi
 	@Deprecated
 	public String getCommentCount(
@@ -86,7 +89,7 @@ public class CommentController extends PaginationController {
 
 	@ApiOperation(value = "count all unread comments",
 			nickname = "getUnreadCommentCount")
-	@RequestMapping(value = "/readcount", method = RequestMethod.GET)
+	@GetMapping("/readcount")
 	@DeprecatedApi
 	@Deprecated
 	public CommentReadingCount getUnreadCommentCount(
@@ -97,7 +100,7 @@ public class CommentController extends PaginationController {
 
 	@ApiOperation(value = "Retrieves all Comments for a Room",
 			nickname = "getComments")
-	@RequestMapping(value = "/", method = RequestMethod.GET)
+	@GetMapping("/")
 	@Pagination
 	public List<Comment> getComments(
 			@ApiParam(value = "Room-Key from current room", required = true)
@@ -109,7 +112,7 @@ public class CommentController extends PaginationController {
 
 	@ApiOperation(value = "Retrieves an Comment",
 			nickname = "getComment")
-	@RequestMapping(value = "/{commentId}", method = RequestMethod.GET)
+	@GetMapping("/{commentId}")
 	public Comment getComment(
 			@ApiParam(value = "ID of the Comment that needs to be deleted", required = true)
 			@PathVariable
@@ -123,7 +126,7 @@ public class CommentController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 400, message = HTML_STATUS_400)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.POST)
+	@PostMapping("/")
 	@ResponseStatus(HttpStatus.CREATED)
 	public void postComment(
 			@ApiParam(value = "Room-Key from current room", required = true)
@@ -140,7 +143,7 @@ public class CommentController extends PaginationController {
 
 	@ApiOperation(value = "Deletes a Comment",
 			nickname = "deleteComment")
-	@RequestMapping(value = "/{commentId}", method = RequestMethod.DELETE)
+	@DeleteMapping("/{commentId}")
 	public void deleteComment(
 			@ApiParam(value = "ID of the comment that needs to be deleted", required = true)
 			@PathVariable
diff --git a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
index 8035955028a205d562bcb704bd1c0829af8d4ced..f788bcdec499cb6c0b37a10032c7820c882ee4d3 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
@@ -34,10 +34,13 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
@@ -93,7 +96,7 @@ public class ContentController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 404, message = HTML_STATUS_404)
 	})
-	@RequestMapping(value = "/{contentId}", method = RequestMethod.GET)
+	@GetMapping("/{contentId}")
 	public Content getContent(@PathVariable final String contentId) {
 		final de.thm.arsnova.model.Content content = contentService.get(contentId);
 		if (content != null) {
@@ -108,7 +111,7 @@ public class ContentController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 400, message = HTML_STATUS_400)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.POST)
+	@PostMapping("/")
 	@ResponseStatus(HttpStatus.CREATED)
 	public Content postContent(@RequestBody final Content content) {
 		final de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content);
@@ -123,7 +126,7 @@ public class ContentController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 400, message = HTML_STATUS_400)
 	})
-	@RequestMapping(value = "/bulk", method = RequestMethod.POST)
+	@PostMapping("/bulk")
 	@ResponseStatus(HttpStatus.CREATED)
 	public List<Content> bulkPostContents(@RequestBody final List<Content> contents) {
 		final List<de.thm.arsnova.model.Content> contentsV3 =
@@ -136,7 +139,7 @@ public class ContentController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 400, message = HTML_STATUS_400)
 	})
-	@RequestMapping(value = "/{contentId}", method = RequestMethod.PUT)
+	@PutMapping("/{contentId}")
 	public Content updateContent(
 			@PathVariable final String contentId,
 			@RequestBody final Content content) {
@@ -145,7 +148,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Start new Pi Round on content, identified by provided id, with an optional time",
 			nickname = "startPiRound")
-	@RequestMapping(value = "/{contentId}/questionimage", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/questionimage")
 	public String getContentImage(
 			@PathVariable final String contentId,
 			@RequestParam(value = "fcImage", defaultValue = "false", required = false) final boolean fcImage) {
@@ -153,7 +156,7 @@ public class ContentController extends PaginationController {
 		throw new NotImplementedException();
 	}
 
-	@RequestMapping(value = "/{contentId}/startnewpiround", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/startnewpiround")
 	public void startPiRound(
 			@PathVariable final String contentId,
 			@RequestParam(value = "time", defaultValue = "0", required = false) final int time) {
@@ -165,7 +168,7 @@ public class ContentController extends PaginationController {
 		}
 	}
 
-	@RequestMapping(value = "/{contentId}/canceldelayedpiround", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/canceldelayedpiround")
 	@ApiOperation(value = "Cancel Pi Round on content, identified by provided id",
 			nickname = "cancelPiRound")
 	public void cancelPiRound(
@@ -173,7 +176,7 @@ public class ContentController extends PaginationController {
 		timerService.cancelRoundChange(contentId);
 	}
 
-	@RequestMapping(value = "/{contentId}/resetpiroundstate", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/resetpiroundstate")
 	@ApiOperation(value = "Reset Pi Round on content, identified by provided id",
 			nickname = "resetPiContent")
 	public void resetPiContent(
@@ -183,7 +186,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Set voting admission on content, identified by provided id",
 			nickname = "setVotingAdmission")
-	@RequestMapping(value = "/{contentId}/disablevote", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/disablevote")
 	public void setVotingAdmission(
 			@PathVariable final String contentId,
 			@RequestParam(value = "disable", defaultValue = "false", required = false) final Boolean disableVote) {
@@ -198,7 +201,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Set voting admission for all contents",
 			nickname = "setVotingAdmissionForAllContents")
-	@RequestMapping(value = "/disablevote", method = RequestMethod.POST)
+	@PostMapping("/disablevote")
 	public void setVotingAdmissionForAllContents(
 			@RequestParam(value = "sessionkey")
 			final String roomShortId,
@@ -230,7 +233,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Publish a content, identified by provided id and content in Request Body.",
 			nickname = "publishContent")
-	@RequestMapping(value = "/{contentId}/publish", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/publish")
 	public void publishContent(
 			@PathVariable final String contentId,
 			@RequestParam(defaultValue = "true", required = false) final boolean publish,
@@ -246,7 +249,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Publish all contents",
 			nickname = "publishAllContents")
-	@RequestMapping(value = "/publish", method = RequestMethod.POST)
+	@PostMapping("/publish")
 	public void publishAllContents(
 			@RequestParam(value = "sessionkey")
 			final String roomShortId,
@@ -274,7 +277,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Publish statistics from content with provided id",
 			nickname = "publishStatistics")
-	@RequestMapping(value = "/{contentId}/publishstatistics", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/publishstatistics")
 	public void publishStatistics(
 			@PathVariable final String contentId,
 			@RequestParam(defaultValue = "true", required = false) final Boolean showStatistics,
@@ -291,7 +294,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Publish correct answer from content with provided id",
 			nickname = "publishCorrectAnswer")
-	@RequestMapping(value = "/{contentId}/publishcorrectanswer", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/publishcorrectanswer")
 	public void publishCorrectAnswer(
 			@PathVariable final String contentId,
 			@RequestParam(defaultValue = "true", required = false) final boolean showCorrectAnswer,
@@ -308,7 +311,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Get contents",
 			nickname = "getContents")
-	@RequestMapping(value = "/", method = RequestMethod.GET)
+	@GetMapping("/")
 	@Pagination
 	public List<Content> getContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
@@ -339,7 +342,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Delete contents",
 			nickname = "deleteContents")
-	@RequestMapping(value = { "/" }, method = RequestMethod.DELETE)
+	@DeleteMapping("/")
 	public void deleteContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
@@ -364,7 +367,7 @@ public class ContentController extends PaginationController {
 			nickname = "getContentCount")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/count", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/count", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getContentCount(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
@@ -387,7 +390,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Delete answers and content",
 			nickname = "deleteAnswersAndContent")
-	@RequestMapping(value = "/{contentId}", method = RequestMethod.DELETE)
+	@DeleteMapping("/{contentId}")
 	public void deleteAnswersAndContent(
 			@PathVariable final String contentId) {
 		contentService.delete(contentId);
@@ -397,7 +400,7 @@ public class ContentController extends PaginationController {
 			nickname = "getUnAnsweredContentIds")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/unanswered", method = RequestMethod.GET)
+	@GetMapping("/unanswered")
 	public List<String> getUnAnsweredContentIds(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
@@ -437,7 +440,7 @@ public class ContentController extends PaginationController {
 			nickname = "getMyAnswer")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{contentId}/myanswer", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/myanswer")
 	public Answer getMyAnswer(
 			@PathVariable final String contentId,
 			final HttpServletResponse response) {
@@ -471,7 +474,7 @@ public class ContentController extends PaginationController {
 	 */
 	@ApiOperation(value = "Get answers for a content, identified by provided content ID",
 			nickname = "getAnswers")
-	@RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/answer/")
 	public List<Answer> getAnswers(
 			@PathVariable final String contentId,
 			@RequestParam(value = "piround", required = false) final Integer piRound,
@@ -504,7 +507,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Save answer, provided in the Request Body, for a content, identified by provided content ID",
 			nickname = "saveAnswer")
-	@RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.POST)
+	@PostMapping("/{contentId}/answer/")
 	public Answer saveAnswer(
 			@PathVariable final String contentId,
 			@RequestBody final Answer answer,
@@ -524,7 +527,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Update answer, provided in Request Body, identified by content ID and answer ID",
 			nickname = "updateAnswer")
-	@RequestMapping(value = "/{contentId}/answer/{answerId}", method = RequestMethod.PUT)
+	@PutMapping("/{contentId}/answer/{answerId}")
 	public Answer updateAnswer(
 			@PathVariable final String contentId,
 			@PathVariable final String answerId,
@@ -542,7 +545,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Get Image, identified by content ID and answer ID",
 			nickname = "getImage")
-	@RequestMapping(value = "/{contentId}/answer/{answerId}/image", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/answer/{answerId}/image")
 	public String getImage(
 			@PathVariable final String contentId,
 			@PathVariable final String answerId,
@@ -553,7 +556,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Delete answer, identified by content ID and answer ID",
 			nickname = "deleteAnswer")
-	@RequestMapping(value = "/{contentId}/answer/{answerId}", method = RequestMethod.DELETE)
+	@DeleteMapping("/{contentId}/answer/{answerId}")
 	public void deleteAnswer(
 			@PathVariable final String contentId,
 			@PathVariable final String answerId,
@@ -563,7 +566,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Delete answers from a content, identified by content ID",
 			nickname = "deleteAnswers")
-	@RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.DELETE)
+	@DeleteMapping("/{contentId}/answer/")
 	public void deleteAnswers(
 			@PathVariable final String contentId,
 			final HttpServletResponse response) {
@@ -572,7 +575,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Delete all answers and contents from a room, identified by room short ID",
 			nickname = "deleteAllContentsAnswers")
-	@RequestMapping(value = "/answers", method = RequestMethod.DELETE)
+	@DeleteMapping("/answers")
 	public void deleteAllContentsAnswers(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
@@ -605,14 +608,14 @@ public class ContentController extends PaginationController {
 			nickname = "getAnswerCount")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{contentId}/answercount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/{contentId}/answercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getAnswerCount(@PathVariable final String contentId) {
 		return String.valueOf(answerService.countAnswersByContentIdAndRound(contentId));
 	}
 
 	@ApiOperation(value = "Get the amount of answers for a content, identified by the content ID",
 			nickname = "getAllAnswerCount")
-	@RequestMapping(value = "/{contentId}/allroundanswercount", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/allroundanswercount")
 	public List<Integer> getAllAnswerCount(@PathVariable final String contentId) {
 		return Arrays.asList(
 				answerService.countAnswersByContentIdAndRound(contentId, 1),
@@ -622,15 +625,14 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Get the total amount of answers by a content, identified by the content ID",
 			nickname = "getTotalAnswerCountByContent")
-	@RequestMapping(value = "/{contentId}/totalanswercount", method = RequestMethod.GET,
-			produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/{contentId}/totalanswercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getTotalAnswerCountByContent(@PathVariable final String contentId) {
 		return String.valueOf(answerService.countTotalAnswersByContentId(contentId));
 	}
 
 	@ApiOperation(value = "Get the amount of answers and abstention answers by a content, identified by the content ID",
 			nickname = "getAnswerAndAbstentionCount")
-	@RequestMapping(value = "/{contentId}/answerandabstentioncount", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/answerandabstentioncount")
 	public List<Integer> getAnswerAndAbstentionCount(@PathVariable final String contentId) {
 		return Arrays.asList(
 				answerService.countAnswersByContentIdAndRound(contentId),
@@ -640,7 +642,7 @@ public class ContentController extends PaginationController {
 
 	@ApiOperation(value = "Get all Freetext answers by a content, identified by the content ID",
 			nickname = "getFreetextAnswers")
-	@RequestMapping(value = "/{contentId}/freetextanswer/", method = RequestMethod.GET)
+	@GetMapping("/{contentId}/freetextanswer/")
 	@Pagination
 	public List<Answer> getFreetextAnswers(@PathVariable final String contentId) {
 		return answerService.getTextAnswersByContentId(contentId, offset, limit).stream()
@@ -651,7 +653,7 @@ public class ContentController extends PaginationController {
 			nickname = "getMyAnswers")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/myanswers", method = RequestMethod.GET)
+	@GetMapping("/myanswers")
 	public List<Answer> getMyAnswers(@RequestParam(value = "sessionkey") final String roomShortId)
 			throws OperationNotSupportedException {
 		return answerService.getMyAnswersByRoomId(roomService.getIdByShortId(roomShortId)).stream()
@@ -669,7 +671,7 @@ public class ContentController extends PaginationController {
 			nickname = "getTotalAnswerCount")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/answercount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/answercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getTotalAnswerCount(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
diff --git a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java
index 1e6f4bd732a0ce8585bfd8fe2484807b21757106..c1ce1b748a9892bc70f0c9036ea204bfd9f0bff6 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java
@@ -25,8 +25,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -50,7 +49,7 @@ public class CourseController extends AbstractController {
 	@Autowired
 	private UserService userService;
 
-	@RequestMapping(value = "/v2/mycourses", method = RequestMethod.GET)
+	@GetMapping("/v2/mycourses")
 	public List<Course> myCourses(
 			@ApiParam(value = "sort my courses by name", required = true)
 			@RequestParam(value = "sortby", defaultValue = "name") final String sortby) {
diff --git a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java
index 982ceae9020803af8c9b5fae81237fbe238c6793..679355fded78a119961637209fdcdf1dfaafb254 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java
@@ -21,7 +21,9 @@ package de.thm.arsnova.controller.v2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -58,14 +60,14 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/feedback", method = RequestMethod.GET)
+	@GetMapping("/feedback")
 	public Feedback getFeedback(@PathVariable final String shortId) {
 		return feedbackService.getByRoomId(roomService.getIdByShortId(shortId));
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/myfeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/myfeedback", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getMyFeedback(@PathVariable final String shortId) {
 		final String roomId = roomService.getIdByShortId(shortId);
 		final Integer value = feedbackService.getByRoomIdAndUserId(roomId, userService.getCurrentUser().getId());
@@ -77,28 +79,28 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/feedbackcount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/feedbackcount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getFeedbackCount(@PathVariable final String shortId) {
 		return String.valueOf(feedbackService.countFeedbackByRoomId(roomService.getIdByShortId(shortId)));
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/roundedaveragefeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/roundedaveragefeedback", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getAverageFeedbackRounded(@PathVariable final String shortId) {
 		return String.valueOf(feedbackService.calculateRoundedAverageFeedback(roomService.getIdByShortId(shortId)));
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/averagefeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/averagefeedback", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getAverageFeedback(@PathVariable final String shortId) {
 		return String.valueOf(feedbackService.calculateAverageFeedback(roomService.getIdByShortId(shortId)));
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/feedback", method = RequestMethod.POST)
+	@PostMapping("/feedback")
 	@ResponseStatus(HttpStatus.CREATED)
 	public Feedback postFeedback(
 			@PathVariable final String shortId,
diff --git a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
index c4da4c80c117e654a172d9cc173bf64516eb0afe..8e10a70723b87ceef9f27bae8e637a76d637f4ef 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
@@ -20,7 +20,10 @@ package de.thm.arsnova.controller.v2;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -46,13 +49,13 @@ public class LegacyController extends AbstractController {
 	/* specific routes */
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/mysessions", method = RequestMethod.GET)
+	@GetMapping("/session/mysessions")
 	public String redirectSessionMy() {
 		return "forward:/v2/session/?ownedonly=true";
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET)
+	@GetMapping("/session/visitedsessions")
 	public String redirectSessionVisited() {
 		return "forward:/v2/session/?visitedonly=true";
 	}
@@ -64,31 +67,31 @@ public class LegacyController extends AbstractController {
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/skillquestions", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/skillquestions")
 	public String redirectQuestionByLecturerList(@PathVariable final String shortId) {
 		return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/skillquestioncount", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/skillquestioncount")
 	public String redirectQuestionByLecturerCount(@PathVariable final String shortId) {
 		return String.format("forward:/v2/lecturerquestion/count?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/answercount", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/answercount")
 	public String redirectQuestionByLecturerAnswerCount(@PathVariable final String shortId) {
 		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/unanswered", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/unanswered")
 	public String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String shortId) {
 		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/myanswers", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/myanswers")
 	public String redirectQuestionByLecturerMyAnswers(@PathVariable final String shortId) {
 		return String.format("forward:/v2/lecturerquestion/myanswers?sessionkey=%s", shortId);
 	}
@@ -100,24 +103,36 @@ public class LegacyController extends AbstractController {
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/interposed", method = RequestMethod.DELETE)
+	@DeleteMapping("/session/{shortId}/interposed")
 	@ResponseBody
 	public void deleteAllInterposedQuestions(@PathVariable final String shortId) {
 		commentService.deleteByRoomId(shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/interposedcount", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/interposedcount")
 	public String redirectQuestionByAudienceCount(@PathVariable final String shortId) {
 		return String.format("forward:/v2/audiencequestion/count?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{shortId}/interposedreadingcount", method = RequestMethod.GET)
+	@GetMapping("/session/{shortId}/interposedreadingcount")
 	public String redirectQuestionByAudienceReadCount(@PathVariable final String shortId) {
 		return String.format("forward:/v2/audiencequestion/readcount?sessionkey=%s", shortId);
 	}
 
+	@DeprecatedApi
+	@GetMapping(value = { "/whoami", "/whoami.json" })
+	public String redirectWhoami() {
+		return "forward:/v2/auth/whoami";
+	}
+
+	@DeprecatedApi
+	@PostMapping(value = "/doLogin")
+	public String redirectLogin() {
+		return "forward:/v2/auth/login";
+	}
+
 	/* generalized routes */
 
 	@DeprecatedApi
@@ -155,16 +170,4 @@ public class LegacyController extends AbstractController {
 			@PathVariable final String arg2) {
 		return String.format("forward:/v2/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
 	}
-
-	@DeprecatedApi
-	@RequestMapping(value = { "/whoami", "/whoami.json" })
-	public String redirectWhoami() {
-		return "forward:/v2/auth/whoami";
-	}
-
-	@DeprecatedApi
-	@RequestMapping(value = "/doLogin")
-	public String redirectLogin() {
-		return "forward:/v2/auth/login";
-	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java
index 8ccdcb554e21604df37c8f1642b6b7eb2170dfb4..6d752d72132e6f48a4596121f4f2d3db03d35cb7 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java
@@ -30,7 +30,11 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -71,7 +75,7 @@ public class MotdController extends AbstractController {
 
 	@ApiOperation(value = "get messages. if adminview=false,"
 			+ " only messages with startdate<clientdate<enddate are returned")
-	@RequestMapping(value = "/", method = RequestMethod.GET)
+	@GetMapping("/")
 	@ApiResponses(value = {
 			@ApiResponse(code = 204, message = HTML_STATUS_204),
 			@ApiResponse(code = 501, message = HTML_STATUS_501)
@@ -116,7 +120,7 @@ public class MotdController extends AbstractController {
 			@ApiResponse(code = 201, message = HTML_STATUS_201),
 			@ApiResponse(code = 503, message = HTML_STATUS_503)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.POST)
+	@PostMapping("/")
 	@ResponseStatus(HttpStatus.CREATED)
 	public Motd postNewMotd(
 			@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd,
@@ -133,7 +137,7 @@ public class MotdController extends AbstractController {
 	}
 
 	@ApiOperation(value = "update a message of the day", nickname = "updateMotd")
-	@RequestMapping(value = "/{motdId}", method = RequestMethod.PUT)
+	@PutMapping("/{motdId}")
 	public Motd updateMotd(
 				@ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdId,
 				@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd) {
@@ -149,7 +153,7 @@ public class MotdController extends AbstractController {
 	}
 
 	@ApiOperation(value = "deletes a message of the day", nickname = "deleteMotd")
-	@RequestMapping(value = "/{motdId}", method = RequestMethod.DELETE)
+	@DeleteMapping("/{motdId}")
 	public void deleteMotd(
 			@ApiParam(value = "Motd-key from the message that shall be deleted", required = true)
 			@PathVariable
@@ -158,7 +162,7 @@ public class MotdController extends AbstractController {
 		motdService.delete(motd);
 	}
 
-	@RequestMapping(value = "/userlist", method =  RequestMethod.GET)
+	@GetMapping("/userlist")
 	public MotdList getAcknowledgedIds(@AuthenticationPrincipal final User user, @RequestParam final String username) {
 		if (user == null || !user.getUsername().equals(username)) {
 			throw new ForbiddenException();
@@ -168,7 +172,7 @@ public class MotdController extends AbstractController {
 		return toV2Migrator.migrateMotdList(profile);
 	}
 
-	@RequestMapping(value = "/userlist", method =  RequestMethod.PUT)
+	@PutMapping("/userlist")
 	public void putAcknowledgedIds(@AuthenticationPrincipal final User user, @RequestBody final MotdList motdList) {
 		if (user == null || !user.getUsername().equals(motdList.getUsername())) {
 			throw new ForbiddenException();
diff --git a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java
index aa674f9df311796ed6272845476533d25c0181ec..2a61cfcb81738a2fec9808c6c0f98b119d50a5c2 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java
@@ -33,7 +33,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.AccessDeniedException;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -82,7 +86,7 @@ public class RoomController extends PaginationController {
 			nickname = "joinRoom")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{shortId}", method = RequestMethod.GET)
+	@GetMapping("/{shortId}")
 	public Room joinRoom(
 				@ApiParam(value = "Room-Key from current Room", required = true)
 				@PathVariable final String shortId,
@@ -98,7 +102,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "deletes a Room",
 			nickname = "deleteRoom")
-	@RequestMapping(value = "/{shortId}", method = RequestMethod.DELETE)
+	@DeleteMapping("/{shortId}")
 	public void deleteRoom(
 			@ApiParam(value = "Room-Key from current Room", required = true)
 			@PathVariable
@@ -111,8 +115,7 @@ public class RoomController extends PaginationController {
 			nickname = "countActiveUsers")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{shortId}/activeusercount", method = RequestMethod.GET,
-			produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/{shortId}/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String countActiveUsers(
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId) {
 		return String.valueOf(roomService.activeUsers(roomService.getIdByShortId(shortId)));
@@ -124,7 +127,7 @@ public class RoomController extends PaginationController {
 			@ApiResponse(code = 201, message = HTML_STATUS_201),
 			@ApiResponse(code = 503, message = HTML_STATUS_503)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.POST)
+	@PostMapping("/")
 	@ResponseStatus(HttpStatus.CREATED)
 	public Room postNewRoom(
 			@ApiParam(value = "current Room", required = true)
@@ -151,7 +154,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "updates a Room",
 			nickname = "postNewRoom")
-	@RequestMapping(value = "/{shortId}", method = RequestMethod.PUT)
+	@PutMapping("/{shortId}")
 	public Room updateRoom(
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "current room", required = true) @RequestBody final Room room) {
@@ -172,7 +175,7 @@ public class RoomController extends PaginationController {
 			@ApiResponse(code = 204, message = HTML_STATUS_204),
 			@ApiResponse(code = 501, message = HTML_STATUS_501)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.GET)
+	@GetMapping("/")
 	@Pagination
 	public List<Room> getRooms(
 			@ApiParam(value = "ownedOnly", required = true)
@@ -242,7 +245,7 @@ public class RoomController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
-	@RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true")
+	@GetMapping(value = "/", params = "statusonly=true")
 	@Pagination
 	public List<RoomInfo> getMyRooms(
 			@ApiParam(value = "visitedOnly", required = true)
@@ -278,7 +281,7 @@ public class RoomController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
-	@RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true")
+	@GetMapping(value = "/publicpool", params = "statusonly=true")
 	public List<RoomInfo> getMyPublicPoolRooms(
 			final HttpServletResponse response) {
 		final List<de.thm.arsnova.model.Room> rooms = roomService.getMyPublicPoolRoomsInfo();
@@ -296,7 +299,7 @@ public class RoomController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
-	@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
+	@GetMapping("/publicpool")
 	public List<Room> getPublicPoolRooms(
 			final HttpServletResponse response) {
 		final List<de.thm.arsnova.model.Room> rooms = roomService.getPublicPoolRoomsInfo();
@@ -311,7 +314,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "imports a Room",
 			nickname = "importRoom")
-	@RequestMapping(value = "/import", method = RequestMethod.POST)
+	@PostMapping("/import")
 	public Room importRoom(
 			@ApiParam(value = "current Room", required = true) @RequestBody final ImportExportContainer room,
 			final HttpServletResponse response) {
@@ -319,7 +322,7 @@ public class RoomController extends PaginationController {
 	}
 
 	@ApiOperation(value = "export Rooms", nickname = "exportRoom")
-	@RequestMapping(value = "/export", method = RequestMethod.GET)
+	@GetMapping("/export")
 	public List<ImportExportContainer> getExport(
 			@ApiParam(value = "Room-Key", required = true)
 			@RequestParam(value = "sessionkey", defaultValue = "")
@@ -346,7 +349,7 @@ public class RoomController extends PaginationController {
 	}
 
 	@ApiOperation(value = "copy a Rooms to the public pool if enabled")
-	@RequestMapping(value = "/{shortId}/copytopublicpool", method = RequestMethod.POST)
+	@PostMapping("/{shortId}/copytopublicpool")
 	public Room copyToPublicPool(
 			@ApiParam(value = "Room-Key from current Room", required = true)
 			@PathVariable
@@ -364,7 +367,7 @@ public class RoomController extends PaginationController {
 	}
 
 	@ApiOperation(value = "copy a Room from the public pool if enabled")
-	@RequestMapping(value = "/{shortId}/copyfrompublicpool", method = RequestMethod.POST)
+	@PostMapping("/{shortId}/copyfrompublicpool")
 	public Room copyFromPublicPool(
 			@ApiParam(value = "Short ID of the Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "custom attributes for Room", required = true) @RequestBody final Room sessionAttributes) {
@@ -376,7 +379,7 @@ public class RoomController extends PaginationController {
 	@ApiResponses(value = {
 			@ApiResponse(code = 404, message = HTML_STATUS_404)
 	})
-	@RequestMapping(value = "/{shortId}/lock", method = RequestMethod.POST)
+	@PostMapping("/{shortId}/lock")
 	public Room lockRoom(
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "lock", required = true) @RequestParam(required = false) final Boolean lock,
@@ -390,7 +393,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "retrieves a value for the score",
 			nickname = "getLearningProgress")
-	@RequestMapping(value = "/{shortId}/learningprogress", method = RequestMethod.GET)
+	@GetMapping("/{shortId}/learningprogress")
 	public ScoreStatistics getLearningProgress(
 			@ApiParam(value = "Room-Key from current Room", required = true)
 			@PathVariable
@@ -407,7 +410,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "retrieves a value for the learning progress for the current user",
 			nickname = "getMyLearningProgress")
-	@RequestMapping(value = "/{shortId}/mylearningprogress", method = RequestMethod.GET)
+	@GetMapping("/{shortId}/mylearningprogress")
 	public ScoreStatistics getMyLearningProgress(
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@RequestParam(value = "type", defaultValue = "questions") final String type,
@@ -418,7 +421,7 @@ public class RoomController extends PaginationController {
 
 	@ApiOperation(value = "retrieves all Room features",
 			nickname = "getRoomFeatures")
-	@RequestMapping(value = "/{shortId}/features", method = RequestMethod.GET)
+	@GetMapping("/{shortId}/features")
 	public RoomFeature getRoomFeatures(
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			final HttpServletResponse response) {
@@ -426,7 +429,7 @@ public class RoomController extends PaginationController {
 		return toV2Migrator.migrate(room.getSettings());
 	}
 
-	@RequestMapping(value = "/{shortId}/features", method = RequestMethod.PUT)
+	@PutMapping("/{shortId}/features")
 	@ApiOperation(value = "change all Room features",
 			nickname = "changeRoomFeatures")
 	public RoomFeature changeRoomFeatures(
@@ -440,8 +443,7 @@ public class RoomController extends PaginationController {
 		return toV2Migrator.migrate(room.getSettings());
 	}
 
-	@RequestMapping(value = "/{shortId}/lockfeedbackinput", method = RequestMethod.POST,
-			produces = MediaType.TEXT_PLAIN_VALUE)
+	@PostMapping(value = "/{shortId}/lockfeedbackinput", produces = MediaType.TEXT_PLAIN_VALUE)
 	@ApiOperation(value = "locks input of user live feedback",
 			nickname = "lockFeedbackInput")
 	public String lockFeedbackInput(
@@ -451,8 +453,7 @@ public class RoomController extends PaginationController {
 		return String.valueOf(roomService.lockFeedbackInput(roomService.getIdByShortId(shortId), lock));
 	}
 
-	@RequestMapping(value = "/{shortId}/flipflashcards", method = RequestMethod.POST,
-			produces = MediaType.TEXT_PLAIN_VALUE)
+	@PostMapping(value = "/{shortId}/flipflashcards", produces = MediaType.TEXT_PLAIN_VALUE)
 	@ApiOperation(value = "flip all flashcards in Room",
 			nickname = "lockFeedbackInput")
 	public String flipFlashcards(
@@ -524,27 +525,4 @@ public class RoomController extends PaginationController {
 
 		return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, shortId);
 	}
-
-	@RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}")
-	public String redirectAudienceQuestionWithTwoArguments(
-			@PathVariable final String shortId,
-			@PathVariable final String arg1,
-			@PathVariable final String arg2,
-			final HttpServletResponse response) {
-		response.addHeader(X_FORWARDED, "1");
-
-		return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
-	}
-
-	@RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}/{arg3}")
-	public String redirectAudienceQuestionWithThreeArguments(
-			@PathVariable final String shortId,
-			@PathVariable final String arg1,
-			@PathVariable final String arg2,
-			@PathVariable final String arg3,
-			final HttpServletResponse response) {
-		response.addHeader(X_FORWARDED, "1");
-
-		return String.format("forward:/audiencequestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, shortId);
-	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java
index d3ed9a73702899b77586a0f7f7aa1277ead2e95c..7ea9f917f065c5f429f487d3f680f2b2fbe428ca 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java
@@ -32,6 +32,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -65,7 +67,7 @@ public class SocketController extends AbstractController {
 			@ApiResponse(code = 400, message = HTML_STATUS_400),
 			@ApiResponse(code = 403, message = HTML_STATUS_403)
 	})
-	@RequestMapping(method = RequestMethod.POST, value = "/assign")
+	@PostMapping("/assign")
 	public void authorize(
 			@ApiParam(value = "sessionMap", required = true) @RequestBody final Map<String, String> sessionMap,
 			@ApiParam(value = "response", required = true) final HttpServletResponse response) {
@@ -87,7 +89,7 @@ public class SocketController extends AbstractController {
 
 	@ApiOperation(value = "retrieves a socket url",
 			nickname = "getSocketUrl")
-	@RequestMapping(value = "/url", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/url", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getSocketUrl(final HttpServletRequest request) {
 		return (server.isUseSsl() ? "https://" : "http://") + request.getServerName() + ":" + server.getPortNumber();
 	}
diff --git a/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java b/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java
index 8fea0e16a855b62a284323b33de3fe127159fcca..8f26c7e7bcf8cdda61378c483b42aaa5badddcd0 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java
@@ -22,6 +22,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
@@ -45,7 +46,7 @@ public class StatisticsController extends AbstractController {
 
 	@ApiOperation(value = "Retrieves global statistics",
 			nickname = "getStatistics")
-	@RequestMapping(method = RequestMethod.GET, value = "/")
+	@GetMapping("/")
 	@CacheControl(maxAge = 60, policy = CacheControl.Policy.PUBLIC)
 	public Statistics getStatistics() {
 		return statisticsService.getStatistics();
@@ -55,7 +56,7 @@ public class StatisticsController extends AbstractController {
 			nickname = "countActiveUsers")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(method = RequestMethod.GET, value = "/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String countActiveUsers() {
 		return String.valueOf(statisticsService.getStatistics().getActiveUsers());
 	}
@@ -64,7 +65,7 @@ public class StatisticsController extends AbstractController {
 			nickname = "countLoggedInUsers")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(method = RequestMethod.GET, value = "/loggedinusercount", produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/loggedinusercount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String countLoggedInUsers() {
 		return String.valueOf(statisticsService.getStatistics().getLoggedinUsers());
 	}
@@ -73,7 +74,7 @@ public class StatisticsController extends AbstractController {
 			nickname = "countSessions")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(method = RequestMethod.GET, value = "/sessioncount", produces = MediaType.TEXT_PLAIN_VALUE)
+	@GetMapping(value = "/sessioncount", produces = MediaType.TEXT_PLAIN_VALUE)
 	public String countSessions() {
 		return String.valueOf(statisticsService.getStatistics().getOpenSessions()
 				+ statisticsService.getStatistics().getClosedSessions());
diff --git a/src/main/java/de/thm/arsnova/controller/v2/UserController.java b/src/main/java/de/thm/arsnova/controller/v2/UserController.java
index 0604ea5a98d47a8c07d7e9edc5377bc86fc7aa28..aec8a783b77155788c050abaf18b72c4194ba75a 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/UserController.java
@@ -23,7 +23,9 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -44,7 +46,7 @@ public class UserController extends AbstractController {
 	@Autowired
 	private UserService userService;
 
-	@RequestMapping(value = "/register", method = RequestMethod.POST)
+	@PostMapping(value = "/register")
 	public void register(@RequestParam final String username,
 			@RequestParam final String password,
 			final HttpServletRequest request, final HttpServletResponse response) {
@@ -56,8 +58,7 @@ public class UserController extends AbstractController {
 		response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 	}
 
-	@RequestMapping(value = "/{username}/activate", method = { RequestMethod.POST,
-			RequestMethod.GET })
+	@PostMapping(value = "/{username}/activate")
 	public void activate(
 			@PathVariable final String username,
 			@RequestParam final String key, final HttpServletRequest request,
@@ -73,7 +74,7 @@ public class UserController extends AbstractController {
 		response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 	}
 
-	@RequestMapping(value = "/{username}/", method = RequestMethod.DELETE)
+	@DeleteMapping(value = "/{username}/")
 	public void activate(
 			@PathVariable final String username,
 			final HttpServletRequest request,
@@ -83,7 +84,7 @@ public class UserController extends AbstractController {
 		}
 	}
 
-	@RequestMapping(value = "/{username}/resetpassword", method = RequestMethod.POST)
+	@PostMapping(value = "/{username}/resetpassword")
 	public void resetPassword(
 			@PathVariable final String username,
 			@RequestParam(required = false) final String key,
diff --git a/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java
index ca93646db03b9811c48bee1c8deb2a502ed47fb5..04f0aac36398df436779ddf7c1a966a254ad227b 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java
@@ -1,12 +1,13 @@
 package de.thm.arsnova.controller.v2;
 
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 @Controller("v2WelcomeController")
 @RequestMapping("/v2")
 public class WelcomeController {
-	@RequestMapping(value = "/")
+	@GetMapping(value = "/")
 	public String forwardHome() {
 		return "forward:/";
 	}
diff --git a/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java b/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java
index 6b2a34c96b84ae7626e955b1af4df9021ea9cc60..804dc239f8a0c097fc7be88d582ac3fc30b1070e 100644
--- a/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java
+++ b/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java
@@ -37,21 +37,25 @@ import de.thm.arsnova.model.Room;
  */
 @Component
 public class StateEventDispatcher implements ApplicationEventPublisherAware {
+	private static final String STATE_PROPERTY = "state";
+	private static final String SETTINGS_PROPERTY = "settings";
+	private static final String CLOSED_PROPERTY = "closed";
+
 	private ApplicationEventPublisher eventPublisher;
 
 	@EventListener
 	public void dispatchRoomStateEvent(final AfterFullUpdateEvent<Room> event) {
 		final Room newRoom = event.getEntity();
 		final Room oldRoom = event.getOldEntity();
-		publishEventIfPropertyChanged(newRoom, oldRoom, Room::isClosed, "closed");
-		publishEventIfPropertyChanged(newRoom, oldRoom, Room::getSettings, "settings");
+		publishEventIfPropertyChanged(newRoom, oldRoom, Room::isClosed, CLOSED_PROPERTY);
+		publishEventIfPropertyChanged(newRoom, oldRoom, Room::getSettings, SETTINGS_PROPERTY);
 	}
 
 	@EventListener
 	public void dispatchRoomStateEvent(final AfterPatchEvent<Room> event) {
-		publishEventIfPropertyChanged(event, Function.identity(), "closed", "closed");
-		publishEventIfPropertyChanged(event, Function.identity(), "settings", "settings");
-		publishEventIfPropertyChanged(event, Room::getSettings, null, "settings");
+		publishEventIfPropertyChanged(event, Function.identity(), CLOSED_PROPERTY, CLOSED_PROPERTY);
+		publishEventIfPropertyChanged(event, Function.identity(), SETTINGS_PROPERTY, SETTINGS_PROPERTY);
+		publishEventIfPropertyChanged(event, Room::getSettings, null, SETTINGS_PROPERTY);
 	}
 
 	@EventListener
@@ -60,13 +64,13 @@ public class StateEventDispatcher implements ApplicationEventPublisherAware {
 		final Content oldContent = event.getOldEntity();
 		final Function<Content, Content.State> f = Content::getState;
 		f.apply(newContent);
-		publishEventIfPropertyChanged(newContent, oldContent, Content::getState, "state");
+		publishEventIfPropertyChanged(newContent, oldContent, Content::getState, STATE_PROPERTY);
 	}
 
 	@EventListener
 	public void dispatchContentStateEvent(final AfterPatchEvent<Content> event) {
-		publishEventIfPropertyChanged(event, Function.identity(), "state", "state");
-		publishEventIfPropertyChanged(event, Content::getState, null, "state");
+		publishEventIfPropertyChanged(event, Function.identity(), STATE_PROPERTY, STATE_PROPERTY);
+		publishEventIfPropertyChanged(event, Content::getState, null, STATE_PROPERTY);
 	}
 
 	private <E extends Entity, T extends Object> void publishEventIfPropertyChanged(
diff --git a/src/main/java/de/thm/arsnova/model/LogEntry.java b/src/main/java/de/thm/arsnova/model/LogEntry.java
index 1aaa62bb80b8aca2c2bfb92a4bfe1c053f61925b..8b4e3e9dfd0123dc03b3e01455db5f6637186772 100644
--- a/src/main/java/de/thm/arsnova/model/LogEntry.java
+++ b/src/main/java/de/thm/arsnova/model/LogEntry.java
@@ -20,7 +20,6 @@ package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
-import java.util.Date;
 import java.util.Map;
 import java.util.Objects;
 
@@ -36,10 +35,6 @@ public class LogEntry extends Entity {
 		FATAL
 	}
 
-	private String id;
-	private String rev;
-	private Date creationTimestamp;
-	private Date updateTimestamp;
 	private String event;
 	private int level;
 	private Map<String, Object> payload;
@@ -51,50 +46,6 @@ public class LogEntry extends Entity {
 		this.payload = payload;
 	}
 
-	@JsonView(View.Persistence.class)
-	public String getId() {
-		return id;
-	}
-
-	@JsonView(View.Persistence.class)
-	public void setId(final String id) {
-		this.id = id;
-	}
-
-	@JsonView(View.Persistence.class)
-	public String getRevision() {
-		return rev;
-	}
-
-	@JsonView(View.Persistence.class)
-	public void setRevision(final String rev) {
-		this.rev = rev;
-	}
-
-	@Override
-	@JsonView(View.Persistence.class)
-	public Date getCreationTimestamp() {
-		return creationTimestamp;
-	}
-
-	@Override
-	@JsonView(View.Persistence.class)
-	public void setCreationTimestamp(final Date creationTimestamp) {
-		this.creationTimestamp = creationTimestamp;
-	}
-
-	@Override
-	@JsonView(View.Persistence.class)
-	public Date getUpdateTimestamp() {
-		return updateTimestamp;
-	}
-
-	@Override
-	@JsonView(View.Persistence.class)
-	public void setUpdateTimestamp(final Date updateTimestamp) {
-		this.updateTimestamp = updateTimestamp;
-	}
-
 	@JsonView(View.Persistence.class)
 	public String getEvent() {
 		return event;
diff --git a/src/main/java/de/thm/arsnova/model/ServiceDescription.java b/src/main/java/de/thm/arsnova/model/ServiceDescription.java
index b399d1657153b46b8d2e38ce0a8d83dec98a83f6..d31ebf46cbd27dd40ee8154087fd8631e5539f3e 100644
--- a/src/main/java/de/thm/arsnova/model/ServiceDescription.java
+++ b/src/main/java/de/thm/arsnova/model/ServiceDescription.java
@@ -113,9 +113,9 @@ public class ServiceDescription {
 		return allowedRoles;
 	}
 
-	public void setAllowedRoles(final Set<AuthenticationProviderProperties.Provider.Role> roles) {
+	public void setAllowedRoles(final Set<AuthenticationProviderProperties.Provider.Role> allowedRoles) {
 		this.allowedRoles = allowedRoles;
-		this.allowedRoleStrings = roles.stream().map(r -> {
+		this.allowedRoleStrings = allowedRoles.stream().map(r -> {
 			switch (r) {
 				case MODERATOR:
 					return "speaker";
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index 573def0089110ef5c09c7bb29fd4fc78794a7e9b..d91e4574794b59554251197e74045f4a2e9f4324 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -49,6 +49,11 @@ import de.thm.arsnova.persistence.RoomRepository;
  */
 @Component
 public class ApplicationPermissionEvaluator implements PermissionEvaluator {
+	public static final String READ_PERMISSION = "read";
+	public static final String CREATE_PERMISSION = "create";
+	public static final String UPDATE_PERMISSION = "update";
+	public static final String DELETE_PERMISSION = "delete";
+	public static final String OWNER_PERMISSION = "owner";
 	private static final Logger logger = LoggerFactory.getLogger(ApplicationPermissionEvaluator.class);
 
 	private List<String> adminAccounts;
@@ -146,16 +151,16 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final UserProfile targetUserProfile,
 			final String permission) {
 		switch (permission) {
-			case "read":
+			case READ_PERMISSION:
 				/* While the profile is readable for all authenticated users, it
 				 * only contains a limited amount of properties for the default
 				 * view. */
 				return true;
-			case "create":
+			case CREATE_PERMISSION:
 				return true;
-			case "owner":
-			case "update":
-			case "delete":
+			case OWNER_PERMISSION:
+			case UPDATE_PERMISSION:
+			case DELETE_PERMISSION:
 				return userId.equals(targetUserProfile.getId());
 			default:
 				return false;
@@ -167,15 +172,15 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final Room targetRoom,
 			final String permission) {
 		switch (permission) {
-			case "read":
+			case READ_PERMISSION:
 				return !targetRoom.isClosed() || hasUserIdRoomModeratingPermission(targetRoom, userId);
-			case "create":
+			case CREATE_PERMISSION:
 				return !userId.isEmpty();
-			case "update":
+			case UPDATE_PERMISSION:
 				return targetRoom.getOwnerId().equals(userId)
 						|| hasUserIdRoomModeratorRole(targetRoom, userId, Room.Moderator.Role.EDITING_MODERATOR);
-			case "owner":
-			case "delete":
+			case OWNER_PERMISSION:
+			case DELETE_PERMISSION:
 				return targetRoom.getOwnerId().equals(userId);
 			default:
 				return false;
@@ -192,12 +197,12 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 		}
 
 		switch (permission) {
-			case "read":
+			case READ_PERMISSION:
 				return !room.isClosed() || hasUserIdRoomModeratingPermission(room, userId);
-			case "create":
-			case "update":
-			case "delete":
-			case "owner":
+			case CREATE_PERMISSION:
+			case UPDATE_PERMISSION:
+			case DELETE_PERMISSION:
+			case OWNER_PERMISSION:
 				/* TODO: Remove owner permission for content. Use create/update/delete instead. */
 				return room.getOwnerId().equals(userId)
 						|| hasUserIdRoomModeratorRole(room, userId, Room.Moderator.Role.EDITING_MODERATOR);
@@ -216,20 +221,20 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 		}
 		final Room room;
 		switch (permission) {
-			case "read":
+			case READ_PERMISSION:
 				if (targetAnswer.getCreatorId().equals(userId) || content.getState().isResponsesVisible()) {
 					return true;
 				}
 				room = roomRepository.findOne(targetAnswer.getRoomId());
 				return room != null && hasUserIdRoomModeratingPermission(room, userId);
-			case "create":
+			case CREATE_PERMISSION:
 				return content.getState().isResponsesEnabled();
-			case "owner":
+			case OWNER_PERMISSION:
 				return targetAnswer.getCreatorId().equals(userId);
-			case "update":
+			case UPDATE_PERMISSION:
 				/* TODO */
 				return false;
-			case "delete":
+			case DELETE_PERMISSION:
 				room = roomRepository.findOne(targetAnswer.getRoomId());
 				return room != null && hasUserIdRoomModeratingPermission(room, userId);
 			default:
@@ -242,13 +247,13 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final Comment targetComment,
 			final String permission) {
 		switch (permission) {
-			case "create":
+			case CREATE_PERMISSION:
 				return !userId.isEmpty() && !roomRepository.findOne(targetComment.getRoomId()).isClosed();
-			case "owner":
-			case "update":
+			case OWNER_PERMISSION:
+			case UPDATE_PERMISSION:
 				return targetComment.getCreatorId() != null && targetComment.getCreatorId().equals(userId);
-			case "read":
-			case "delete":
+			case READ_PERMISSION:
+			case DELETE_PERMISSION:
 				if (targetComment.getCreatorId() != null && targetComment.getCreatorId().equals(userId)) {
 					return true;
 				}
@@ -268,9 +273,9 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final String permission) {
 		final Room room;
 		switch (permission) {
-			case "create":
-			case "update":
-			case "delete":
+			case CREATE_PERMISSION:
+			case UPDATE_PERMISSION:
+			case DELETE_PERMISSION:
 				if (userId.isEmpty() || targetMotd.getRoomId() == null || targetMotd.getAudience() != Motd.Audience.ROOM) {
 					return false;
 				}
@@ -281,7 +286,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 
 				return userId.equals(room.getOwnerId())
 						|| hasUserIdRoomModeratorRole(room, userId, Room.Moderator.Role.EDITING_MODERATOR);
-			case "read":
+			case READ_PERMISSION:
 				if (targetMotd.getAudience() != Motd.Audience.ROOM) {
 					return true;
 				}
@@ -334,8 +339,4 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 		return auth instanceof RunAsUserToken
 				&& auth.getAuthorities().stream().anyMatch(ga -> ga.getAuthority().equals("ROLE_RUN_AS_SYSTEM"));
 	}
-
-	private boolean isWebsocketAccess(final Authentication auth) {
-		return auth instanceof AnonymousAuthenticationToken && auth.getAuthorities().contains("ROLE_WEBSOCKET_ACCESS");
-	}
 }
diff --git a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
index 731fba023f508c01f92999f52c53f8eca0ee64eb..ac3d03a279f69b2b3247dafc61fa38dca0f85fe6 100644
--- a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
@@ -130,7 +130,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity to be created
 	 */
 	protected void prepareCreate(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	/**
@@ -139,7 +139,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity which has been created
 	 */
 	protected void finalizeCreate(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	public T update(final T entity) {
@@ -169,7 +169,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity to be updated
 	 */
 	protected void prepareUpdate(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	/**
@@ -178,7 +178,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity which has been updated
 	 */
 	protected void finalizeUpdate(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	@Override
@@ -272,7 +272,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity to be deleted
 	 */
 	protected void prepareDelete(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	/**
@@ -282,7 +282,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	 * @param entity The entity to be modified
 	 */
 	protected void modifyRetrieved(final T entity) {
-
+		/* Implementation provided by subclasses. */
 	}
 
 	protected void validate(final T entity) {
diff --git a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
index 9c399600660ef1fa1f39fe7f77bde2bd2878a4e0..10802621170b17221dd445f9933941877c717dd9 100644
--- a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
@@ -34,6 +34,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
+import org.apache.commons.lang.CharEncoding;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -614,7 +615,7 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple
 
 	private void sendEmail(final UserProfile userProfile, final String subject, final String body) {
 		final MimeMessage msg = mailSender.createMimeMessage();
-		final MimeMessageHelper helper = new MimeMessageHelper(msg, "UTF-8");
+		final MimeMessageHelper helper = new MimeMessageHelper(msg, CharEncoding.UTF_8);
 		try {
 			helper.setFrom(mailSenderName + "<" + mailSenderAddress + ">");
 			helper.setTo(userProfile.getLoginId());
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index d74a42f50d02de163b99d8ee7ec7dd08b7242949..ace674a81c2bc1a46ec13bcda4511991861e0436 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -79,6 +79,32 @@ import de.thm.arsnova.websocket.message.Room;
  */
 @Component
 public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
+	private static final String ACTIVE_USER_COUNT_DATA_EVENTNAME = "activeUserCountData";
+	private static final String SET_ROOM_ACTIVE_EVENTNAME = "setSessionActive";
+	private static final String FEATURE_CHANGE_EVENTNAME = "featureChange";
+	private static final String COMMENT_AVAILABLE_EVENTNAME = "audQuestionAvail";
+	private static final String CONTENT_AVAILABLE_SINGLE_EVENTNAME = "lecQuestionAvail";
+	private static final String CONTENT_AVAILABLE_LIST_EVENTNAME = "lecturerQuestionAvailable";
+	private static final String CONTENT_LOCKED_EVENTNAME = "lecturerQuestionLocked";
+	private static final String UNANSWERED_LECTURE_CONTENTS_EVENTNAME = "unansweredLecturerQuestions";
+	private static final String UNANSWERED_PREPARATION_CONTENTS_EVENTNAME = "unansweredPreparationQuestions";
+	private static final String ANSWERS_TO_CONTENT_AVAILABLE_EVENTNAME = "answersToLecQuestionAvail";
+	private static final String COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME = "countLectureQuestionAnswers";
+	private static final String COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME = "countPreparationQuestionAnswers";
+	private static final String COUNT_CONTENT_ANSWERS_BY_CONTENT_ID_EVENTNAME = "countQuestionAnswersByQuestionId";
+	private static final String COUNT_FLASHCARDS_EVENTNAME = "countFlashcards";
+	private static final String FLIP_FLASHCARDS_EVENTNAME = "flipFlashcards";
+	private static final String FEEDBACK_DATA_EVENTNAME = "feedbackData";
+	private static final String FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME = "feedbackDataRoundedAverage";
+	private static final String FEEDBACK_RESET_EVENTNAME = "feedbackReset";
+	private static final String LOCK_FEEDBACK_EVENTNAME = "lockFeedback";
+	private static final String START_DELAYED_ROUND_EVENTNAME = "startDelayedPiRound";
+	private static final String END_ROUND_EVENTNAME = "endPiRound";
+	private static final String CANCEL_ROUND_EVENTNAME = "cancelPiRound";
+	private static final String RESET_ROUND_EVENTNAME = "resetPiRound";
+	private static final String LOCK_VOTE_EVENTNAME = "lockVote";
+	private static final String UNLOCK_VOTE_EVENTNAME = "unlockVote";
+	private static final String SCORE_CHANGE_EVENTNAME = "learningProgressChange";
 
 	@Autowired
 	private FeedbackService feedbackService;
@@ -252,14 +278,6 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 					}
 				});
 
-		server.addConnectListener(new ConnectListener() {
-			@Override
-			@Timed("onConnect")
-			public void onConnect(final SocketIOClient client) {
-
-			}
-		});
-
 		server.addDisconnectListener(new DisconnectListener() {
 			@Override
 			@Timed("onDisconnect")
@@ -349,7 +367,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 		for (final de.thm.arsnova.model.Room room : rooms) {
 			roomShortIds.add(room.getShortId());
 		}
-		this.sendToUser(userId, "feedbackReset", roomShortIds);
+		this.sendToUser(userId, FEEDBACK_RESET_EVENTNAME, roomShortIds);
 	}
 
 	private List<UUID> findConnectionIdForUserId(final String userId) {
@@ -384,42 +402,42 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 		final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, userId);
 		final de.thm.arsnova.model.Room.Settings settings = room.getSettings();
 
-		client.sendEvent("unansweredLecturerQuestions",
+		client.sendEvent(UNANSWERED_LECTURE_CONTENTS_EVENTNAME,
 				contentService.getUnAnsweredLectureContentIds(roomId, userId));
-		client.sendEvent("unansweredPreparationQuestions",
+		client.sendEvent(UNANSWERED_PREPARATION_CONTENTS_EVENTNAME,
 				contentService.getUnAnsweredPreparationContentIds(roomId, userId));
 		/* FIXME: Content variant is ignored for now */
-		client.sendEvent("countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
-		client.sendEvent("countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
-		client.sendEvent("activeUserCountData", roomService.activeUsers(roomId));
+		client.sendEvent(COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId));
+		client.sendEvent(COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId));
+		client.sendEvent(ACTIVE_USER_COUNT_DATA_EVENTNAME, roomService.activeUsers(roomId));
 		/* FIXME: missing implementation */
 		//client.sendEvent("learningProgressOptions", room.getLearningProgressOptions());
 		final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId);
-		client.sendEvent("feedbackData", fb.getValues());
+		client.sendEvent(FEEDBACK_DATA_EVENTNAME, fb.getValues());
 
 		if (settings.isFlashcardsEnabled()) {
-			client.sendEvent("countFlashcards", contentService.countFlashcardsForUserInternal(roomId));
+			client.sendEvent(COUNT_FLASHCARDS_EVENTNAME, contentService.countFlashcardsForUserInternal(roomId));
 			/* FIXME: missing implementation */
 			//client.sendEvent("flipFlashcards", room.getFlipFlashcards());
 		}
 
 		try {
 			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(roomId);
-			client.sendEvent("feedbackDataRoundedAverage", averageFeedback);
+			client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback);
 		} catch (final NoContentException e) {
 			final Object object = null; // can't directly use "null".
-			client.sendEvent("feedbackDataRoundedAverage", object);
+			client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, object);
 		}
 	}
 
 	public void reportUpdatedFeedbackForRoom(final String roomId) {
 		final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId);
-		broadcastInRoom(roomId, "feedbackData", fb.getValues());
+		broadcastInRoom(roomId, FEEDBACK_DATA_EVENTNAME, fb.getValues());
 		try {
 			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(roomId);
-			broadcastInRoom(roomId, "feedbackDataRoundedAverage", averageFeedback);
+			broadcastInRoom(roomId, FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback);
 		} catch (final NoContentException e) {
-			broadcastInRoom(roomId, "feedbackDataRoundedAverage", null);
+			broadcastInRoom(roomId, FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, null);
 		}
 	}
 
@@ -438,8 +456,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		for (final SocketIOClient client : server.getAllClients()) {
 			if (connectionIds.contains(client.getSessionId())) {
-				client.sendEvent("feedbackData", fb.getValues());
-				client.sendEvent("feedbackDataRoundedAverage", averageFeedback);
+				client.sendEvent(FEEDBACK_DATA_EVENTNAME, fb.getValues());
+				client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback);
 			}
 		}
 	}
@@ -447,16 +465,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	public void reportActiveUserCountForRoom(final String roomId) {
 		final int count = userService.getUsersByRoomId(roomId).size();
 
-		broadcastInRoom(roomId, "activeUserCountData", count);
+		broadcastInRoom(roomId, ACTIVE_USER_COUNT_DATA_EVENTNAME, count);
 	}
 
 	public void reportAnswersToContentAvailable(final String roomId, final String contentId) {
-		broadcastInRoom(roomId, "answersToLecQuestionAvail", contentId);
+		broadcastInRoom(roomId, ANSWERS_TO_CONTENT_AVAILABLE_EVENTNAME, contentId);
 	}
 
 	public void reportCommentAvailable(final String roomId, final String commentId) {
 		/* TODO role handling implementation, send this only to users with role lecturer */
-		broadcastInRoom(roomId, "audQuestionAvail", commentId);
+		broadcastInRoom(roomId, COMMENT_AVAILABLE_EVENTNAME, commentId);
 	}
 
 	public void reportContentAvailable(final String roomId, final List<de.thm.arsnova.model.Content> qs) {
@@ -467,9 +485,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		/* TODO role handling implementation, send this only to users with role audience */
 		if (!qs.isEmpty()) {
-			broadcastInRoom(roomId, "lecQuestionAvail", contents.get(0).getId()); // deprecated!
+			broadcastInRoom(roomId, CONTENT_AVAILABLE_SINGLE_EVENTNAME, contents.get(0).getId()); // deprecated!
 		}
-		broadcastInRoom(roomId, "lecturerQuestionAvailable", contents);
+		broadcastInRoom(roomId, CONTENT_AVAILABLE_LIST_EVENTNAME, contents);
 	}
 
 	public void reportContentsLocked(final String roomId, final List<de.thm.arsnova.model.Content> qs) {
@@ -477,11 +495,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 		for (final de.thm.arsnova.model.Content q : qs) {
 			contents.add(new Content(q));
 		}
-		broadcastInRoom(roomId, "lecturerQuestionLocked", contents);
+		broadcastInRoom(roomId, CONTENT_LOCKED_EVENTNAME, contents);
 	}
 
 	public void reportRoomStatus(final String roomId, final boolean active) {
-		broadcastInRoom(roomId, "setSessionActive", active);
+		broadcastInRoom(roomId, SET_ROOM_ACTIVE_EVENTNAME, active);
 	}
 
 	public void broadcastInRoom(final String roomId, final String eventName, final Object data) {
@@ -525,12 +543,12 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	public void handleNewAnswer(final AfterCreationEvent<Answer> event) {
 		final String roomId = event.getEntity().getRoomId();
 		this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId());
-		broadcastInRoom(roomId, "countQuestionAnswersByQuestionId",
+		broadcastInRoom(roomId, COUNT_CONTENT_ANSWERS_BY_CONTENT_ID_EVENTNAME,
 				answerService.countAnswersAndAbstentionsInternal(event.getEntity().getContentId()));
 		/* FIXME: Content variant is ignored for now */
-		broadcastInRoom(roomId, "countLectureQuestionAnswers",
+		broadcastInRoom(roomId, COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME,
 				answerService.countTotalAnswersByRoomId(roomId));
-		broadcastInRoom(roomId, "countPreparationQuestionAnswers",
+		broadcastInRoom(roomId, COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME,
 				answerService.countTotalAnswersByRoomId(roomId));
 
 		// Update the unanswered count for the content variant that was answered.
@@ -547,8 +565,10 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 		this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId());
 		// We do not know which user's answer was deleted, so we can't update his 'unanswered' list of questions...
 		/* FIXME: Content variant is ignored for now */
-		broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
-		broadcastInRoom(roomId, "countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
+		broadcastInRoom(roomId, COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME,
+				answerService.countTotalAnswersByRoomId(roomId));
+		broadcastInRoom(roomId, COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME,
+				answerService.countTotalAnswersByRoomId(roomId));
 	}
 
 	@Async
@@ -556,7 +576,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	@Timed
 	public void handlePiRoundDelayedStart(
 			final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) {
-		broadcastInRoom(event.getEntity().getRoomId(), "startDelayedPiRound",
+		broadcastInRoom(event.getEntity().getRoomId(), START_DELAYED_ROUND_EVENTNAME,
 				generateRoundInfo(event.getEntity()));
 	}
 
@@ -565,7 +585,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	@Timed
 	public void handlePiRoundEnd(
 			final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) {
-		broadcastInRoom(event.getEntity().getRoomId(), "endPiRound", generateRoundInfo(event.getEntity()));
+		broadcastInRoom(event.getEntity().getRoomId(), END_ROUND_EVENTNAME, generateRoundInfo(event.getEntity()));
 	}
 
 	@Async
@@ -573,13 +593,13 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	@Timed
 	public void handlePiRoundCancel(
 			final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) {
-		broadcastInRoom(event.getEntity().getRoomId(), "cancelPiRound", event.getEntity().getId());
+		broadcastInRoom(event.getEntity().getRoomId(), CANCEL_ROUND_EVENTNAME, event.getEntity().getId());
 	}
 
 	@EventListener(condition = "#event.stateName == 'state'")
 	public void handlePiRoundReset(
 			final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) {
-		broadcastInRoom(event.getEntity().getRoomId(), "resetPiRound", generateRoundInfo(event.getEntity()));
+		broadcastInRoom(event.getEntity().getRoomId(), RESET_ROUND_EVENTNAME, generateRoundInfo(event.getEntity()));
 	}
 
 	private Map<String, Object> generateRoundInfo(final de.thm.arsnova.model.Content content) {
@@ -611,9 +631,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 		map.put("variant", groupName);
 		if (event.getEntity().getState().isResponsesEnabled()) {
 			this.reportContentAvailable(event.getEntity().getRoomId(), Collections.singletonList(event.getEntity()));
-			broadcastInRoom(event.getEntity().getRoomId(), "unlockVote", map);
+			broadcastInRoom(event.getEntity().getRoomId(), UNLOCK_VOTE_EVENTNAME, map);
 		} else {
-			broadcastInRoom(event.getEntity().getRoomId(), "lockVote", map);
+			broadcastInRoom(event.getEntity().getRoomId(), LOCK_VOTE_EVENTNAME, map);
 		}
 	}
 
@@ -622,10 +642,10 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 			final StateChangeEvent<de.thm.arsnova.model.Room, de.thm.arsnova.model.Room.Settings> event) {
 		final String roomId = event.getEntity().getId();
 		final de.thm.arsnova.model.Room.Settings settings = event.getEntity().getSettings();
-		broadcastInRoom(roomId, "featureChange", toV2Migrator.migrate(settings));
+		broadcastInRoom(roomId, FEATURE_CHANGE_EVENTNAME, toV2Migrator.migrate(settings));
 
 		if (settings.isFlashcardsEnabled()) {
-			broadcastInRoom(roomId, "countFlashcards",
+			broadcastInRoom(roomId, COUNT_FLASHCARDS_EVENTNAME,
 					contentService.countFlashcardsForUserInternal(roomId));
 			/* FIXME: missing implementation */
 			//broadcastInRoom(roomId, "flipFlashcards", event.getEntity().getSettings().isFlipFlashcards());
@@ -635,14 +655,14 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	@EventListener(condition = "#event.stateName == 'settings'")
 	public void handleLockFeedback(
 			final StateChangeEvent<de.thm.arsnova.model.Room, de.thm.arsnova.model.Room.Settings> event) {
-		broadcastInRoom(event.getEntity().getId(), "lockFeedback",
+		broadcastInRoom(event.getEntity().getId(), LOCK_FEEDBACK_EVENTNAME,
 				event.getEntity().getSettings().isFeedbackLocked());
 	}
 
 	@EventListener
 	public void handleFlipFlashcards(final FlipFlashcardsEvent event) {
 		/* FIXME: missing implementation */
-		//broadcastInRoom(event.getRoom().getId(), "flipFlashcards", event.getRoom().getFlipFlashcards());
+		//broadcastInRoom(event.getRoom().getId(), FLIP_FLASHCARDS_EVENTNAME, event.getRoom().getFlipFlashcards());
 	}
 
 	@EventListener
@@ -663,6 +683,6 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 	@EventListener
 	public void handleChangeScore(final ChangeScoreEvent event) {
-		broadcastInRoom(event.getRoomId(), "learningProgressChange", null);
+		broadcastInRoom(event.getRoomId(), SCORE_CHANGE_EVENTNAME, null);
 	}
 }