From 7520dfabcd84baebb0ac0b05e9e150e406ea94b8 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Thu, 19 Feb 2015 15:36:48 +0100
Subject: [PATCH] Do not prevent inheritance/method overriding w/o a reason

---
 .../thm/arsnova/CASLogoutSuccessHandler.java  |  6 +-
 .../de/thm/arsnova/CasUserDetailsService.java |  2 +-
 src/main/java/de/thm/arsnova/ImageUtils.java  |  2 +-
 .../LoginAuthenticationFailureHandler.java    |  4 +-
 .../LoginAuthenticationSucessHandler.java     |  4 +-
 .../de/thm/arsnova/aop/UserSessionAspect.java |  2 +-
 .../AudienceQuestionController.java           | 14 ++--
 .../controller/ConfigurationController.java   |  4 +-
 .../arsnova/controller/CourseController.java  |  2 +-
 .../controller/FeedbackController.java        | 12 ++--
 .../LecturerQuestionController.java           | 49 ++++++-------
 .../arsnova/controller/LegacyController.java  | 32 ++++-----
 .../arsnova/controller/LoginController.java   | 16 ++---
 .../arsnova/controller/SessionController.java | 47 +++++++------
 .../arsnova/controller/SocketController.java  |  4 +-
 .../controller/StatisticsController.java      |  8 +--
 .../arsnova/controller/UserController.java    |  8 +--
 .../arsnova/controller/WelcomeController.java |  4 +-
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 70 +++++++++----------
 .../thm/arsnova/services/FeedbackService.java | 16 ++---
 .../thm/arsnova/services/SessionService.java  | 30 ++++----
 .../arsnova/services/StatisticsService.java   |  2 +-
 .../controller/AbstractControllerTest.java    |  2 +-
 .../controller/CourseControllerTest.java      |  4 +-
 .../LecturerQuestionControllerTest.java       |  4 +-
 .../controller/SessionControllerTest.java     |  4 +-
 .../controller/StatisticsControllerTest.java  | 12 ++--
 .../arsnova/services/FeedbackServiceTest.java |  4 +-
 .../arsnova/services/QuestionServiceTest.java |  4 +-
 .../arsnova/services/SessionServiceTest.java  |  4 +-
 .../services/StatisticsServiceTest.java       |  6 +-
 31 files changed, 192 insertions(+), 190 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java b/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
index d2e52712..ad223ea2 100644
--- a/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
+++ b/src/main/java/de/thm/arsnova/CASLogoutSuccessHandler.java
@@ -40,7 +40,7 @@ public class CASLogoutSuccessHandler implements LogoutSuccessHandler {
 	private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
 
 	@Override
-	public final void onLogoutSuccess(
+	public void onLogoutSuccess(
 			final HttpServletRequest request,
 			final HttpServletResponse response,
 			final Authentication authentication
@@ -57,11 +57,11 @@ public class CASLogoutSuccessHandler implements LogoutSuccessHandler {
 		);
 	}
 
-	public final void setCasUrl(final String newCasUrl) {
+	public void setCasUrl(final String newCasUrl) {
 		casUrl = newCasUrl;
 	}
 
-	public final void setDefaultTarget(final String newDefaultTarget) {
+	public void setDefaultTarget(final String newDefaultTarget) {
 		defaultTarget = newDefaultTarget;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/CasUserDetailsService.java b/src/main/java/de/thm/arsnova/CasUserDetailsService.java
index 8012d1c4..66bf0eff 100644
--- a/src/main/java/de/thm/arsnova/CasUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/CasUserDetailsService.java
@@ -32,7 +32,7 @@ import org.springframework.stereotype.Service;
 public class CasUserDetailsService extends AbstractCasAssertionUserDetailsService {
 
 	@Override
-	protected final UserDetails loadUserDetails(final Assertion assertion) {
+	protected UserDetails loadUserDetails(final Assertion assertion) {
 		final List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
 		grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
 
diff --git a/src/main/java/de/thm/arsnova/ImageUtils.java b/src/main/java/de/thm/arsnova/ImageUtils.java
index 7ddd1cb4..f291f823 100644
--- a/src/main/java/de/thm/arsnova/ImageUtils.java
+++ b/src/main/java/de/thm/arsnova/ImageUtils.java
@@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory;
  * @author Daniel Vogel (daniel.vogel@mni.thm.de)
  *
  */
-public final class ImageUtils {
+public class ImageUtils {
 
 	// Or whatever size you want to read in at a time.
 	private static final int CHUNK_SIZE = 4096;
diff --git a/src/main/java/de/thm/arsnova/LoginAuthenticationFailureHandler.java b/src/main/java/de/thm/arsnova/LoginAuthenticationFailureHandler.java
index 0a10994d..18d2b1cf 100644
--- a/src/main/java/de/thm/arsnova/LoginAuthenticationFailureHandler.java
+++ b/src/main/java/de/thm/arsnova/LoginAuthenticationFailureHandler.java
@@ -40,7 +40,7 @@ public class LoginAuthenticationFailureHandler extends
 	public static final Logger LOGGER = LoggerFactory.getLogger(LoginAuthenticationFailureHandler.class);
 
 	@Override
-	public final void onAuthenticationFailure(
+	public void onAuthenticationFailure(
 			final HttpServletRequest request,
 			final HttpServletResponse response,
 			final AuthenticationException exception
@@ -54,7 +54,7 @@ public class LoginAuthenticationFailureHandler extends
 	}
 
 	@Override
-	public final void setDefaultFailureUrl(final String url) {
+	public void setDefaultFailureUrl(final String url) {
 		failureUrl = url;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
index f733ac92..fafaff40 100644
--- a/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
+++ b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
@@ -33,7 +33,7 @@ public class LoginAuthenticationSucessHandler extends
 	public static final Logger LOGGER = LoggerFactory.getLogger(LoginAuthenticationSucessHandler.class);
 
 	@Override
-	protected final String determineTargetUrl(
+	protected String determineTargetUrl(
 			final HttpServletRequest request,
 			final HttpServletResponse response
 	) {
@@ -46,7 +46,7 @@ public class LoginAuthenticationSucessHandler extends
 		return redirect;
 	}
 
-	public final void setTargetUrl(final String url) {
+	public void setTargetUrl(final String url) {
 		targetUrl = url;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
index 777856b4..202558ac 100644
--- a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
+++ b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
@@ -41,7 +41,7 @@ public class UserSessionAspect {
 			pointcut = "execution(public * de.thm.arsnova.services.SessionService.joinSession(..)) && args(keyword)",
 			returning = "session"
 			)
-	public final void joinSessionAdvice(final JoinPoint jp, final String keyword, final Session session) {
+	public void joinSessionAdvice(final JoinPoint jp, final String keyword, final Session session) {
 		userSessionService.setSession(session);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
index 6b5a2bc0..da4da99a 100644
--- a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
@@ -31,8 +31,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import de.thm.arsnova.entities.transport.InterposedQuestion;
 import de.thm.arsnova.entities.InterposedReadingCount;
+import de.thm.arsnova.entities.transport.InterposedQuestion;
 import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.services.IQuestionService;
 import de.thm.arsnova.web.DeprecatedApi;
@@ -48,29 +48,29 @@ public class AudienceQuestionController extends AbstractController {
 
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
 	@DeprecatedApi
-	public final int getInterposedCount(@RequestParam final String sessionkey) {
+	public int getInterposedCount(@RequestParam final String sessionkey) {
 		return questionService.getInterposedCount(sessionkey);
 	}
 
 	@RequestMapping(value = "/readcount", method = RequestMethod.GET)
 	@DeprecatedApi
-	public final InterposedReadingCount getUnreadInterposedCount(@RequestParam("sessionkey") final String sessionkey, String user) {
+	public InterposedReadingCount getUnreadInterposedCount(@RequestParam("sessionkey") final String sessionkey, String user) {
 		return questionService.getInterposedReadingCount(sessionkey, user);
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.GET)
-	public final List<InterposedQuestion> getInterposedQuestions(@RequestParam final String sessionkey) {
+	public List<InterposedQuestion> getInterposedQuestions(@RequestParam final String sessionkey) {
 		return InterposedQuestion.fromList(questionService.getInterposedQuestions(sessionkey));
 	}
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.GET)
-	public final InterposedQuestion getInterposedQuestion(@PathVariable final String questionId) {
+	public InterposedQuestion getInterposedQuestion(@PathVariable final String questionId) {
 		return new InterposedQuestion(questionService.readInterposedQuestion(questionId));
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public final void postInterposedQuestion(
+	public void postInterposedQuestion(
 			@RequestParam final String sessionkey,
 			@RequestBody final de.thm.arsnova.entities.InterposedQuestion question
 			) {
@@ -82,7 +82,7 @@ public class AudienceQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.DELETE)
-	public final void deleteInterposedQuestion(@PathVariable final String questionId) {
+	public void deleteInterposedQuestion(@PathVariable final String questionId) {
 		questionService.deleteInterposedQuestion(questionId);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
index 353eadb2..2ef02817 100644
--- a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
+++ b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
@@ -147,7 +147,7 @@ public class ConfigurationController extends AbstractController {
 
 	@RequestMapping(method = RequestMethod.GET)
 	@ResponseBody
-	public final HashMap<String, Object> getConfiguration(HttpServletRequest request) {
+	public HashMap<String, Object> getConfiguration(HttpServletRequest request) {
 		HashMap<String, Object> config = new HashMap<String, Object>();
 		HashMap<String, Boolean> features = new HashMap<String, Boolean>();
 		HashMap<String, String> publicPool = new HashMap<String, String>();
@@ -215,7 +215,7 @@ public class ConfigurationController extends AbstractController {
 		features.put("gridSquare", "true".equals(gridSquareEnabled));
 		features.put("sessionImportExport", "true".equals(sessionImportExportEnabled));
 		features.put("publicPool", "true".equals(publicPoolEnabled));
-		
+
 		// add public pool configuration on demand
 		if (features.get("publicPool")) {
 			config.put("publicPool", publicPool);
diff --git a/src/main/java/de/thm/arsnova/controller/CourseController.java b/src/main/java/de/thm/arsnova/controller/CourseController.java
index 846ac5d4..f35bb4f9 100644
--- a/src/main/java/de/thm/arsnova/controller/CourseController.java
+++ b/src/main/java/de/thm/arsnova/controller/CourseController.java
@@ -51,7 +51,7 @@ public class CourseController extends AbstractController {
 	private IUserService userService;
 
 	@RequestMapping(value = "/mycourses", method = RequestMethod.GET)
-	public final List<Course> myCourses(
+	public List<Course> myCourses(
 			@RequestParam(value = "sortby", defaultValue = "name") final String sortby
 			) {
 
diff --git a/src/main/java/de/thm/arsnova/controller/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/FeedbackController.java
index affed5b0..a9b2397c 100644
--- a/src/main/java/de/thm/arsnova/controller/FeedbackController.java
+++ b/src/main/java/de/thm/arsnova/controller/FeedbackController.java
@@ -48,13 +48,13 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/feedback", method = RequestMethod.GET)
-	public final Feedback getFeedback(@PathVariable final String sessionkey) {
+	public Feedback getFeedback(@PathVariable final String sessionkey) {
 		return feedbackService.getFeedback(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/myfeedback", method = RequestMethod.GET)
-	public final Integer getMyFeedback(@PathVariable final String sessionkey) {
+	public Integer getMyFeedback(@PathVariable final String sessionkey) {
 		Integer value = feedbackService.getMyFeedback(sessionkey, userService.getCurrentUser());
 		if (value != null && value >= Feedback.MIN_FEEDBACK_TYPE && value <= Feedback.MAX_FEEDBACK_TYPE) {
 			return value;
@@ -64,26 +64,26 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/feedbackcount", method = RequestMethod.GET)
-	public final int getFeedbackCount(@PathVariable final String sessionkey) {
+	public int getFeedbackCount(@PathVariable final String sessionkey) {
 		return feedbackService.getFeedbackCount(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/roundedaveragefeedback", method = RequestMethod.GET)
-	public final long getAverageFeedbackRounded(@PathVariable final String sessionkey) {
+	public long getAverageFeedbackRounded(@PathVariable final String sessionkey) {
 		return feedbackService.getAverageFeedbackRounded(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/averagefeedback", method = RequestMethod.GET)
-	public final double getAverageFeedback(@PathVariable final String sessionkey) {
+	public double getAverageFeedback(@PathVariable final String sessionkey) {
 		return feedbackService.getAverageFeedback(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionkey}/feedback", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public final Feedback postFeedback(
+	public Feedback postFeedback(
 			@PathVariable final String sessionkey,
 			@RequestBody final int value
 			) {
diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index e0d3f79b..07f17995 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -38,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController;
 import de.thm.arsnova.entities.Answer;
 import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.exceptions.BadRequestException;
+import de.thm.arsnova.exceptions.ForbiddenException;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.services.IQuestionService;
@@ -53,7 +54,7 @@ public class LecturerQuestionController extends AbstractController {
 	private IQuestionService questionService;
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.GET)
-	public final Question getQuestion(@PathVariable final String questionId) {
+	public Question getQuestion(@PathVariable final String questionId) {
 		final Question question = questionService.getQuestion(questionId);
 		if (question != null) {
 			return question;
@@ -64,7 +65,7 @@ public class LecturerQuestionController extends AbstractController {
 
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public final Question postQuestion(@RequestBody final Question question) {
+	public Question postQuestion(@RequestBody final Question question) {
 		if (questionService.saveQuestion(question) != null) {
 			return question;
 		}
@@ -72,7 +73,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.PUT)
-	public final Question updateQuestion(
+	public Question updateQuestion(
 			@PathVariable final String questionId,
 			@RequestBody final Question question
 			) {
@@ -84,7 +85,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/publish", method = RequestMethod.POST)
-	public final void publishQuestion(
+	public void publishQuestion(
 			@PathVariable final String questionId,
 			@RequestParam(required = false) final Boolean publish,
 			@RequestBody final Question question
@@ -96,7 +97,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/publish", method = RequestMethod.POST)
-	public final void publishAllQuestions(
+	public void publishAllQuestions(
 			@RequestParam final String sessionkey,
 			@RequestParam(required = false) final Boolean publish,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) final boolean lectureQuestionsOnly,
@@ -121,7 +122,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/publishstatistics", method = RequestMethod.POST)
-	public final void publishStatistics(
+	public void publishStatistics(
 			@PathVariable final String questionId,
 			@RequestParam(required = false) final Boolean showStatistics,
 			@RequestBody final Question question
@@ -133,7 +134,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/publishcorrectanswer", method = RequestMethod.POST)
-	public final void publishCorrectAnswer(
+	public void publishCorrectAnswer(
 			@PathVariable final String questionId,
 			@RequestParam(required = false) final Boolean showCorrectAnswer,
 			@RequestBody final Question question
@@ -145,7 +146,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.GET)
-	public final List<Question> getSkillQuestions(
+	public List<Question> getSkillQuestions(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
@@ -170,7 +171,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = { "/" }, method = RequestMethod.DELETE)
-	public final void deleteSkillQuestions(
+	public void deleteSkillQuestions(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
@@ -190,7 +191,7 @@ public class LecturerQuestionController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
-	public final int getSkillQuestionCount(
+	public int getSkillQuestionCount(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
@@ -208,7 +209,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.DELETE)
-	public final void deleteAnswersAndQuestion(
+	public void deleteAnswersAndQuestion(
 			@PathVariable final String questionId
 			) {
 		questionService.deleteQuestion(questionId);
@@ -216,7 +217,7 @@ public class LecturerQuestionController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/unanswered", method = RequestMethod.GET)
-	public final List<String> getUnAnsweredSkillQuestionIds(
+	public List<String> getUnAnsweredSkillQuestionIds(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly
@@ -253,7 +254,7 @@ public class LecturerQuestionController extends AbstractController {
 	 */
 	@DeprecatedApi
 	@RequestMapping(value = "/{questionId}/myanswer", method = RequestMethod.GET)
-	public final Answer getMyAnswer(
+	public Answer getMyAnswer(
 			@PathVariable final String questionId,
 			final HttpServletResponse response
 			) {
@@ -284,7 +285,7 @@ public class LecturerQuestionController extends AbstractController {
 	 *             if not logged in
 	 */
 	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.GET)
-	public final List<Answer> getAnswers(
+	public List<Answer> getAnswers(
 			@PathVariable final String questionId,
 			@RequestParam(value = "piround", required = false) final Integer piRound,
 			final HttpServletResponse response
@@ -307,7 +308,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.POST)
-	public final Answer saveAnswer(
+	public Answer saveAnswer(
 			@PathVariable final String questionId,
 			@RequestBody final de.thm.arsnova.entities.transport.Answer answer,
 			final HttpServletResponse response
@@ -316,7 +317,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/answer/{answerId}", method = RequestMethod.PUT)
-	public final Answer updateAnswer(
+	public Answer updateAnswer(
 			@PathVariable final String questionId,
 			@PathVariable final String answerId,
 			@RequestBody final Answer answer,
@@ -326,7 +327,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/answer/{answerId}", method = RequestMethod.DELETE)
-	public final void deleteAnswer(
+	public void deleteAnswer(
 			@PathVariable final String questionId,
 			@PathVariable final String answerId,
 			final HttpServletResponse response
@@ -335,7 +336,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.DELETE)
-	public final void deleteAnswers(
+	public void deleteAnswers(
 			@PathVariable final String questionId,
 			final HttpServletResponse response
 			) {
@@ -343,7 +344,7 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/answers", method = RequestMethod.DELETE)
-	public final void deleteAllQuestionsAnswers(
+	public void deleteAllQuestionsAnswers(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly,
@@ -373,12 +374,12 @@ public class LecturerQuestionController extends AbstractController {
 	 */
 	@DeprecatedApi
 	@RequestMapping(value = "/{questionId}/answercount", method = RequestMethod.GET)
-	public final int getAnswerCount(@PathVariable final String questionId) {
+	public int getAnswerCount(@PathVariable final String questionId) {
 		return questionService.getAnswerCount(questionId);
 	}
 
 	@RequestMapping(value = "/{questionId}/answerandabstentioncount", method = RequestMethod.GET)
-	public final List<Integer> getAnswerAndAbstentionCount(@PathVariable final String questionId) {
+	public List<Integer> getAnswerAndAbstentionCount(@PathVariable final String questionId) {
 		List<Integer> list = Arrays.asList(
 			questionService.getAnswerCount(questionId),
 			questionService.getAbstentionAnswerCount(questionId)
@@ -388,19 +389,19 @@ public class LecturerQuestionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{questionId}/freetextanswer/", method = RequestMethod.GET)
-	public final List<Answer> getFreetextAnswers(@PathVariable final String questionId) {
+	public List<Answer> getFreetextAnswers(@PathVariable final String questionId) {
 		return questionService.getFreetextAnswers(questionId);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/myanswers", method = RequestMethod.GET)
-	public final List<Answer> getMyAnswers(@RequestParam final String sessionkey) {
+	public List<Answer> getMyAnswers(@RequestParam final String sessionkey) {
 		return questionService.getMyAnswers(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/answercount", method = RequestMethod.GET)
-	public final int getTotalAnswerCount(
+	public int getTotalAnswerCount(
 			@RequestParam final String sessionkey,
 			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly,
 			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly
diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java
index 2e67d22f..caeb383a 100644
--- a/src/main/java/de/thm/arsnova/controller/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java
@@ -41,74 +41,74 @@ public class LegacyController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/mysessions", method = RequestMethod.GET)
-	public final String redirectSessionMy() {
+	public String redirectSessionMy() {
 		return "forward:/session/?ownedonly=true";
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET)
-	public final String redirectSessionVisited() {
+	public String redirectSessionVisited() {
 		return "forward:/session/?visitedonly=true";
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/question")
-	public final String redirectQuestionByLecturer(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturer(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/skillquestions", method = RequestMethod.GET)
-	public final String redirectQuestionByLecturerList(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturerList(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/skillquestioncount", method = RequestMethod.GET)
-	public final String redirectQuestionByLecturerCount(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturerCount(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/count?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/answercount", method = RequestMethod.GET)
-	public final String redirectQuestionByLecturerAnswerCount(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturerAnswerCount(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/answercount?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/unanswered", method = RequestMethod.GET)
-	public final String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/answercount?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET)
-	public final String redirectQuestionByLecturerMyAnswers(@PathVariable final String sessionKey) {
+	public String redirectQuestionByLecturerMyAnswers(@PathVariable final String sessionKey) {
 		return String.format("forward:/lecturerquestion/myanswers?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposed")
-	public final String redirectQuestionByAudience(@PathVariable final String sessionKey) {
+	public String redirectQuestionByAudience(@PathVariable final String sessionKey) {
 		return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposed", method = RequestMethod.DELETE)
 	@ResponseBody
-	public final void deleteAllInterposedQuestions(@PathVariable final String sessionKey) {
+	public void deleteAllInterposedQuestions(@PathVariable final String sessionKey) {
 		questionService.deleteAllInterposedQuestions(sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
-	public final String redirectQuestionByAudienceCount(@PathVariable final String sessionKey) {
+	public String redirectQuestionByAudienceCount(@PathVariable final String sessionKey) {
 		return String.format("forward:/audiencequestion/count?sessionkey=%s", sessionKey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposedreadingcount", method = RequestMethod.GET)
-	public final String redirectQuestionByAudienceReadCount(@PathVariable final String sessionKey) {
+	public String redirectQuestionByAudienceReadCount(@PathVariable final String sessionKey) {
 		return String.format("forward:/audiencequestion/readcount?sessionkey=%s", sessionKey);
 	}
 
@@ -116,7 +116,7 @@ public class LegacyController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = { "/session/{sessionKey}/question/{arg1}", "/session/{sessionKey}/questions/{arg1}" })
-	public final String redirectQuestionByLecturerWithOneArgument(
+	public String redirectQuestionByLecturerWithOneArgument(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1
 			) {
@@ -127,7 +127,7 @@ public class LegacyController extends AbstractController {
 	@RequestMapping(
 			value = { "/session/{sessionKey}/question/{arg1}/{arg2}", "/session/{sessionKey}/questions/{arg1}/{arg2}" }
 			)
-	public final String redirectQuestionByLecturerWithTwoArguments(
+	public String redirectQuestionByLecturerWithTwoArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2
@@ -137,7 +137,7 @@ public class LegacyController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}")
-	public final String redirectQuestionByAudienceWithOneArgument(
+	public String redirectQuestionByAudienceWithOneArgument(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1
 			) {
@@ -146,7 +146,7 @@ public class LegacyController extends AbstractController {
 
 	@DeprecatedApi
 	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}/{arg2}")
-	public final String redirectQuestionByAudienceWithTwoArguments(
+	public String redirectQuestionByAudienceWithTwoArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2
diff --git a/src/main/java/de/thm/arsnova/controller/LoginController.java b/src/main/java/de/thm/arsnova/controller/LoginController.java
index 93e9ccf0..ca166764 100644
--- a/src/main/java/de/thm/arsnova/controller/LoginController.java
+++ b/src/main/java/de/thm/arsnova/controller/LoginController.java
@@ -136,7 +136,7 @@ public class LoginController extends AbstractController {
 	public static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class);
 
 	@RequestMapping(value = { "/auth/login", "/doLogin" }, method = { RequestMethod.POST, RequestMethod.GET })
-	public final void doLogin(
+	public void doLogin(
 			@RequestParam("type") final String type,
 			@RequestParam(value = "user", required = false) String username,
 			@RequestParam(required = false) final String password,
@@ -217,7 +217,7 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/auth/dialog" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final View dialog(
+	public View dialog(
 			@RequestParam("type") final String type,
 			@RequestParam(value = "successurl", defaultValue = "/") String successUrl,
 			@RequestParam(value = "failureurl", defaultValue = "/") String failureUrl,
@@ -273,13 +273,13 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/auth/", "/whoami" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final User whoami() {
+	public User whoami() {
 		userSessionService.setUser(userService.getCurrentUser());
 		return userService.getCurrentUser();
 	}
 
 	@RequestMapping(value = { "/auth/logout", "/logout" }, method = { RequestMethod.POST, RequestMethod.GET })
-	public final View doLogout(final HttpServletRequest request) {
+	public View doLogout(final HttpServletRequest request) {
 		final Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 		userService.removeUserFromMaps(userService.getCurrentUser());
 		request.getSession().invalidate();
@@ -295,7 +295,7 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/auth/services" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final List<ServiceDescription> getServices(final HttpServletRequest request) {
+	public List<ServiceDescription> getServices(final HttpServletRequest request) {
 		List<ServiceDescription> services = new ArrayList<ServiceDescription>();
 
 		if ("".equals(apiPath)) {
@@ -401,7 +401,7 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/test/me" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final User me() {
+	public User me() {
 		final User me = userSessionService.getUser();
 		if (me == null) {
 			throw new UnauthorizedException();
@@ -411,7 +411,7 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/test/mysession" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final Session mysession() {
+	public Session mysession() {
 		final Session mysession = userSessionService.getSession();
 		if (mysession == null) {
 			throw new UnauthorizedException();
@@ -421,7 +421,7 @@ public class LoginController extends AbstractController {
 
 	@RequestMapping(value = { "/test/myrole" }, method = RequestMethod.GET)
 	@ResponseBody
-	public final UserSessionService.Role myrole() {
+	public UserSessionService.Role myrole() {
 		final UserSessionService.Role myrole = userSessionService.getRole();
 		if (myrole == null) {
 			throw new UnauthorizedException();
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index f76d377d..f6bb60d4 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -21,6 +21,7 @@ import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+
 import javax.servlet.http.HttpServletResponse;
 
 import net.sf.json.JSONObject;
@@ -45,10 +46,10 @@ import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.exceptions.UnauthorizedException;
 import de.thm.arsnova.services.ISessionService;
 import de.thm.arsnova.services.IUserService;
-import de.thm.arsnova.services.SessionService.SessionNameComparator;
 import de.thm.arsnova.services.SessionService.SessionInfoNameComparator;
-import de.thm.arsnova.services.SessionService.SessionShortNameComparator;
 import de.thm.arsnova.services.SessionService.SessionInfoShortNameComparator;
+import de.thm.arsnova.services.SessionService.SessionNameComparator;
+import de.thm.arsnova.services.SessionService.SessionShortNameComparator;
 import de.thm.arsnova.web.DeprecatedApi;
 
 @RestController
@@ -64,24 +65,24 @@ public class SessionController extends AbstractController {
 	private IUserService userService;
 
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET)
-	public final Session joinSession(@PathVariable final String sessionkey) {
+	public Session joinSession(@PathVariable final String sessionkey) {
 		return Session.anonymizedCopy(sessionService.getSession(sessionkey));
 	}
 
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE)
-	public final void deleteSession(@PathVariable final String sessionkey) {
+	public void deleteSession(@PathVariable final String sessionkey) {
 		sessionService.deleteSession(sessionkey);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET)
-	public final int countActiveUsers(@PathVariable final String sessionkey) {
+	public int countActiveUsers(@PathVariable final String sessionkey) {
 		return sessionService.activeUsers(sessionkey);
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public final Session postNewSession(@RequestBody final Session session, final HttpServletResponse response) {
+	public Session postNewSession(@RequestBody final Session session, final HttpServletResponse response) {
 		if (session != null && session.isCourseSession()) {
 			final List<Course> courses = new ArrayList<Course>();
 			final Course course = new Course();
@@ -106,7 +107,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.PUT)
-	public final Session updateSession(
+	public Session updateSession(
 			@PathVariable final String sessionkey,
 			@RequestBody final Session session
 			) {
@@ -114,7 +115,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.GET)
-	public final List<Session> getSessions(
+	public List<Session> getSessions(
 			@RequestParam(value = "ownedonly", defaultValue = "false") final boolean ownedOnly,
 			@RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
 			@RequestParam(value = "sortby", defaultValue = "name") final String sortby,
@@ -157,7 +158,7 @@ public class SessionController extends AbstractController {
 	 * @return
 	 */
 	@RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true")
-	public final List<SessionInfo> getMySessions(
+	public List<SessionInfo> getMySessions(
 			@RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
 			@RequestParam(value = "sortby", defaultValue = "name") final String sortby,
 			final HttpServletResponse response
@@ -183,7 +184,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true")
-	public final List<SessionInfo> getMyPublicPoolSessions(
+	public List<SessionInfo> getMyPublicPoolSessions(
 			final HttpServletResponse response
 			) {
 		List<SessionInfo> sessions = sessionService.getMyPublicPoolSessionsInfo();
@@ -197,7 +198,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
-	public final List<SessionInfo> getPublicPoolSessions(
+	public List<SessionInfo> getPublicPoolSessions(
 			final HttpServletResponse response
 			) {
 		List<SessionInfo> sessions = sessionService.getPublicPoolSessionsInfo();
@@ -211,7 +212,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/import", method = RequestMethod.POST)
-	public final SessionInfo importSession(
+	public SessionInfo importSession(
 			@RequestBody final ImportExportSession session,
 			final HttpServletResponse response
 			) {
@@ -219,7 +220,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST)
-	public final Session lockSession(
+	public Session lockSession(
 			@PathVariable final String sessionkey,
 			@RequestParam(required = false) final Boolean lock,
 			final HttpServletResponse response
@@ -232,7 +233,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionkey}/learningprogress", method = RequestMethod.GET)
-	public final int learningProgress(
+	public int learningProgress(
 			@PathVariable final String sessionkey,
 			@RequestParam(value = "type", defaultValue = "questions") final String progressType,
 			final HttpServletResponse response
@@ -241,7 +242,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionkey}/mylearningprogress", method = RequestMethod.GET)
-	public final JSONObject myLearningProgress(
+	public JSONObject myLearningProgress(
 			@PathVariable final String sessionkey,
 			@RequestParam(value = "type", defaultValue = "questions") final String progressType,
 			final HttpServletResponse response
@@ -256,7 +257,7 @@ public class SessionController extends AbstractController {
 	/* internal redirections */
 
 	@RequestMapping(value = "/{sessionKey}/lecturerquestion")
-	public final String redirectLecturerQuestion(
+	public String redirectLecturerQuestion(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
 			) {
@@ -266,7 +267,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}")
-	public final String redirectLecturerQuestionWithOneArgument(
+	public String redirectLecturerQuestionWithOneArgument(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			final HttpServletResponse response
@@ -277,7 +278,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}")
-	public final String redirectLecturerQuestionWithTwoArguments(
+	public String redirectLecturerQuestionWithTwoArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
@@ -289,7 +290,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}/{arg3}")
-	public final String redirectLecturerQuestionWithThreeArguments(
+	public String redirectLecturerQuestionWithThreeArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
@@ -302,7 +303,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/audiencequestion")
-	public final String redirectAudienceQuestion(
+	public String redirectAudienceQuestion(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
 			) {
@@ -312,7 +313,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}")
-	public final String redirectAudienceQuestionWithOneArgument(
+	public String redirectAudienceQuestionWithOneArgument(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			final HttpServletResponse response
@@ -323,7 +324,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}")
-	public final String redirectAudienceQuestionWithTwoArguments(
+	public String redirectAudienceQuestionWithTwoArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
@@ -335,7 +336,7 @@ public class SessionController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}/{arg3}")
-	public final String redirectAudienceQuestionWithThreeArguments(
+	public String redirectAudienceQuestionWithThreeArguments(
 			@PathVariable final String sessionKey,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index 9c698087..bbe1bdd4 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -53,7 +53,7 @@ public class SocketController extends AbstractController {
 	private static final Logger LOGGER = LoggerFactory.getLogger(SocketController.class);
 
 	@RequestMapping(method = RequestMethod.POST, value = "/assign")
-	public final void authorize(@RequestBody final Map<String, String> sessionMap, final HttpServletResponse response) {
+	public void authorize(@RequestBody final Map<String, String> sessionMap, final HttpServletResponse response) {
 		String socketid = sessionMap.get("session");
 		if (null == socketid) {
 			LOGGER.debug("Expected property 'session' missing", socketid);
@@ -72,7 +72,7 @@ public class SocketController extends AbstractController {
 	}
 
 	@RequestMapping(value = "/url", method = RequestMethod.GET)
-	public final String getSocketUrl(final HttpServletRequest request) {
+	public String getSocketUrl(final HttpServletRequest request) {
 		StringBuilder url = new StringBuilder();
 
 		url.append(server.isUseSSL() ? "https://" : "http://");
diff --git a/src/main/java/de/thm/arsnova/controller/StatisticsController.java b/src/main/java/de/thm/arsnova/controller/StatisticsController.java
index b069a9e7..a7bad05c 100644
--- a/src/main/java/de/thm/arsnova/controller/StatisticsController.java
+++ b/src/main/java/de/thm/arsnova/controller/StatisticsController.java
@@ -35,25 +35,25 @@ public class StatisticsController extends AbstractController {
 
 	@RequestMapping(method = RequestMethod.GET, value = "/statistics")
 	@CacheControl(maxAge = 60, policy = CacheControl.Policy.PUBLIC)
-	public final Statistics getStatistics() {
+	public Statistics getStatistics() {
 		return statisticsService.getStatistics();
 	}
 
 	@DeprecatedApi
 	@RequestMapping(method = RequestMethod.GET, value = "/statistics/activeusercount", produces = "text/plain")
-	public final String countActiveUsers() {
+	public String countActiveUsers() {
 		return Integer.toString(statisticsService.getStatistics().getActiveUsers());
 	}
 
 	@DeprecatedApi
 	@RequestMapping(method = RequestMethod.GET, value = "/statistics/loggedinusercount", produces = "text/plain")
-	public final String countLoggedInUsers() {
+	public String countLoggedInUsers() {
 		return Integer.toString(statisticsService.getStatistics().getLoggedinUsers());
 	}
 
 	@DeprecatedApi
 	@RequestMapping(method = RequestMethod.GET, value = "/statistics/sessioncount", produces = "text/plain")
-	public final String countSessions() {
+	public String countSessions() {
 		return Integer.toString(statisticsService.getStatistics().getOpenSessions()
 				+ statisticsService.getStatistics().getClosedSessions());
 	}
diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java
index 0c5e2403..3bc7a769 100644
--- a/src/main/java/de/thm/arsnova/controller/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/UserController.java
@@ -66,7 +66,7 @@ public class UserController extends AbstractController {
 			.getLogger(UserController.class);
 
 	@RequestMapping(value = { "/register" }, method = RequestMethod.POST)
-	public final void register(@RequestParam final String username,
+	public void register(@RequestParam final String username,
 			@RequestParam final String password,
 			final HttpServletRequest request, final HttpServletResponse response) {
 		if (null != userService.createDbUser(username, password)) {
@@ -79,7 +79,7 @@ public class UserController extends AbstractController {
 
 	@RequestMapping(value = { "/{username}/activate" }, method = { RequestMethod.POST,
 			RequestMethod.GET })
-	public final void activate(
+	public void activate(
 			@PathVariable final String username,
 			@RequestParam final String key, final HttpServletRequest request,
 			final HttpServletResponse response) {
@@ -95,7 +95,7 @@ public class UserController extends AbstractController {
 	}
 
 	@RequestMapping(value = { "/{username}" }, method = RequestMethod.DELETE)
-	public final void activate(
+	public void activate(
 			@PathVariable final String username,
 			final HttpServletRequest request,
 			final HttpServletResponse response) {
@@ -105,7 +105,7 @@ public class UserController extends AbstractController {
 	}
 
 	@RequestMapping(value = { "/{username}/resetpassword" }, method = RequestMethod.POST)
-	public final void resetPassword(
+	public void resetPassword(
 			@PathVariable final String username,
 			@RequestParam(required = false) final String key,
 			@RequestParam(required = false) final String password,
diff --git a/src/main/java/de/thm/arsnova/controller/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
index 21b2c861..56820352 100644
--- a/src/main/java/de/thm/arsnova/controller/WelcomeController.java
+++ b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
@@ -36,13 +36,13 @@ public class WelcomeController extends AbstractController {
 	private String mobileContextPath;
 
 	@RequestMapping(value = "/", method = RequestMethod.GET)
-	public final View home(final HttpServletRequest request) {
+	public View home(final HttpServletRequest request) {
 		return new RedirectView(mobileContextPath + "/", false);
 	}
 
 	@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json")
 	@ResponseBody
-	public final HashMap<String, Object> jsonHome(final HttpServletRequest request) {
+	public HashMap<String, Object> jsonHome(final HttpServletRequest request) {
 		return new HashMap<String, Object>();
 	}
 
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 745cd901..341aae9a 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -84,26 +84,26 @@ public class CouchDBDao implements IDatabaseDao {
 	private String databaseName;
 	private Database database;
 
-	private Queue<AbstractMap.SimpleEntry<Document, Answer>> answerQueue = new ConcurrentLinkedQueue<AbstractMap.SimpleEntry<Document, Answer>>();
+	private final Queue<AbstractMap.SimpleEntry<Document, Answer>> answerQueue = new ConcurrentLinkedQueue<AbstractMap.SimpleEntry<Document, Answer>>();
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(CouchDBDao.class);
 
 	@Value("${couchdb.host}")
-	public final void setDatabaseHost(final String newDatabaseHost) {
+	public void setDatabaseHost(final String newDatabaseHost) {
 		databaseHost = newDatabaseHost;
 	}
 
 	@Value("${couchdb.port}")
-	public final void setDatabasePort(final String newDatabasePort) {
+	public void setDatabasePort(final String newDatabasePort) {
 		databasePort = Integer.parseInt(newDatabasePort);
 	}
 
 	@Value("${couchdb.name}")
-	public final void setDatabaseName(final String newDatabaseName) {
+	public void setDatabaseName(final String newDatabaseName) {
 		databaseName = newDatabaseName;
 	}
 
-	public final void setSessionService(final ISessionService service) {
+	public void setSessionService(final ISessionService service) {
 		sessionService = service;
 	}
 
@@ -113,7 +113,7 @@ public class CouchDBDao implements IDatabaseDao {
 	 */
 	@Deprecated
 	@Override
-	public final Session getSession(final String keyword) {
+	public Session getSession(final String keyword) {
 		final Session result = getSessionFromKeyword(keyword);
 		if (result != null) {
 			return result;
@@ -123,7 +123,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<Session> getMySessions(final User user) {
+	public List<Session> getMySessions(final User user) {
 		final NovaView view = new NovaView("session/by_creator");
 		view.setStartKeyArray(user.getUsername());
 		view.setEndKeyArray(user.getUsername(), "{}");
@@ -145,7 +145,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<Session> getPublicPoolSessions() {
+	public List<Session> getPublicPoolSessions() {
 		final NovaView view = new NovaView("session/public_pool_by_subject");
 
 		final ViewResults sessions = getDatabase().view(view);
@@ -164,13 +164,13 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<SessionInfo> getPublicPoolSessionsInfo() {
+	public List<SessionInfo> getPublicPoolSessionsInfo() {
 		final List<Session> sessions = this.getPublicPoolSessions();
 		return getInfosForSessions(sessions);
 	}
 
 	@Override
-	public final List<Session> getMyPublicPoolSessions(final User user) {
+	public List<Session> getMyPublicPoolSessions(final User user) {
 		final NovaView view = new NovaView("session/public_pool_by_creator");
 		view.setStartKeyArray(user.getUsername());
 		view.setEndKeyArray(user.getUsername(), "{}");
@@ -192,7 +192,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<SessionInfo> getMyPublicPoolSessionsInfo(final User user) {
+	public List<SessionInfo> getMyPublicPoolSessionsInfo(final User user) {
 		final List<Session> sessions = this.getMyPublicPoolSessions(user);
 		if (sessions.isEmpty()) {
 			return new ArrayList<SessionInfo>();
@@ -201,7 +201,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<SessionInfo> getMySessionsInfo(final User user) {
+	public List<SessionInfo> getMySessionsInfo(final User user) {
 		final List<Session> sessions = this.getMySessions(user);
 		if (sessions.isEmpty()) {
 			return new ArrayList<SessionInfo>();
@@ -366,7 +366,7 @@ public class CouchDBDao implements IDatabaseDao {
 	 */
 	@Deprecated
 	@Override
-	public final List<Question> getSkillQuestions(final User user, final Session session) {
+	public List<Question> getSkillQuestions(final User user, final Session session) {
 		String viewName;
 		if (session.getCreator().equals(user.getUsername())) {
 			viewName = "skill_question/by_session_sorted_by_subject_and_text";
@@ -378,26 +378,26 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Cacheable("skillquestions")
 	@Override
-	public final List<Question> getSkillQuestionsForUsers(final Session session) {
+	public List<Question> getSkillQuestionsForUsers(final Session session) {
 		String viewName = "skill_question/by_session_for_all_full";
 		return getQuestions(new NovaView(viewName), session);
 	}
 
 	@Cacheable("skillquestions")
 	@Override
-	public final List<Question> getSkillQuestionsForTeachers(final Session session) {
+	public List<Question> getSkillQuestionsForTeachers(final Session session) {
 		String viewName = "skill_question/by_session_sorted_by_subject_and_text";
 		return getQuestions(new NovaView(viewName), session);
 	}
 
 	@Override
-	public final int getSkillQuestionCount(final Session session) {
+	public int getSkillQuestionCount(final Session session) {
 		return getQuestionCount(new NovaView("skill_question/count_by_session"), session);
 	}
 
 	@Override
 	@Cacheable("sessions")
-	public final Session getSessionFromKeyword(final String keyword) {
+	public Session getSessionFromKeyword(final String keyword) {
 		final NovaView view = new NovaView("session/by_keyword");
 		view.setKey(keyword);
 		final ViewResults results = getDatabase().view(view);
@@ -413,7 +413,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Override
 	@Cacheable("sessions")
-	public final Session getSessionFromId(final String sessionId) {
+	public Session getSessionFromId(final String sessionId) {
 		final NovaView view = new NovaView("session/by_id");
 		view.setKey(sessionId);
 
@@ -429,7 +429,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final Session saveSession(final User user, final Session session) {
+	public Session saveSession(final User user, final Session session) {
 		final Document sessionDocument = new Document();
 		sessionDocument.put("type", "session");
 		sessionDocument.put("name", session.getName());
@@ -462,7 +462,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public final boolean sessionKeyAvailable(final String keyword) {
+	public boolean sessionKeyAvailable(final String keyword) {
 		final View view = new View("session/by_keyword");
 		final ViewResults results = getDatabase().view(view);
 
@@ -500,7 +500,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@CachePut(value = "questions", key="#question")
 	@Override
-	public final Question saveQuestion(final Session session, final Question question) {
+	public Question saveQuestion(final Session session, final Question question) {
 		final Document q = toQuestionDocument(session, question);
 		try {
 			database.saveDocument(q);
@@ -558,7 +558,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@CachePut(value = "questions")
 	@Override
-	public final Question updateQuestion(final Question question) {
+	public Question updateQuestion(final Question question) {
 		try {
 			final Document q = database.getDocument(question.get_id());
 			q.put("subject", question.getSubject());
@@ -606,7 +606,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final InterposedQuestion saveQuestion(final Session session, final InterposedQuestion question, User user) {
+	public InterposedQuestion saveQuestion(final Session session, final InterposedQuestion question, User user) {
 		final Document q = new Document();
 		q.put("type", "interposed_question");
 		q.put("sessionId", session.get_id());
@@ -634,7 +634,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Cacheable("questions")
 	@Override
-	public final Question getQuestion(final String id) {
+	public Question getQuestion(final String id) {
 		try {
 			final Document q = getDatabase().getDocument(id);
 			final Question question = (Question) JSONObject.toBean(q.getJSONObject(), Question.class);
@@ -651,7 +651,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final LoggedIn registerAsOnlineUser(final User user, final Session session) {
+	public LoggedIn registerAsOnlineUser(final User user, final Session session) {
 		try {
 			final NovaView view = new NovaView("logged_in/all");
 			view.setKey(user.getUsername());
@@ -707,7 +707,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Override
 	@CachePut(value = "sessions")
-	public final Session updateSessionOwnerActivity(final Session session) {
+	public Session updateSessionOwnerActivity(final Session session) {
 		try {
 			/* Do not clutter CouchDB. Only update once every 3 hours. */
 			if (session.getLastOwnerActivity() > System.currentTimeMillis() - 3 * 3600000) {
@@ -725,7 +725,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<String> getQuestionIds(final Session session, final User user) {
+	public List<String> getQuestionIds(final Session session, final User user) {
 		NovaView view = new NovaView("skill_question/by_session_only_id_for_all");
 		view.setKey(session.get_id());
 		return collectQuestionIds(view);
@@ -737,7 +737,7 @@ public class CouchDBDao implements IDatabaseDao {
 			@CacheEvict(value = "preparationquestions", allEntries = true),
 			@CacheEvict(value = "flashcardquestions", allEntries = true) })
 	@Override
-	public final void deleteQuestionWithAnswers(final Question question) {
+	public void deleteQuestionWithAnswers(final Question question) {
 		try {
 			deleteAnswers(question);
 			deleteDocument(question.get_id());
@@ -752,7 +752,7 @@ public class CouchDBDao implements IDatabaseDao {
 			@CacheEvict(value = "preparationquestions", allEntries = true),
 			@CacheEvict(value = "flashcardquestions", allEntries = true) })
 	@Override
-	public final void deleteAllQuestionsWithAnswers(final Session session) {
+	public void deleteAllQuestionsWithAnswers(final Session session) {
 		final NovaView view = new NovaView("skill_question/by_session");
 		deleteAllQuestionDocumentsWithAnswers(session, view);
 	}
@@ -779,7 +779,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@CacheEvict("answers")
 	@Override
-	public final void deleteAnswers(final Question question) {
+	public void deleteAnswers(final Question question) {
 		try {
 			final NovaView view = new NovaView("answer/cleanup");
 			view.setKey(question.get_id());
@@ -799,14 +799,14 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<String> getUnAnsweredQuestionIds(final Session session, final User user) {
+	public List<String> getUnAnsweredQuestionIds(final Session session, final User user) {
 		final NovaView view = new NovaView("answer/by_user");
 		view.setKey(user.getUsername(), session.get_id());
 		return collectUnansweredQuestionIds(getQuestionIds(session, user), view);
 	}
 
 	@Override
-	public final Answer getMyAnswer(final User me, final String questionId, final int piRound) {
+	public Answer getMyAnswer(final User me, final String questionId, final int piRound) {
 
 		final NovaView view = new NovaView("answer/by_question_and_user_and_piround");
 		if (2 == piRound) {
@@ -827,7 +827,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<Answer> getAnswers(final Question question, final int piRound) {
+	public List<Answer> getAnswers(final Question question, final int piRound) {
 		final String questionId = question.get_id();
 		final NovaView view = new NovaView("skill_question/count_answers_by_question_and_piround");
 		if (2 == piRound) {
@@ -857,7 +857,7 @@ public class CouchDBDao implements IDatabaseDao {
 
 	@Cacheable("answers")
 	@Override
-	public final List<Answer> getAnswers(final Question question) {
+	public List<Answer> getAnswers(final Question question) {
 		return this.getAnswers(question, question.getPiRound());
 	}
 
@@ -874,7 +874,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final int getAnswerCount(final Question question, final int piRound) {
+	public int getAnswerCount(final Question question, final int piRound) {
 		final NovaView view = new NovaView("skill_question/count_total_answers_by_question_and_piround");
 		view.setGroup(true);
 		view.setStartKey(question.get_id(), String.valueOf(piRound));
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/services/FeedbackService.java
index bb594d0e..9fadfbd0 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackService.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackService.java
@@ -60,7 +60,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 
 	private ApplicationEventPublisher publisher;
 
-	public final void setDatabaseDao(final IDatabaseDao newDatabaseDao) {
+	public void setDatabaseDao(final IDatabaseDao newDatabaseDao) {
 		databaseDao = newDatabaseDao;
 	}
 
@@ -71,7 +71,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 
 	@Override
 	@Scheduled(fixedDelay = DEFAULT_SCHEDULER_DELAY)
-	public final void cleanFeedbackVotes() {
+	public void cleanFeedbackVotes() {
 		Map<Session, List<User>> deletedFeedbackOfUsersInSession = feedbackStorage.cleanFeedbackVotes(cleanupFeedbackDelay);
 		/*
 		 * mapping (Session -> Users) is not suitable for web sockets, because we want to sent all affected
@@ -107,7 +107,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	}
 
 	@Override
-	public final Feedback getFeedback(final String keyword) {
+	public Feedback getFeedback(final String keyword) {
 		final Session session = databaseDao.getSessionFromKeyword(keyword);
 		if (session == null) {
 			throw new NotFoundException();
@@ -116,7 +116,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	}
 
 	@Override
-	public final int getFeedbackCount(final String keyword) {
+	public int getFeedbackCount(final String keyword) {
 		final Feedback feedback = this.getFeedback(keyword);
 		final List<Integer> values = feedback.getValues();
 		return values.get(Feedback.FEEDBACK_FASTER) + values.get(Feedback.FEEDBACK_OK)
@@ -124,7 +124,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	}
 
 	@Override
-	public final double getAverageFeedback(final String sessionkey) {
+	public double getAverageFeedback(final String sessionkey) {
 		final Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		if (session == null) {
 			throw new NotFoundException();
@@ -143,12 +143,12 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	}
 
 	@Override
-	public final long getAverageFeedbackRounded(final String sessionkey) {
+	public long getAverageFeedbackRounded(final String sessionkey) {
 		return Math.round(getAverageFeedback(sessionkey));
 	}
 
 	@Override
-	public final boolean saveFeedback(final String keyword, final int value, final User user) {
+	public boolean saveFeedback(final String keyword, final int value, final User user) {
 		final Session session = databaseDao.getSessionFromKeyword(keyword);
 		if (session == null) {
 			throw new NotFoundException();
@@ -160,7 +160,7 @@ public class FeedbackService implements IFeedbackService, ApplicationEventPublis
 	}
 
 	@Override
-	public final Integer getMyFeedback(final String keyword, final User user) {
+	public Integer getMyFeedback(final String keyword, final User user) {
 		final Session session = databaseDao.getSessionFromKeyword(keyword);
 		if (session == null) {
 			throw new NotFoundException();
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index e9b739e1..956e3de8 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -23,14 +23,14 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.UUID;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import de.thm.arsnova.ImageUtils;
 import de.thm.arsnova.connector.client.ConnectorClient;
@@ -44,9 +44,9 @@ import de.thm.arsnova.entities.SessionInfo;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.events.StatusSessionEvent;
+import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.exceptions.ForbiddenException;
 import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.exceptions.RequestEntityTooLargeException;
 
 @Service
@@ -112,7 +112,7 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 	}
 
 	@Override
-	public final Session joinSession(final String keyword, final UUID socketId) {
+	public Session joinSession(final String keyword, final UUID socketId) {
 		/* Socket.IO solution */
 
 		Session session = null != keyword ? databaseDao.getSessionFromKeyword(keyword) : null;
@@ -142,7 +142,7 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final Session getSession(final String keyword) {
+	public Session getSession(final String keyword) {
 		final User user = userService.getCurrentUser();
 		return this.getSessionInternal(keyword, user);
 	}
@@ -152,7 +152,7 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public final Session getSessionInternal(final String keyword, final User user) {
+	public Session getSessionInternal(final String keyword, final User user) {
 		final Session session = databaseDao.getSessionFromKeyword(keyword);
 		if (session == null) {
 			throw new NotFoundException();
@@ -175,44 +175,44 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<Session> getMySessions() {
+	public List<Session> getMySessions() {
 		return databaseDao.getMySessions(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<SessionInfo> getPublicPoolSessionsInfo() {
+	public List<SessionInfo> getPublicPoolSessionsInfo() {
 		return databaseDao.getPublicPoolSessionsInfo();
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<SessionInfo> getMyPublicPoolSessionsInfo() {
+	public List<SessionInfo> getMyPublicPoolSessionsInfo() {
 		return databaseDao.getMyPublicPoolSessionsInfo(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<SessionInfo> getMySessionsInfo() {
+	public List<SessionInfo> getMySessionsInfo() {
 		final User user = userService.getCurrentUser();
 		return databaseDao.getMySessionsInfo(user);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<Session> getMyVisitedSessions() {
+	public List<Session> getMyVisitedSessions() {
 		return databaseDao.getMyVisitedSessions(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<SessionInfo> getMyVisitedSessionsInfo() {
+	public List<SessionInfo> getMyVisitedSessionsInfo() {
 		return databaseDao.getMyVisitedSessionsInfo(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final Session saveSession(final Session session) {
+	public Session saveSession(final Session session) {
 		if (connectorClient != null && session.getCourseId() != null) {
 			if (!connectorClient.getMembership(
 					userService.getCurrentUser().getUsername(), session.getCourseId()).isMember()
@@ -240,12 +240,12 @@ public class SessionService implements ISessionService, ApplicationEventPublishe
 	}
 
 	@Override
-	public final boolean sessionKeyAvailable(final String keyword) {
+	public boolean sessionKeyAvailable(final String keyword) {
 		return databaseDao.sessionKeyAvailable(keyword);
 	}
 
 	@Override
-	public final String generateKeyword() {
+	public String generateKeyword() {
 		final int low = 10000000;
 		final int high = 100000000;
 		final String keyword = String
diff --git a/src/main/java/de/thm/arsnova/services/StatisticsService.java b/src/main/java/de/thm/arsnova/services/StatisticsService.java
index 4a5792ae..d5292ba0 100644
--- a/src/main/java/de/thm/arsnova/services/StatisticsService.java
+++ b/src/main/java/de/thm/arsnova/services/StatisticsService.java
@@ -37,7 +37,7 @@ public class StatisticsService implements IStatisticsService {
 	private SessionRegistry sessionRegistry;
 
 	@Override
-	public final Statistics getStatistics() {
+	public Statistics getStatistics() {
 		final Statistics statistics = new Statistics();
 		statistics.setOpenSessions(databaseDao.countOpenSessions());
 		statistics.setClosedSessions(databaseDao.countClosedSessions());
diff --git a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
index 626eaf31..3be031de 100644
--- a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
@@ -31,7 +31,7 @@ public abstract class AbstractControllerTest {
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		SecurityContextHolder.clearContext();
 		userService.setUserAuthenticated(false);
 	}
diff --git a/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java b/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
index 5a2a7908..279d8248 100644
--- a/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/CourseControllerTest.java
@@ -70,7 +70,7 @@ public class CourseControllerTest {
 	}
 
 	@Test
-	public final void testShouldIndicateNotImplementedIfInactiveClient() throws Exception {
+	public void testShouldIndicateNotImplementedIfInactiveClient() throws Exception {
 		setAuthenticated(true, "ptsr00");
 
 		mockMvc.perform(get("/mycourses").accept(MediaType.TEXT_PLAIN))
@@ -78,7 +78,7 @@ public class CourseControllerTest {
 	}
 
 	@Test
-	public final void testShouldNotReturnCurrentUsersCoursesIfUnauthorized() throws Exception {
+	public void testShouldNotReturnCurrentUsersCoursesIfUnauthorized() throws Exception {
 		setAuthenticated(false, "nobody");
 
 		mockMvc.perform(get("/mycourses").accept(MediaType.TEXT_PLAIN))
diff --git a/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java b/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
index d6477d7e..a4977f7f 100644
--- a/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/LecturerQuestionControllerTest.java
@@ -61,13 +61,13 @@ public class LecturerQuestionControllerTest {
 	}
 
 	@Before
-	public final void startup() {
+	public void startup() {
 		mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 		SecurityContextHolder.clearContext();
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		SecurityContextHolder.clearContext();
 		userService.setUserAuthenticated(false);
 	}
diff --git a/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java b/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
index 76ca780e..8edf5f11 100644
--- a/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/SessionControllerTest.java
@@ -64,13 +64,13 @@ public class SessionControllerTest {
 	}
 
 	@Before
-	public final void startup() {
+	public void startup() {
 		mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
 		SecurityContextHolder.clearContext();
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		SecurityContextHolder.clearContext();
 		userService.setUserAuthenticated(false);
 	}
diff --git a/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java b/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
index 3fac5873..c28876ac 100644
--- a/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/StatisticsControllerTest.java
@@ -44,14 +44,14 @@ public class StatisticsControllerTest {
 	}
 
 	@Test
-	public final void testShouldGetCurrentOnlineUsers() throws Exception {
+	public void testShouldGetCurrentOnlineUsers() throws Exception {
 		mockMvc.perform(get("/statistics/activeusercount").accept(MediaType.TEXT_PLAIN))
 		.andExpect(status().isOk())
 		.andExpect(content().contentType("text/plain"));
 	}
 
 	@Test
-	public final void testShouldSendXDeprecatedApiForGetCurrentOnlineUsers() throws Exception {
+	public void testShouldSendXDeprecatedApiForGetCurrentOnlineUsers() throws Exception {
 		mockMvc.perform(get("/statistics/activeusercount").accept(MediaType.TEXT_PLAIN))
 		.andExpect(status().isOk())
 		.andExpect(content().contentType("text/plain"))
@@ -59,7 +59,7 @@ public class StatisticsControllerTest {
 	}
 
 	@Test
-	public final void testShouldGetSessionCount() throws Exception {
+	public void testShouldGetSessionCount() throws Exception {
 		mockMvc.perform(get("/statistics/sessioncount").accept(MediaType.TEXT_PLAIN))
 		.andExpect(status().isOk())
 		.andExpect(content().contentType("text/plain"))
@@ -67,7 +67,7 @@ public class StatisticsControllerTest {
 	}
 
 	@Test
-	public final void testShouldSendXDeprecatedApiForGetSessionCount() throws Exception {
+	public void testShouldSendXDeprecatedApiForGetSessionCount() throws Exception {
 		mockMvc.perform(get("/statistics/sessioncount").accept(MediaType.TEXT_PLAIN))
 		.andExpect(status().isOk())
 		.andExpect(content().contentType("text/plain"))
@@ -75,7 +75,7 @@ public class StatisticsControllerTest {
 	}
 
 	@Test
-	public final void testShouldGetStatistics() throws Exception {
+	public void testShouldGetStatistics() throws Exception {
 		mockMvc.perform(get("/statistics").accept(MediaType.APPLICATION_JSON))
 		.andExpect(status().isOk())
 		.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
@@ -87,7 +87,7 @@ public class StatisticsControllerTest {
 	}
 
 	@Test
-	public final void testShouldGetCacheControlHeaderForStatistics() throws Exception {
+	public void testShouldGetCacheControlHeaderForStatistics() throws Exception {
 		mockMvc.perform(get("/statistics").accept(MediaType.APPLICATION_JSON))
 		.andExpect(status().isOk())
 		.andExpect(header().string("cache-control", "public, max-age=60"));
diff --git a/src/test/java/de/thm/arsnova/services/FeedbackServiceTest.java b/src/test/java/de/thm/arsnova/services/FeedbackServiceTest.java
index e399e841..f5af00e4 100644
--- a/src/test/java/de/thm/arsnova/services/FeedbackServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/FeedbackServiceTest.java
@@ -55,7 +55,7 @@ public class FeedbackServiceTest {
 	private StubDatabaseDao databaseDao;
 
 	@Before
-	public final void setup() {
+	public void setup() {
 		userService.setUserAuthenticated(false);
 
 		feedbackService.saveFeedback("87654321", 0, new TestUser("testuser01"));
@@ -101,7 +101,7 @@ public class FeedbackServiceTest {
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		databaseDao.cleanupTestData();
 		userService.setUserAuthenticated(false);
 	}
diff --git a/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java b/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
index 25c76429..a843bd11 100644
--- a/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/QuestionServiceTest.java
@@ -74,12 +74,12 @@ public class QuestionServiceTest {
 	}
 
 	@Before
-	public final void startup() {
+	public void startup() {
 		SecurityContextHolder.clearContext();
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		SecurityContextHolder.clearContext();
 	}
 
diff --git a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
index 3f938d37..53042cae 100644
--- a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java
@@ -84,12 +84,12 @@ public class SessionServiceTest {
 	}
 
 	@Before
-	public final void startup() {
+	public void startup() {
 		SecurityContextHolder.clearContext();
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 		databaseDao.cleanupTestData();
 		SecurityContextHolder.clearContext();
 		userService.setUserAuthenticated(false);
diff --git a/src/test/java/de/thm/arsnova/services/StatisticsServiceTest.java b/src/test/java/de/thm/arsnova/services/StatisticsServiceTest.java
index 802d9429..405af87d 100644
--- a/src/test/java/de/thm/arsnova/services/StatisticsServiceTest.java
+++ b/src/test/java/de/thm/arsnova/services/StatisticsServiceTest.java
@@ -36,7 +36,7 @@ public class StatisticsServiceTest {
 	private IUserService userService;
 
 	@Before
-	public final void startup() {
+	public void startup() {
 		MockitoAnnotations.initMocks(this);
 		when(userService.loggedInUsers()).thenReturn(42);
 		when(databaseDao.countQuestions()).thenReturn(123);
@@ -46,11 +46,11 @@ public class StatisticsServiceTest {
 	}
 
 	@After
-	public final void cleanup() {
+	public void cleanup() {
 	}
 
 	@Test
-	public final void testShouldReturnEqualStatistics() {
+	public void testShouldReturnEqualStatistics() {
 		final Statistics actual = statisticsService.getStatistics();
 
 		final Statistics expected = new Statistics();
-- 
GitLab