From 47e590ea6688b4af38e4ed9230cae49a28153e61 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Sun, 12 Aug 2018 15:50:11 +0200
Subject: [PATCH] Refactor package structure

Consistently use singular for packages which contain mixed kinds of
classes. Moved a few classes to packages that better fit them.
---
 pom.xml                                       |  2 +-
 .../java/de/thm/arsnova/aop/package-info.java |  4 -
 .../de/thm/arsnova/cache/CacheBusterImpl.java |  2 +-
 .../arsnova/cache/CacheBusterListener.java    |  4 +-
 .../java/de/thm/arsnova/config/AppConfig.java | 14 ++-
 ...anceConfig.java => PersistenceConfig.java} | 12 +--
 .../controller/AbstractEntityController.java  | 10 +--
 .../arsnova/controller/AnswerController.java  |  4 +-
 .../controller/AuthenticationController.java  |  9 +-
 .../arsnova/controller/CommentController.java |  4 +-
 .../arsnova/controller/ContentController.java |  8 +-
 .../ControllerExceptionHandler.java           | 16 ++--
 .../arsnova/controller/MotdController.java    |  4 +-
 .../arsnova/controller/RoomController.java    |  4 +-
 .../arsnova/controller/UserController.java    | 14 +--
 .../arsnova/controller/WelcomeController.java |  4 +-
 .../v2/AuthenticationController.java          | 10 +--
 .../controller/v2/CommentController.java      | 19 ++--
 .../controller/v2/ContentController.java      | 67 +++++++--------
 .../controller/v2/CourseController.java       |  8 +-
 .../controller/v2/FeedbackController.java     | 12 +--
 .../controller/v2/LegacyController.java       |  4 +-
 .../arsnova/controller/v2/MotdController.java | 32 +++----
 .../arsnova/controller/v2/RoomController.java | 42 ++++-----
 .../controller/v2/SocketController.java       |  4 +-
 .../controller/v2/StatisticsController.java   |  4 +-
 .../arsnova/controller/v2/UserController.java |  4 +-
 .../{events => event}/ArsnovaEvent.java       |  2 +-
 .../ArsnovaEventVisitor.java                  |  2 +-
 .../{events => event}/ChangeScoreEvent.java   |  4 +-
 .../DeleteAllLectureAnswersEvent.java         |  4 +-
 .../DeleteAllPreparationAnswersEvent.java     |  4 +-
 .../DeleteAllQuestionsAnswersEvent.java       |  4 +-
 .../DeleteAllQuestionsEvent.java              |  4 +-
 .../{events => event}/DeleteAnswerEvent.java  |  6 +-
 .../{events => event}/DeleteCommentEvent.java |  6 +-
 .../DeleteFeedbackForRoomsEvent.java          |  6 +-
 .../DeleteQuestionEvent.java                  |  6 +-
 .../{events => event}/DeleteRoomEvent.java    |  4 +-
 .../{events => event}/FeatureChangeEvent.java |  4 +-
 .../FlipFlashcardsEvent.java                  |  4 +-
 .../{events => event}/LockFeedbackEvent.java  |  4 +-
 .../{events => event}/LockQuestionEvent.java  |  6 +-
 .../{events => event}/LockQuestionsEvent.java |  6 +-
 .../{events => event}/LockVoteEvent.java      |  6 +-
 .../{events => event}/LockVotesEvent.java     |  6 +-
 .../{events => event}/NewAnswerEvent.java     | 10 +--
 .../{events => event}/NewCommentEvent.java    |  6 +-
 .../{events => event}/NewFeedbackEvent.java   |  4 +-
 .../{events => event}/NewQuestionEvent.java   |  6 +-
 .../{events => event}/NewRoomEvent.java       |  4 +-
 .../{events => event}/PiRoundCancelEvent.java |  6 +-
 .../PiRoundDelayedStartEvent.java             |  6 +-
 .../{events => event}/PiRoundEndEvent.java    |  6 +-
 .../{events => event}/PiRoundResetEvent.java  |  6 +-
 .../arsnova/{events => event}/RoomEvent.java  |  4 +-
 .../{events => event}/StatusRoomEvent.java    |  4 +-
 .../UnlockQuestionEvent.java                  |  6 +-
 .../UnlockQuestionsEvent.java                 |  6 +-
 .../{events => event}/UnlockVoteEvent.java    |  6 +-
 .../{events => event}/UnlockVotesEvent.java   |  6 +-
 .../{events => event}/package-info.java       |  2 +-
 .../arsnova/{entities => model}/Answer.java   |  6 +-
 .../{entities => model}/AnswerStatistics.java |  4 +-
 .../{entities => model}/Attachment.java       |  4 +-
 .../{entities => model}/Authorize.java        |  4 +-
 .../{entities => model}/ChoiceAnswer.java     |  4 +-
 .../ChoiceQuestionContent.java                |  4 +-
 .../ClientAuthentication.java                 |  4 +-
 .../arsnova/{entities => model}/Comment.java  |  4 +-
 .../arsnova/{entities => model}/Content.java  |  6 +-
 .../arsnova/{entities => model}/Entity.java   |  4 +-
 .../arsnova/{entities => model}/Feedback.java |  4 +-
 .../{entities => model}/FindQuery.java        |  4 +-
 .../arsnova/{entities => model}/LogEntry.java |  6 +-
 .../{entities => model}/LoginCredentials.java |  4 +-
 .../{entities => model}/MigrationState.java   |  4 +-
 .../thm/arsnova/{entities => model}/Motd.java |  4 +-
 .../thm/arsnova/{entities => model}/Room.java |  5 +-
 .../{entities => model}/RoomStatistics.java   |  4 +-
 .../{entities => model}/ScoreOptions.java     |  4 +-
 .../ServiceDescription.java                   |  4 +-
 .../{entities => model}/Statistics.java       |  4 +-
 .../{entities => model}/TextAnswer.java       |  4 +-
 .../{entities => model}/UserProfile.java      |  4 +-
 .../migration/FromV2Migrator.java             | 78 ++++++++---------
 .../migration/ToV2Migrator.java               | 50 +++++------
 .../migration/v2/Answer.java                  |  4 +-
 .../migration/v2/AnswerOption.java            |  4 +-
 .../migration/v2/ClientAuthentication.java    |  6 +-
 .../migration/v2/Comment.java                 |  4 +-
 .../migration/v2/CommentReadingCount.java     |  4 +-
 .../migration/v2/Content.java                 |  4 +-
 .../migration/v2/DbUser.java                  |  4 +-
 .../migration/v2/Entity.java                  |  4 +-
 .../migration/v2/LogEntry.java                |  4 +-
 .../migration/v2/LoggedIn.java                |  4 +-
 .../migration/v2/Motd.java                    |  4 +-
 .../migration/v2/MotdList.java                |  4 +-
 .../migration/v2/Room.java                    |  6 +-
 .../migration/v2/RoomFeature.java             |  4 +-
 .../migration/v2/RoomInfo.java                |  4 +-
 .../migration/v2/VisitedRoom.java             |  4 +-
 .../{entities => model}/package-info.java     |  2 +-
 .../serialization/CouchDbDocumentMixIn.java   |  4 +-
 .../serialization/CouchDbDocumentModule.java  |  6 +-
 .../serialization/CouchDbDocumentV2MixIn.java |  4 +-
 .../CouchDbObjectMapperFactory.java           |  2 +-
 .../CouchDbTypeFieldConverter.java            |  4 +-
 .../CouchDbTypeFieldV2Converter.java          | 20 ++---
 .../FormatAnswerTypeIdResolver.java           | 10 +--
 .../FormatContentTypeIdResolver.java          |  6 +-
 .../serialization/View.java                   |  2 +-
 .../transport/AnswerQueueElement.java         | 10 +--
 .../transport/ImportExportContainer.java      | 20 ++---
 .../transport/ScoreStatistics.java            |  4 +-
 .../transport/package-info.java               |  2 +-
 .../SessionStatisticsRepository.java          |  8 --
 .../persistance/StatisticsRepository.java     |  7 --
 .../AnswerRepository.java                     |  8 +-
 .../AttachmentRepository.java                 |  4 +-
 .../CommentRepository.java                    |  8 +-
 .../ContentRepository.java                    |  6 +-
 .../CrudRepository.java                       |  2 +-
 .../LogEntryRepository.java                   |  4 +-
 .../MotdRepository.java                       |  4 +-
 .../RoomRepository.java                       |  8 +-
 .../SessionStatisticsRepository.java          |  8 ++
 .../persistence/StatisticsRepository.java     |  7 ++
 .../UserRepository.java                       |  4 +-
 .../couchdb/CouchDbAnswerRepository.java      | 12 +--
 .../couchdb/CouchDbAttachmentRepository.java  |  6 +-
 .../couchdb/CouchDbCommentRepository.java     | 12 +--
 .../couchdb/CouchDbContentRepository.java     | 10 +--
 .../couchdb/CouchDbCrudRepository.java        |  6 +-
 .../couchdb/CouchDbInitializer.java           |  8 +-
 .../couchdb/CouchDbLogEntryRepository.java    |  6 +-
 .../couchdb/CouchDbMotdRepository.java        |  6 +-
 .../couchdb/CouchDbRoomRepository.java        | 16 ++--
 .../CouchDbSessionStatisticsRepository.java   |  8 +-
 .../couchdb/CouchDbStatisticsRepository.java  |  6 +-
 .../couchdb/CouchDbUserRepository.java        |  6 +-
 .../MigrateFromLegacyCondition.java           |  2 +-
 .../couchdb/migrations/Migration.java         |  2 +-
 .../couchdb/migrations/MigrationExecutor.java |  4 +-
 .../couchdb/migrations/V2ToV3Migration.java   | 86 +++++++++----------
 .../support/MangoCouchDbConnector.java        |  6 +-
 .../support/MangoQueryResultParser.java       |  2 +-
 .../couchdb/support/MangoResponseHandler.java |  2 +-
 .../couchdb/support/PagedMangoResponse.java   |  2 +-
 .../ApplicationPermissionEvaluator.java       | 18 ++--
 .../security/CasUserDetailsService.java       |  4 +-
 .../security/CustomLdapUserDetailsMapper.java |  4 +-
 .../security/GuestUserDetailsService.java     |  5 +-
 .../RegisteredUserDetailsService.java         |  4 +-
 .../java/de/thm/arsnova/security/User.java    |  4 +-
 .../thm/arsnova/security/jwt/JwtService.java  |  4 +-
 .../pac4j/OauthUserDetailsService.java        |  4 +-
 .../{services => service}/AnswerService.java  | 10 +--
 .../AnswerServiceImpl.java                    | 34 ++++----
 .../AttachmentService.java                    |  4 +-
 .../AttachmentServiceImpl.java                |  6 +-
 .../CommentFindQueryService.java              |  6 +-
 .../{services => service}/CommentService.java |  6 +-
 .../CommentServiceImpl.java                   | 25 +++---
 .../{services => service}/ContentService.java |  6 +-
 .../ContentServiceImpl.java                   | 24 +++---
 .../DefaultEntityServiceImpl.java             |  8 +-
 .../{services => service}/EntityService.java  |  4 +-
 .../FeedbackService.java                      |  6 +-
 .../FeedbackServiceImpl.java                  | 20 ++---
 .../FeedbackStorageService.java               |  8 +-
 .../FeedbackStorageServiceImpl.java           |  8 +-
 .../FindQueryService.java                     |  6 +-
 .../{services => service}/MotdService.java    |  4 +-
 .../MotdServiceImpl.java                      | 10 +--
 .../ResponseProviderService.java              |  2 +-
 .../ResponseProviderServiceImpl.java          |  2 +-
 .../RoomFindQueryService.java                 |  8 +-
 .../{services => service}/RoomService.java    | 10 +--
 .../RoomServiceImpl.java                      | 43 +++++-----
 .../StatisticsService.java                    |  4 +-
 .../StatisticsServiceImpl.java                |  6 +-
 .../{services => service}/StatusService.java  |  2 +-
 .../StatusServiceImpl.java                    |  2 +-
 .../{services => service}/TimerService.java   |  4 +-
 .../TimerServiceImpl.java                     | 24 +++---
 .../{services => service}/UserService.java    | 10 +--
 .../UserServiceImpl.java                      | 23 +++--
 .../{services => service}/package-info.java   |  2 +-
 .../score/QuestionBasedScoreCalculator.java   |  8 +-
 .../score/QuestionScore.java                  |  4 +-
 .../{services => service}/score/Score.java    |  4 +-
 .../score/ScoreBasedScoreCalculator.java      |  8 +-
 .../score/ScoreCalculator.java                |  8 +-
 .../score/ScoreCalculatorFactory.java         |  2 +-
 .../score/ScoreCalculatorFactoryImpl.java     |  6 +-
 .../score/ScoreCalculatorListener.java        |  6 +-
 .../score/UserScore.java                      |  4 +-
 .../score/VariantScoreCalculator.java         | 10 +--
 .../java/de/thm/arsnova/util/ImageUtils.java  |  2 +-
 .../thm/arsnova/web/InternalEntityAspect.java |  4 +-
 .../arsnova/web/MaintenanceModeFilter.java    |  2 +-
 .../thm/arsnova/{aop => web}/RangeAspect.java |  4 +-
 .../web/ResponseInterceptorHandler.java       |  2 +-
 .../exceptions/BadRequestException.java       |  2 +-
 .../exceptions/ForbiddenException.java        |  2 +-
 .../exceptions/NoContentException.java        |  2 +-
 .../exceptions/NotFoundException.java         |  2 +-
 .../exceptions/NotImplementedException.java   |  2 +-
 .../exceptions/PayloadTooLargeException.java  |  2 +-
 .../PreconditionFailedException.java          |  2 +-
 .../exceptions/UnauthorizedException.java     |  2 +-
 .../{ => web}/exceptions/package-info.java    |  2 +-
 .../websocket/ArsnovaSocketioServerImpl.java  | 66 +++++++-------
 .../ArsnovaSocketioServerListener.java        |  4 +-
 .../WebsocketAuthenticationAspect.java        |  4 +-
 .../arsnova/websocket/message/Content.java    |  2 +-
 src/main/resources/META-INF/aop.xml           |  2 +-
 src/main/webapp/WEB-INF/web.xml               |  2 +-
 .../de/thm/arsnova/config/TestAppConfig.java  |  4 +-
 .../arsnova/config/TestPersistanceConfig.java |  2 +-
 .../controller/AbstractControllerTest.java    |  2 +-
 .../v2/AuthenticationControllerTest.java      |  2 +-
 .../controller/v2/CourseControllerTest.java   |  3 +-
 .../{entities => model}/ContentTest.java      |  8 +-
 .../{entities => model}/EntityTest.java       |  2 +-
 .../{entities => model}/FeedbackTest.java     |  2 +-
 .../{entities => model}/TestClient.java       |  4 +-
 .../migration/FromV2MigratorTest.java         | 10 +--
 .../migration/ToV2MigratorTest.java           | 12 +--
 .../DefaultEntityServiceImplTest.java         |  6 +-
 .../StubUserService.java                      |  8 +-
 .../UserServiceTest.java                      |  6 +-
 .../QuestionBasedScoreCalculatorTest.java     | 10 +--
 .../score/ScoreBasedScoreCalculatorTest.java  | 10 +--
 .../test/context/support/WithMockUser.java    |  2 +-
 .../WithMockUserSecurityContextFactory.java   |  2 +-
 238 files changed, 903 insertions(+), 922 deletions(-)
 delete mode 100644 src/main/java/de/thm/arsnova/aop/package-info.java
 rename src/main/java/de/thm/arsnova/config/{PersistanceConfig.java => PersistenceConfig.java} (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/ArsnovaEvent.java (97%)
 rename src/main/java/de/thm/arsnova/{events => event}/ArsnovaEventVisitor.java (98%)
 rename src/main/java/de/thm/arsnova/{events => event}/ChangeScoreEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteAllLectureAnswersEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteAllPreparationAnswersEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteAllQuestionsAnswersEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteAllQuestionsEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteAnswerEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteCommentEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteFeedbackForRoomsEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteQuestionEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/DeleteRoomEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/FeatureChangeEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/FlipFlashcardsEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/LockFeedbackEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/LockQuestionEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/LockQuestionsEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/LockVoteEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/LockVotesEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/NewAnswerEvent.java (87%)
 rename src/main/java/de/thm/arsnova/{events => event}/NewCommentEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/NewFeedbackEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/NewQuestionEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/NewRoomEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/PiRoundCancelEvent.java (91%)
 rename src/main/java/de/thm/arsnova/{events => event}/PiRoundDelayedStartEvent.java (95%)
 rename src/main/java/de/thm/arsnova/{events => event}/PiRoundEndEvent.java (93%)
 rename src/main/java/de/thm/arsnova/{events => event}/PiRoundResetEvent.java (93%)
 rename src/main/java/de/thm/arsnova/{events => event}/RoomEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/StatusRoomEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/UnlockQuestionEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/UnlockQuestionsEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/UnlockVoteEvent.java (94%)
 rename src/main/java/de/thm/arsnova/{events => event}/UnlockVotesEvent.java (92%)
 rename src/main/java/de/thm/arsnova/{events => event}/package-info.java (58%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Answer.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/AnswerStatistics.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Attachment.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Authorize.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/ChoiceAnswer.java (89%)
 rename src/main/java/de/thm/arsnova/{entities => model}/ChoiceQuestionContent.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/ClientAuthentication.java (92%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Comment.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Content.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Entity.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Feedback.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/FindQuery.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/LogEntry.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/LoginCredentials.java (88%)
 rename src/main/java/de/thm/arsnova/{entities => model}/MigrationState.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Motd.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Room.java (99%)
 rename src/main/java/de/thm/arsnova/{entities => model}/RoomStatistics.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/ScoreOptions.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/ServiceDescription.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/Statistics.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/TextAnswer.java (93%)
 rename src/main/java/de/thm/arsnova/{entities => model}/UserProfile.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/FromV2Migrator.java (79%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/ToV2Migrator.java (86%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Answer.java (99%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/AnswerOption.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/ClientAuthentication.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Comment.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/CommentReadingCount.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Content.java (99%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/DbUser.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Entity.java (91%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/LogEntry.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/LoggedIn.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Motd.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/MotdList.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/Room.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/RoomFeature.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/RoomInfo.java (98%)
 rename src/main/java/de/thm/arsnova/{entities => model}/migration/v2/VisitedRoom.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/package-info.java (63%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbDocumentMixIn.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbDocumentModule.java (84%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbDocumentV2MixIn.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbObjectMapperFactory.java (96%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbTypeFieldConverter.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/CouchDbTypeFieldV2Converter.java (78%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/FormatAnswerTypeIdResolver.java (87%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/FormatContentTypeIdResolver.java (91%)
 rename src/main/java/de/thm/arsnova/{entities => model}/serialization/View.java (94%)
 rename src/main/java/de/thm/arsnova/{entities => model}/transport/AnswerQueueElement.java (87%)
 rename src/main/java/de/thm/arsnova/{entities => model}/transport/ImportExportContainer.java (95%)
 rename src/main/java/de/thm/arsnova/{entities => model}/transport/ScoreStatistics.java (97%)
 rename src/main/java/de/thm/arsnova/{entities => model}/transport/package-info.java (86%)
 delete mode 100644 src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
 delete mode 100644 src/main/java/de/thm/arsnova/persistance/StatisticsRepository.java
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/AnswerRepository.java (89%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/AttachmentRepository.java (52%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/CommentRepository.java (74%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/ContentRepository.java (91%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/CrudRepository.java (97%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/LogEntryRepository.java (97%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/MotdRepository.java (93%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/RoomRepository.java (89%)
 create mode 100644 src/main/java/de/thm/arsnova/persistence/SessionStatisticsRepository.java
 create mode 100644 src/main/java/de/thm/arsnova/persistence/StatisticsRepository.java
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/UserRepository.java (93%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbAnswerRepository.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbAttachmentRepository.java (68%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbCommentRepository.java (94%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbContentRepository.java (97%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbCrudRepository.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbInitializer.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbLogEntryRepository.java (91%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbMotdRepository.java (94%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbRoomRepository.java (97%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbSessionStatisticsRepository.java (91%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbStatisticsRepository.java (95%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/CouchDbUserRepository.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/migrations/MigrateFromLegacyCondition.java (91%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/migrations/Migration.java (93%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/migrations/MigrationExecutor.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/migrations/V2ToV3Migration.java (85%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/support/MangoCouchDbConnector.java (98%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/support/MangoQueryResultParser.java (98%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/support/MangoResponseHandler.java (96%)
 rename src/main/java/de/thm/arsnova/{persistance => persistence}/couchdb/support/PagedMangoResponse.java (90%)
 rename src/main/java/de/thm/arsnova/{services => service}/AnswerService.java (87%)
 rename src/main/java/de/thm/arsnova/{services => service}/AnswerServiceImpl.java (95%)
 rename src/main/java/de/thm/arsnova/{services => service}/AttachmentService.java (74%)
 rename src/main/java/de/thm/arsnova/{services => service}/AttachmentServiceImpl.java (88%)
 rename src/main/java/de/thm/arsnova/{services => service}/CommentFindQueryService.java (92%)
 rename src/main/java/de/thm/arsnova/{services => service}/CommentService.java (75%)
 rename src/main/java/de/thm/arsnova/{services => service}/CommentServiceImpl.java (88%)
 rename src/main/java/de/thm/arsnova/{services => service}/ContentService.java (95%)
 rename src/main/java/de/thm/arsnova/{services => service}/ContentServiceImpl.java (97%)
 rename src/main/java/de/thm/arsnova/{services => service}/DefaultEntityServiceImpl.java (97%)
 rename src/main/java/de/thm/arsnova/{services => service}/EntityService.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/FeedbackService.java (90%)
 rename src/main/java/de/thm/arsnova/{services => service}/FeedbackServiceImpl.java (93%)
 rename src/main/java/de/thm/arsnova/{services => service}/FeedbackStorageService.java (70%)
 rename src/main/java/de/thm/arsnova/{services => service}/FeedbackStorageServiceImpl.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/FindQueryService.java (89%)
 rename src/main/java/de/thm/arsnova/{services => service}/MotdService.java (95%)
 rename src/main/java/de/thm/arsnova/{services => service}/MotdServiceImpl.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/ResponseProviderService.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/ResponseProviderServiceImpl.java (97%)
 rename src/main/java/de/thm/arsnova/{services => service}/RoomFindQueryService.java (92%)
 rename src/main/java/de/thm/arsnova/{services => service}/RoomService.java (91%)
 rename src/main/java/de/thm/arsnova/{services => service}/RoomServiceImpl.java (93%)
 rename src/main/java/de/thm/arsnova/{services => service}/StatisticsService.java (92%)
 rename src/main/java/de/thm/arsnova/{services => service}/StatisticsServiceImpl.java (93%)
 rename src/main/java/de/thm/arsnova/{services => service}/StatusService.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/StatusServiceImpl.java (98%)
 rename src/main/java/de/thm/arsnova/{services => service}/TimerService.java (76%)
 rename src/main/java/de/thm/arsnova/{services => service}/TimerServiceImpl.java (91%)
 rename src/main/java/de/thm/arsnova/{services => service}/UserService.java (91%)
 rename src/main/java/de/thm/arsnova/{services => service}/UserServiceImpl.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/package-info.java (62%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/QuestionBasedScoreCalculator.java (94%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/QuestionScore.java (95%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/Score.java (96%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/ScoreBasedScoreCalculator.java (92%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/ScoreCalculator.java (83%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/ScoreCalculatorFactory.java (95%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/ScoreCalculatorFactoryImpl.java (97%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/ScoreCalculatorListener.java (91%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/UserScore.java (92%)
 rename src/main/java/de/thm/arsnova/{services => service}/score/VariantScoreCalculator.java (89%)
 rename src/main/java/de/thm/arsnova/{aop => web}/RangeAspect.java (97%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/BadRequestException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/ForbiddenException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/NoContentException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/NotFoundException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/NotImplementedException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/PayloadTooLargeException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/PreconditionFailedException.java (92%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/UnauthorizedException.java (91%)
 rename src/main/java/de/thm/arsnova/{ => web}/exceptions/package-info.java (62%)
 rename src/test/java/de/thm/arsnova/{entities => model}/ContentTest.java (95%)
 rename src/test/java/de/thm/arsnova/{entities => model}/EntityTest.java (99%)
 rename src/test/java/de/thm/arsnova/{entities => model}/FeedbackTest.java (98%)
 rename src/test/java/de/thm/arsnova/{entities => model}/TestClient.java (92%)
 rename src/test/java/de/thm/arsnova/{entities => model}/migration/FromV2MigratorTest.java (93%)
 rename src/test/java/de/thm/arsnova/{entities => model}/migration/ToV2MigratorTest.java (95%)
 rename src/test/java/de/thm/arsnova/{services => service}/DefaultEntityServiceImplTest.java (97%)
 rename src/test/java/de/thm/arsnova/{services => service}/StubUserService.java (93%)
 rename src/test/java/de/thm/arsnova/{services => service}/UserServiceTest.java (97%)
 rename src/test/java/de/thm/arsnova/{services => service}/score/QuestionBasedScoreCalculatorTest.java (96%)
 rename src/test/java/de/thm/arsnova/{services => service}/score/ScoreBasedScoreCalculatorTest.java (95%)

diff --git a/pom.xml b/pom.xml
index 75bc70cf6..c101484e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -476,7 +476,7 @@
 							<springmvc>true</springmvc>
 							<locations>
 								<location>de.thm.arsnova.controller.v2</location>
-								<location>de.thm.arsnova.entities.v2</location>
+								<location>de.thm.arsnova.model.v2</location>
 							</locations>
 							<schemes>
 								<scheme>http</scheme>
diff --git a/src/main/java/de/thm/arsnova/aop/package-info.java b/src/main/java/de/thm/arsnova/aop/package-info.java
deleted file mode 100644
index b39e67531..000000000
--- a/src/main/java/de/thm/arsnova/aop/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Classes and interfaces to support aspect-oriented programming
- */
-package de.thm.arsnova.aop;
diff --git a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
index 0d02684f6..719a3ed96 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.cache;
 
-import de.thm.arsnova.events.*;
+import de.thm.arsnova.event.*;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Component;
 
diff --git a/src/main/java/de/thm/arsnova/cache/CacheBusterListener.java b/src/main/java/de/thm/arsnova/cache/CacheBusterListener.java
index eb481df4c..07baa6499 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBusterListener.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBusterListener.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.cache;
 
-import de.thm.arsnova.events.ArsnovaEvent;
-import de.thm.arsnova.events.ArsnovaEventVisitor;
+import de.thm.arsnova.event.ArsnovaEvent;
+import de.thm.arsnova.event.ArsnovaEventVisitor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java
index 58d218d6a..b7dcb3b72 100644
--- a/src/main/java/de/thm/arsnova/config/AppConfig.java
+++ b/src/main/java/de/thm/arsnova/config/AppConfig.java
@@ -20,13 +20,13 @@ package de.thm.arsnova.config;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.ToV2Migrator;
 import de.thm.arsnova.util.ImageUtils;
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.client.ConnectorClientImpl;
-import de.thm.arsnova.entities.serialization.CouchDbDocumentModule;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.CouchDbDocumentModule;
+import de.thm.arsnova.model.serialization.View;
 import de.thm.arsnova.web.PathApiVersionContentNegotiationStrategy;
 import de.thm.arsnova.websocket.ArsnovaSocketioServer;
 import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
@@ -81,13 +81,11 @@ import java.util.List;
  * AspectJ's weaving).
  */
 @ComponentScan({
-		"de.thm.arsnova.aop",
 		"de.thm.arsnova.cache",
 		"de.thm.arsnova.controller",
-		"de.thm.arsnova.dao",
-		"de.thm.arsnova.events",
+		"de.thm.arsnova.event",
 		"de.thm.arsnova.security",
-		"de.thm.arsnova.services",
+		"de.thm.arsnova.service",
 		"de.thm.arsnova.web"})
 @Configuration
 @EnableAsync
diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistenceConfig.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/config/PersistanceConfig.java
rename to src/main/java/de/thm/arsnova/config/PersistenceConfig.java
index 6c81d4956..713e5fb66 100644
--- a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java
+++ b/src/main/java/de/thm/arsnova/config/PersistenceConfig.java
@@ -1,9 +1,9 @@
 package de.thm.arsnova.config;
 
-import de.thm.arsnova.entities.serialization.CouchDbObjectMapperFactory;
-import de.thm.arsnova.persistance.*;
-import de.thm.arsnova.persistance.couchdb.*;
-import de.thm.arsnova.persistance.couchdb.support.MangoCouchDbConnector;
+import de.thm.arsnova.model.serialization.CouchDbObjectMapperFactory;
+import de.thm.arsnova.persistence.*;
+import de.thm.arsnova.persistence.couchdb.*;
+import de.thm.arsnova.persistence.couchdb.support.MangoCouchDbConnector;
 import org.ektorp.impl.StdCouchDbInstance;
 import org.ektorp.spring.HttpClientFactoryBean;
 import org.springframework.beans.factory.annotation.Value;
@@ -14,11 +14,11 @@ import org.springframework.context.annotation.Primary;
 import org.springframework.context.annotation.Profile;
 
 @ComponentScan({
-		"de.thm.arsnova.persistance.couchdb"
+		"de.thm.arsnova.persistence.couchdb"
 })
 @Configuration
 @Profile("!test")
-public class PersistanceConfig {
+public class PersistenceConfig {
 	private static final int MIGRATION_SOCKET_TIMEOUT = 30000;
 
 	@Value("${couchdb.name}") private String couchDbName;
diff --git a/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java b/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java
index 5e27588ac..0b6c96c8f 100644
--- a/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java
+++ b/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java
@@ -17,11 +17,11 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.entities.FindQuery;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.services.EntityService;
-import de.thm.arsnova.services.FindQueryService;
+import de.thm.arsnova.model.Entity;
+import de.thm.arsnova.model.FindQuery;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.service.EntityService;
+import de.thm.arsnova.service.FindQueryService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/de/thm/arsnova/controller/AnswerController.java b/src/main/java/de/thm/arsnova/controller/AnswerController.java
index d0fd8606c..2f0a8b2f0 100644
--- a/src/main/java/de/thm/arsnova/controller/AnswerController.java
+++ b/src/main/java/de/thm/arsnova/controller/AnswerController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.services.AnswerService;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.service.AnswerService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
diff --git a/src/main/java/de/thm/arsnova/controller/AuthenticationController.java b/src/main/java/de/thm/arsnova/controller/AuthenticationController.java
index f7bb957e4..91b3a35f5 100644
--- a/src/main/java/de/thm/arsnova/controller/AuthenticationController.java
+++ b/src/main/java/de/thm/arsnova/controller/AuthenticationController.java
@@ -1,10 +1,9 @@
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.ClientAuthentication;
-import de.thm.arsnova.entities.LoginCredentials;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
-import org.pac4j.core.client.Client;
+import de.thm.arsnova.model.ClientAuthentication;
+import de.thm.arsnova.model.LoginCredentials;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
diff --git a/src/main/java/de/thm/arsnova/controller/CommentController.java b/src/main/java/de/thm/arsnova/controller/CommentController.java
index ea66759d7..5e1ada7ff 100644
--- a/src/main/java/de/thm/arsnova/controller/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/CommentController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.services.CommentService;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.service.CommentService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
diff --git a/src/main/java/de/thm/arsnova/controller/ContentController.java b/src/main/java/de/thm/arsnova/controller/ContentController.java
index 3856ed20a..de17e6d37 100644
--- a/src/main/java/de/thm/arsnova/controller/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/ContentController.java
@@ -17,10 +17,10 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.services.AnswerService;
-import de.thm.arsnova.services.ContentService;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.service.AnswerService;
+import de.thm.arsnova.service.ContentService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java b/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java
index d6223f7a7..2016f8def 100644
--- a/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java
+++ b/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java
@@ -17,14 +17,14 @@
  */
 package de.thm.arsnova.controller;
 
-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.exceptions.NotImplementedException;
-import de.thm.arsnova.exceptions.PayloadTooLargeException;
-import de.thm.arsnova.exceptions.PreconditionFailedException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
+import de.thm.arsnova.web.exceptions.BadRequestException;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
+import de.thm.arsnova.web.exceptions.NoContentException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.NotImplementedException;
+import de.thm.arsnova.web.exceptions.PayloadTooLargeException;
+import de.thm.arsnova.web.exceptions.PreconditionFailedException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
 import org.ektorp.DocumentNotFoundException;
 import org.slf4j.event.Level;
 import org.springframework.http.HttpStatus;
diff --git a/src/main/java/de/thm/arsnova/controller/MotdController.java b/src/main/java/de/thm/arsnova/controller/MotdController.java
index 7193fc3b0..6b842ee81 100644
--- a/src/main/java/de/thm/arsnova/controller/MotdController.java
+++ b/src/main/java/de/thm/arsnova/controller/MotdController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.services.MotdService;
+import de.thm.arsnova.model.Motd;
+import de.thm.arsnova.service.MotdService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
diff --git a/src/main/java/de/thm/arsnova/controller/RoomController.java b/src/main/java/de/thm/arsnova/controller/RoomController.java
index dc1b2fbdf..db38d8a3d 100644
--- a/src/main/java/de/thm/arsnova/controller/RoomController.java
+++ b/src/main/java/de/thm/arsnova/controller/RoomController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.services.RoomService;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.service.RoomService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java
index 40a661362..e6549fbfa 100644
--- a/src/main/java/de/thm/arsnova/controller/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/UserController.java
@@ -1,13 +1,13 @@
 package de.thm.arsnova.controller;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.LoginCredentials;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.serialization.View;
-import de.thm.arsnova.exceptions.BadRequestException;
-import de.thm.arsnova.exceptions.ForbiddenException;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.LoginCredentials;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.serialization.View;
+import de.thm.arsnova.web.exceptions.BadRequestException;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.UserService;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
diff --git a/src/main/java/de/thm/arsnova/controller/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
index 40070b7c7..29fea9bae 100644
--- a/src/main/java/de/thm/arsnova/controller/WelcomeController.java
+++ b/src/main/java/de/thm/arsnova/controller/WelcomeController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.exceptions.BadRequestException;
-import de.thm.arsnova.exceptions.NoContentException;
+import de.thm.arsnova.web.exceptions.BadRequestException;
+import de.thm.arsnova.web.exceptions.NoContentException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
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 276e5df78..a7f293d4a 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java
@@ -19,12 +19,12 @@ package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.config.SecurityConfig;
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.ServiceDescription;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.exceptions.UnauthorizedException;
+import de.thm.arsnova.model.ServiceDescription;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
 import de.thm.arsnova.security.User;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.service.UserService;
 import org.pac4j.core.context.J2EContext;
 import org.pac4j.core.exception.HttpAction;
 import org.pac4j.oauth.client.FacebookClient;
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 0f9f6e12f..dab81e01c 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/CommentController.java
@@ -18,15 +18,14 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.PaginationController;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
-import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
-import de.thm.arsnova.exceptions.BadRequestException;
-import de.thm.arsnova.services.CommentService;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.ToV2Migrator;
+import de.thm.arsnova.model.migration.v2.Comment;
+import de.thm.arsnova.model.migration.v2.CommentReadingCount;
+import de.thm.arsnova.service.CommentService;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.UserService;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.web.Pagination;
 import io.swagger.annotations.Api;
@@ -117,7 +116,7 @@ public class CommentController extends PaginationController {
 			@ApiParam(value = "Room-Key from current room", required = true) @RequestParam("sessionkey") final String roomShortId,
 			@ApiParam(value = "the body from the new comment", required = true) @RequestBody final Comment comment
 			) {
-		de.thm.arsnova.entities.Comment commentV3 = fromV2Migrator.migrate(comment);
+		de.thm.arsnova.model.Comment commentV3 = fromV2Migrator.migrate(comment);
 		Room roomV3 = roomService.getByShortId(roomShortId);
 		commentV3.setRoomId(roomV3.getId());
 		commentService.create(commentV3);
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 a0b71d115..b6bbe1fdb 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
@@ -18,22 +18,21 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.PaginationController;
-import de.thm.arsnova.entities.ChoiceAnswer;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.TextAnswer;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
-import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.migration.v2.Content;
-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.exceptions.NotImplementedException;
-import de.thm.arsnova.services.AnswerService;
-import de.thm.arsnova.services.ContentService;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.TimerService;
+import de.thm.arsnova.model.ChoiceAnswer;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.TextAnswer;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.ToV2Migrator;
+import de.thm.arsnova.model.migration.v2.Answer;
+import de.thm.arsnova.model.migration.v2.Content;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
+import de.thm.arsnova.web.exceptions.NoContentException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.NotImplementedException;
+import de.thm.arsnova.service.AnswerService;
+import de.thm.arsnova.service.ContentService;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.TimerService;
 import de.thm.arsnova.util.PaginationListDecorator;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.web.Pagination;
@@ -92,7 +91,7 @@ public class ContentController extends PaginationController {
 	})
 	@RequestMapping(value = "/{contentId}", method = RequestMethod.GET)
 	public Content getContent(@PathVariable final String contentId) {
-		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
+		final de.thm.arsnova.model.Content content = contentService.get(contentId);
 		if (content != null) {
 			return toV2Migrator.migrate(content);
 		}
@@ -108,7 +107,7 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
 	public Content postContent(@RequestBody final Content content) {
-		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
+		de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content);
 		final String roomId = roomService.getIdByShortId(content.getSessionKeyword());
 		contentV3.setRoomId(roomId);
 		contentService.create(contentV3);
@@ -123,7 +122,7 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/bulk", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
 	public List<Content> bulkPostContents(@RequestBody final List<Content> contents) {
-		List<de.thm.arsnova.entities.Content> contentsV3 =
+		List<de.thm.arsnova.model.Content> contentsV3 =
 				contents.stream().map(c -> contentService.create(fromV2Migrator.migrate(c))).collect(Collectors.toList());
 		return contentsV3.stream().map(toV2Migrator::migrate).collect(Collectors.toList());
 	}
@@ -210,7 +209,7 @@ public class ContentController extends PaginationController {
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		boolean disable = false;
-		Iterable<de.thm.arsnova.entities.Content> contents;
+		Iterable<de.thm.arsnova.model.Content> contents;
 
 		if (disableVote != null) {
 			disable = disableVote;
@@ -236,7 +235,7 @@ public class ContentController extends PaginationController {
 			@RequestParam(required = false) final Boolean publish,
 			@RequestBody final Content content
 			) {
-		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
+		de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content);
 		if (publish != null) {
 			contentV3.getState().setVisible(publish);
 		}
@@ -254,7 +253,7 @@ public class ContentController extends PaginationController {
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		boolean p = publish == null || publish;
-		Iterable<de.thm.arsnova.entities.Content> contents;
+		Iterable<de.thm.arsnova.model.Content> contents;
 
 		if (lectureContentsOnly) {
 			contents = contentService.getByRoomIdAndGroup(roomId, "lecture");
@@ -275,7 +274,7 @@ public class ContentController extends PaginationController {
 			@RequestParam(required = false) final Boolean showStatistics,
 			@RequestBody final Content content
 			) {
-		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
+		de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content);
 		if (showStatistics != null) {
 			contentV3.getState().setResponsesVisible(showStatistics);
 		}
@@ -290,7 +289,7 @@ public class ContentController extends PaginationController {
 			@RequestParam(required = false) final Boolean showCorrectAnswer,
 			@RequestBody final Content content
 			) {
-		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
+		de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content);
 		if (showCorrectAnswer != null) {
 			contentV3.getState().setSolutionVisible(showCorrectAnswer);
 		}
@@ -310,7 +309,7 @@ public class ContentController extends PaginationController {
 			final HttpServletResponse response
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
-		Iterable<de.thm.arsnova.entities.Content> contents;
+		Iterable<de.thm.arsnova.model.Content> contents;
 		if (lectureContentsOnly) {
 			contents = contentService.getByRoomIdAndGroup(roomId, "lecture");
 		} else if (flashcardsOnly) {
@@ -438,14 +437,14 @@ public class ContentController extends PaginationController {
 			@PathVariable final String contentId,
 			final HttpServletResponse response
 			) {
-		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
-		final de.thm.arsnova.entities.Answer answer = answerService.getMyAnswer(contentId);
+		final de.thm.arsnova.model.Content content = contentService.get(contentId);
+		final de.thm.arsnova.model.Answer answer = answerService.getMyAnswer(contentId);
 		if (answer == null) {
 			response.setStatus(HttpStatus.NO_CONTENT.value());
 			return null;
 		}
 
-		if (content.getFormat().equals(de.thm.arsnova.entities.Content.Format.TEXT)) {
+		if (content.getFormat().equals(de.thm.arsnova.model.Content.Format.TEXT)) {
 			return toV2Migrator.migrate((TextAnswer) answer);
 		} else {
 			return toV2Migrator.migrate((ChoiceAnswer) answer, (ChoiceQuestionContent) content);
@@ -474,12 +473,12 @@ public class ContentController extends PaginationController {
 			@RequestParam(value = "piround", required = false) final Integer piRound,
 			@RequestParam(value = "all", required = false, defaultValue = "false") final Boolean allAnswers,
 			final HttpServletResponse response) {
-		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
+		final de.thm.arsnova.model.Content content = contentService.get(contentId);
 		if (content instanceof ChoiceQuestionContent) {
 			return toV2Migrator.migrate(answerService.getAllStatistics(contentId),
 					(ChoiceQuestionContent) content, content.getState().getRound());
 		} else {
-			List<de.thm.arsnova.entities.TextAnswer> answers;
+			List<de.thm.arsnova.model.TextAnswer> answers;
 			if (allAnswers) {
 				answers = answerService.getAllTextAnswers(contentId, -1, -1);
 			} else if (null == piRound) {
@@ -507,8 +506,8 @@ public class ContentController extends PaginationController {
 			@RequestBody final Answer answer,
 			final HttpServletResponse response
 			) {
-		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
-		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, content);
+		final de.thm.arsnova.model.Content content = contentService.get(contentId);
+		final de.thm.arsnova.model.Answer answerV3 = fromV2Migrator.migrate(answer, content);
 
 		if (answerV3 instanceof TextAnswer) {
 			return toV2Migrator.migrate((TextAnswer) answerService.saveAnswer(contentId, answerV3));
@@ -526,8 +525,8 @@ public class ContentController extends PaginationController {
 			@RequestBody final Answer answer,
 			final HttpServletResponse response
 			) {
-		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
-		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, content);
+		final de.thm.arsnova.model.Content content = contentService.get(contentId);
+		final de.thm.arsnova.model.Answer answerV3 = fromV2Migrator.migrate(answer, content);
 
 		if (answerV3 instanceof TextAnswer) {
 			return toV2Migrator.migrate((TextAnswer) answerService.updateAnswer(answerV3));
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 651a8a418..17a766d38 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java
@@ -21,10 +21,10 @@ import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.connector.model.UserRole;
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.exceptions.NotImplementedException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.web.exceptions.NotImplementedException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.service.UserService;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
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 4abe82834..3374251f6 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java
@@ -18,12 +18,12 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.Feedback;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.services.FeedbackService;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.Feedback;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.service.FeedbackService;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.UserService;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
 import org.springframework.beans.factory.annotation.Autowired;
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 834d1fd97..5ff4fe630 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
@@ -18,8 +18,8 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.services.CommentService;
-import de.thm.arsnova.services.ContentService;
+import de.thm.arsnova.service.CommentService;
+import de.thm.arsnova.service.ContentService;
 import de.thm.arsnova.web.DeprecatedApi;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
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 acdb93d63..416fa0918 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java
@@ -18,16 +18,16 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
-import de.thm.arsnova.entities.migration.v2.Motd;
-import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.exceptions.ForbiddenException;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.ToV2Migrator;
+import de.thm.arsnova.model.migration.v2.Motd;
+import de.thm.arsnova.model.migration.v2.MotdList;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
 import de.thm.arsnova.security.User;
-import de.thm.arsnova.services.MotdService;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.service.MotdService;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.UserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -83,7 +83,7 @@ public class MotdController extends AbstractController {
 		@ApiParam(value = "audience", required = false) @RequestParam(value = "audience", defaultValue = "all") final String audience,
 		@ApiParam(value = "sessionkey", required = false) @RequestParam(value = "sessionkey", required = false) final String roomShortId
 	) {
-		List<de.thm.arsnova.entities.Motd> motds;
+		List<de.thm.arsnova.model.Motd> motds;
 		Date date = new Date(System.currentTimeMillis());
 		if (!clientdate.isEmpty()) {
 			date.setTime(Long.parseLong(clientdate));
@@ -116,9 +116,9 @@ public class MotdController extends AbstractController {
 			@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd,
 			final HttpServletResponse response
 			) {
-		de.thm.arsnova.entities.Motd motdV3 = fromV2Migrator.migrate(motd);
+		de.thm.arsnova.model.Motd motdV3 = fromV2Migrator.migrate(motd);
 		String roomId = roomService.getIdByShortId(motd.getSessionkey());
-		if (de.thm.arsnova.entities.Motd.Audience.ROOM == motdV3.getAudience() && roomId != null) {
+		if (de.thm.arsnova.model.Motd.Audience.ROOM == motdV3.getAudience() && roomId != null) {
 			motdService.save(roomId, motdV3);
 		} else {
 			motdService.save(motdV3);
@@ -133,9 +133,9 @@ public class MotdController extends AbstractController {
 			@ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdId,
 			@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd
 			) {
-		de.thm.arsnova.entities.Motd motdV3 = fromV2Migrator.migrate(motd);
+		de.thm.arsnova.model.Motd motdV3 = fromV2Migrator.migrate(motd);
 		String roomId = roomService.getIdByShortId(motd.getSessionkey());
-		if (motdV3.getAudience() == de.thm.arsnova.entities.Motd.Audience.ROOM && roomId != null) {
+		if (motdV3.getAudience() == de.thm.arsnova.model.Motd.Audience.ROOM && roomId != null) {
 			motdService.update(roomId, motdV3);
 		} else {
 			motdService.update(motdV3);
@@ -147,8 +147,8 @@ public class MotdController extends AbstractController {
 	@ApiOperation(value = "deletes a message of the day", nickname = "deleteMotd")
 	@RequestMapping(value = "/{motdId}", method = RequestMethod.DELETE)
 	public void deleteMotd(@ApiParam(value = "Motd-key from the message that shall be deleted", required = true) @PathVariable final String motdId) {
-		de.thm.arsnova.entities.Motd motd = motdService.get(motdId);
-		if (motd.getAudience() == de.thm.arsnova.entities.Motd.Audience.ROOM) {
+		de.thm.arsnova.model.Motd motd = motdService.get(motdId);
+		if (motd.getAudience() == de.thm.arsnova.model.Motd.Audience.ROOM) {
 			motdService.deleteByRoomId(motd.getRoomId(), motd);
 		} else {
 			motdService.delete(motd);
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 ca3909e36..9c051b469 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.PaginationController;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
-import de.thm.arsnova.entities.migration.v2.Room;
-import de.thm.arsnova.entities.migration.v2.RoomFeature;
-import de.thm.arsnova.entities.migration.v2.RoomInfo;
-import de.thm.arsnova.entities.transport.ImportExportContainer;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.RoomServiceImpl;
-import de.thm.arsnova.services.RoomServiceImpl.RoomNameComparator;
-import de.thm.arsnova.services.RoomServiceImpl.RoomShortNameComparator;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.ToV2Migrator;
+import de.thm.arsnova.model.migration.v2.Room;
+import de.thm.arsnova.model.migration.v2.RoomFeature;
+import de.thm.arsnova.model.migration.v2.RoomInfo;
+import de.thm.arsnova.model.transport.ImportExportContainer;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.RoomServiceImpl;
+import de.thm.arsnova.service.RoomServiceImpl.RoomNameComparator;
+import de.thm.arsnova.service.RoomServiceImpl.RoomShortNameComparator;
+import de.thm.arsnova.service.UserService;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.web.Pagination;
 import io.swagger.annotations.Api;
@@ -95,7 +95,7 @@ public class RoomController extends PaginationController {
 			nickname = "deleteRoom")
 	@RequestMapping(value = "/{shortId}", method = RequestMethod.DELETE)
 	public void deleteRoom(@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId) {
-		de.thm.arsnova.entities.Room room = roomService.getByShortId(shortId);
+		de.thm.arsnova.model.Room room = roomService.getByShortId(shortId);
 		roomService.deleteCascading(room);
 	}
 
@@ -170,7 +170,7 @@ public class RoomController extends PaginationController {
 					"username", defaultValue = "") final String username,
 			final HttpServletResponse response
 			) {
-		List<de.thm.arsnova.entities.Room> rooms;
+		List<de.thm.arsnova.model.Room> rooms;
 
 		if (!"".equals(username)) {
 			final String userId = userService.getByUsername(username).getId();
@@ -231,7 +231,7 @@ public class RoomController extends PaginationController {
 			@ApiParam(value = "sort by", required = false) @RequestParam(value = "sortby", defaultValue = "name") final String sortby,
 			final HttpServletResponse response
 			) {
-		List<de.thm.arsnova.entities.Room> rooms;
+		List<de.thm.arsnova.model.Room> rooms;
 		if (!visitedOnly) {
 			rooms = roomService.getMyRoomsInfo(offset, limit);
 		} else {
@@ -261,7 +261,7 @@ public class RoomController extends PaginationController {
 	public List<RoomInfo> getMyPublicPoolRooms(
 			final HttpServletResponse response
 			) {
-		List<de.thm.arsnova.entities.Room> rooms = roomService.getMyPublicPoolRoomsInfo();
+		List<de.thm.arsnova.model.Room> rooms = roomService.getMyPublicPoolRoomsInfo();
 
 		if (rooms == null || rooms.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -280,7 +280,7 @@ public class RoomController extends PaginationController {
 	public List<Room> getPublicPoolRooms(
 			final HttpServletResponse response
 			) {
-		List<de.thm.arsnova.entities.Room> rooms = roomService.getPublicPoolRoomsInfo();
+		List<de.thm.arsnova.model.Room> rooms = roomService.getPublicPoolRoomsInfo();
 
 		if (rooms == null || rooms.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -330,7 +330,7 @@ public class RoomController extends PaginationController {
 			) {
 		String id = roomService.getIdByShortId(shortId);
 		roomService.setActive(id, false);
-		de.thm.arsnova.entities.Room roomInfo = roomService.copyRoomToPublicPool(shortId, publicPool);
+		de.thm.arsnova.model.Room roomInfo = roomService.copyRoomToPublicPool(shortId, publicPool);
 		roomService.setActive(id, true);
 
 		return toV2Migrator.migrate(roomInfo);
@@ -386,7 +386,7 @@ public class RoomController extends PaginationController {
 			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			final HttpServletResponse response
 			) {
-		de.thm.arsnova.entities.Room room = roomService.getByShortId(shortId);
+		de.thm.arsnova.model.Room room = roomService.getByShortId(shortId);
 		return toV2Migrator.migrate(room.getSettings());
 	}
 
@@ -398,7 +398,7 @@ public class RoomController extends PaginationController {
 			@ApiParam(value = "Room feature", required = true) @RequestBody final RoomFeature features,
 			final HttpServletResponse response
 			) {
-		de.thm.arsnova.entities.Room room = roomService.getByShortId(shortId);
+		de.thm.arsnova.model.Room room = roomService.getByShortId(shortId);
 		room.setSettings(fromV2Migrator.migrate(features));
 		roomService.update(room);
 
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 9dac328ec..ab9afeef0 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java
@@ -18,8 +18,8 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.service.UserService;
 import de.thm.arsnova.websocket.ArsnovaSocketioServer;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
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 3ec01c8f0..a4529ae54 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java
@@ -18,8 +18,8 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.Statistics;
-import de.thm.arsnova.services.StatisticsService;
+import de.thm.arsnova.model.Statistics;
+import de.thm.arsnova.service.StatisticsService;
 import de.thm.arsnova.web.CacheControl;
 import de.thm.arsnova.web.DeprecatedApi;
 import io.swagger.annotations.Api;
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 d07000979..ea20a0782 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/UserController.java
@@ -18,8 +18,8 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractController;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
 import org.springframework.stereotype.Controller;
diff --git a/src/main/java/de/thm/arsnova/events/ArsnovaEvent.java b/src/main/java/de/thm/arsnova/event/ArsnovaEvent.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/events/ArsnovaEvent.java
rename to src/main/java/de/thm/arsnova/event/ArsnovaEvent.java
index 8fab76461..8c5ac9498 100644
--- a/src/main/java/de/thm/arsnova/events/ArsnovaEvent.java
+++ b/src/main/java/de/thm/arsnova/event/ArsnovaEvent.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
 import org.springframework.context.ApplicationEvent;
 
diff --git a/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java b/src/main/java/de/thm/arsnova/event/ArsnovaEventVisitor.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java
rename to src/main/java/de/thm/arsnova/event/ArsnovaEventVisitor.java
index 1092994d9..4587c4284 100644
--- a/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java
+++ b/src/main/java/de/thm/arsnova/event/ArsnovaEventVisitor.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
 /**
  * Listeners wanting to receive ARSnova's internal events should implement this interface.
diff --git a/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java b/src/main/java/de/thm/arsnova/event/ChangeScoreEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java
rename to src/main/java/de/thm/arsnova/event/ChangeScoreEvent.java
index a69a7622c..e67fc341e 100644
--- a/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java
+++ b/src/main/java/de/thm/arsnova/event/ChangeScoreEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a score related value changes.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java b/src/main/java/de/thm/arsnova/event/DeleteAllLectureAnswersEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteAllLectureAnswersEvent.java
index 1f75fcf21..210ede956 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteAllLectureAnswersEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever all answers of all lecture questions of a session are deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java b/src/main/java/de/thm/arsnova/event/DeleteAllPreparationAnswersEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteAllPreparationAnswersEvent.java
index 939667318..94d7a67c4 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteAllPreparationAnswersEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever all answers of all preparation questions of a session are deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java b/src/main/java/de/thm/arsnova/event/DeleteAllQuestionsAnswersEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteAllQuestionsAnswersEvent.java
index 4aed15448..eb587c213 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteAllQuestionsAnswersEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever all answers of all questions of a session are deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java b/src/main/java/de/thm/arsnova/event/DeleteAllQuestionsEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteAllQuestionsEvent.java
index fe0c7add7..7dd76e612 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteAllQuestionsEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever all questions of a session are deleted. Note that this implies that all answers are deleted as well,
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java b/src/main/java/de/thm/arsnova/event/DeleteAnswerEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteAnswerEvent.java
index f8642545b..eb9f816bf 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteAnswerEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a single answer is deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java b/src/main/java/de/thm/arsnova/event/DeleteCommentEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteCommentEvent.java
index 5ec64a31a..f62f3c64e 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteCommentEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever an comment is deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java b/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java
index 18cf1cca7..5942e19ad 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Room;
 
 import java.util.Set;
 
diff --git a/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java b/src/main/java/de/thm/arsnova/event/DeleteQuestionEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteQuestionEvent.java
index 8f3e53928..b2a40f6cf 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteQuestionEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a content is deleted.
diff --git a/src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java b/src/main/java/de/thm/arsnova/event/DeleteRoomEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java
rename to src/main/java/de/thm/arsnova/event/DeleteRoomEvent.java
index c4b6fc2f8..2e470d680 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java
+++ b/src/main/java/de/thm/arsnova/event/DeleteRoomEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a session is deleted. Note that this implies that all related data such as comments,
diff --git a/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java b/src/main/java/de/thm/arsnova/event/FeatureChangeEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java
rename to src/main/java/de/thm/arsnova/event/FeatureChangeEvent.java
index 346c06d51..890425edb 100644
--- a/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java
+++ b/src/main/java/de/thm/arsnova/event/FeatureChangeEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a new session is created.
diff --git a/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java b/src/main/java/de/thm/arsnova/event/FlipFlashcardsEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java
rename to src/main/java/de/thm/arsnova/event/FlipFlashcardsEvent.java
index a7484eef5..10a17302f 100644
--- a/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java
+++ b/src/main/java/de/thm/arsnova/event/FlipFlashcardsEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever voting on a question is disabled.
diff --git a/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java b/src/main/java/de/thm/arsnova/event/LockFeedbackEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
rename to src/main/java/de/thm/arsnova/event/LockFeedbackEvent.java
index 2eeadad01..b7a39b6b9 100644
--- a/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
+++ b/src/main/java/de/thm/arsnova/event/LockFeedbackEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever voting on a question is disabled.
diff --git a/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java b/src/main/java/de/thm/arsnova/event/LockQuestionEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/LockQuestionEvent.java
rename to src/main/java/de/thm/arsnova/event/LockQuestionEvent.java
index 2949980d2..54bc9ff6a 100644
--- a/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/LockQuestionEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a content is disabled, i.e., it is hidden from students.
diff --git a/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java b/src/main/java/de/thm/arsnova/event/LockQuestionsEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java
rename to src/main/java/de/thm/arsnova/event/LockQuestionsEvent.java
index 1998da80e..8c892967d 100644
--- a/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/event/LockQuestionsEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java b/src/main/java/de/thm/arsnova/event/LockVoteEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/LockVoteEvent.java
rename to src/main/java/de/thm/arsnova/event/LockVoteEvent.java
index e511a4c9c..1463e12e0 100644
--- a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/event/LockVoteEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/events/LockVotesEvent.java b/src/main/java/de/thm/arsnova/event/LockVotesEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/LockVotesEvent.java
rename to src/main/java/de/thm/arsnova/event/LockVotesEvent.java
index 2339b8593..a18cf1499 100644
--- a/src/main/java/de/thm/arsnova/events/LockVotesEvent.java
+++ b/src/main/java/de/thm/arsnova/event/LockVotesEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java b/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java
similarity index 87%
rename from src/main/java/de/thm/arsnova/events/NewAnswerEvent.java
rename to src/main/java/de/thm/arsnova/event/NewAnswerEvent.java
index 54ac0cd75..5049bf32c 100644
--- a/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java
+++ b/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a new answer is added.
diff --git a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java b/src/main/java/de/thm/arsnova/event/NewCommentEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/NewCommentEvent.java
rename to src/main/java/de/thm/arsnova/event/NewCommentEvent.java
index df5b09baa..3ad2620ea 100644
--- a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/event/NewCommentEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a new comment is added.
diff --git a/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java b/src/main/java/de/thm/arsnova/event/NewFeedbackEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java
rename to src/main/java/de/thm/arsnova/event/NewFeedbackEvent.java
index cdee0f7eb..f9bcdc525 100644
--- a/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java
+++ b/src/main/java/de/thm/arsnova/event/NewFeedbackEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever the feedback changes.
diff --git a/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java b/src/main/java/de/thm/arsnova/event/NewQuestionEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/NewQuestionEvent.java
rename to src/main/java/de/thm/arsnova/event/NewQuestionEvent.java
index cf49229b4..4cf0da993 100644
--- a/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/NewQuestionEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a new content is added.
diff --git a/src/main/java/de/thm/arsnova/events/NewRoomEvent.java b/src/main/java/de/thm/arsnova/event/NewRoomEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/NewRoomEvent.java
rename to src/main/java/de/thm/arsnova/event/NewRoomEvent.java
index 391c5f5c8..4dd067ba6 100644
--- a/src/main/java/de/thm/arsnova/events/NewRoomEvent.java
+++ b/src/main/java/de/thm/arsnova/event/NewRoomEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a new session is created.
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java b/src/main/java/de/thm/arsnova/event/PiRoundCancelEvent.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java
rename to src/main/java/de/thm/arsnova/event/PiRoundCancelEvent.java
index 77e41392f..969d4a68a 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java
+++ b/src/main/java/de/thm/arsnova/event/PiRoundCancelEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a peer instruction round is canceled.
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java b/src/main/java/de/thm/arsnova/event/PiRoundDelayedStartEvent.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
rename to src/main/java/de/thm/arsnova/event/PiRoundDelayedStartEvent.java
index bd0a79ca2..b8880c367 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
+++ b/src/main/java/de/thm/arsnova/event/PiRoundDelayedStartEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.Date;
 import java.util.HashMap;
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java b/src/main/java/de/thm/arsnova/event/PiRoundEndEvent.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
rename to src/main/java/de/thm/arsnova/event/PiRoundEndEvent.java
index 0b38d4900..ebd864bf7 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
+++ b/src/main/java/de/thm/arsnova/event/PiRoundEndEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java b/src/main/java/de/thm/arsnova/event/PiRoundResetEvent.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
rename to src/main/java/de/thm/arsnova/event/PiRoundResetEvent.java
index 9ad99fa92..a7045abfd 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
+++ b/src/main/java/de/thm/arsnova/event/PiRoundResetEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/events/RoomEvent.java b/src/main/java/de/thm/arsnova/event/RoomEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/RoomEvent.java
rename to src/main/java/de/thm/arsnova/event/RoomEvent.java
index 421ce2534..eb32f2aaa 100644
--- a/src/main/java/de/thm/arsnova/events/RoomEvent.java
+++ b/src/main/java/de/thm/arsnova/event/RoomEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Base class for all {@link ArsnovaEvent}s that are related to a room.
diff --git a/src/main/java/de/thm/arsnova/events/StatusRoomEvent.java b/src/main/java/de/thm/arsnova/event/StatusRoomEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/StatusRoomEvent.java
rename to src/main/java/de/thm/arsnova/event/StatusRoomEvent.java
index ad2b4d1a2..a981d2f31 100644
--- a/src/main/java/de/thm/arsnova/events/StatusRoomEvent.java
+++ b/src/main/java/de/thm/arsnova/event/StatusRoomEvent.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever the status of a session changes, i.e., it is enabled or disabled.
diff --git a/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java b/src/main/java/de/thm/arsnova/event/UnlockQuestionEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java
rename to src/main/java/de/thm/arsnova/event/UnlockQuestionEvent.java
index 6d23f81eb..5e09ed349 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/UnlockQuestionEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 /**
  * Fires whenever a content is enabled, i.e., it becomes visible to students.
diff --git a/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java b/src/main/java/de/thm/arsnova/event/UnlockQuestionsEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java
rename to src/main/java/de/thm/arsnova/event/UnlockQuestionsEvent.java
index be6dd5dd4..a4e5d8c6a 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/event/UnlockQuestionsEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java b/src/main/java/de/thm/arsnova/event/UnlockVoteEvent.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
rename to src/main/java/de/thm/arsnova/event/UnlockVoteEvent.java
index 0f0a814b9..962f7c546 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/event/UnlockVoteEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java b/src/main/java/de/thm/arsnova/event/UnlockVotesEvent.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java
rename to src/main/java/de/thm/arsnova/event/UnlockVotesEvent.java
index 8c49926c8..fdc50180a 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java
+++ b/src/main/java/de/thm/arsnova/event/UnlockVotesEvent.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/events/package-info.java b/src/main/java/de/thm/arsnova/event/package-info.java
similarity index 58%
rename from src/main/java/de/thm/arsnova/events/package-info.java
rename to src/main/java/de/thm/arsnova/event/package-info.java
index 838fc4cd6..636c0e300 100644
--- a/src/main/java/de/thm/arsnova/events/package-info.java
+++ b/src/main/java/de/thm/arsnova/event/package-info.java
@@ -1,4 +1,4 @@
 /**
  * ARSnova's internal event system
  */
-package de.thm.arsnova.events;
+package de.thm.arsnova.event;
diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/model/Answer.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/Answer.java
rename to src/main/java/de/thm/arsnova/model/Answer.java
index c81adc7e8..38eb277f7 100644
--- a/src/main/java/de/thm/arsnova/entities/Answer.java
+++ b/src/main/java/de/thm/arsnova/model/Answer.java
@@ -1,10 +1,10 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.JsonView;
 import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver;
-import de.thm.arsnova.entities.serialization.FormatAnswerTypeIdResolver;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.FormatAnswerTypeIdResolver;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/entities/AnswerStatistics.java b/src/main/java/de/thm/arsnova/model/AnswerStatistics.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/AnswerStatistics.java
rename to src/main/java/de/thm/arsnova/model/AnswerStatistics.java
index 336b39ab7..bf90c2b04 100644
--- a/src/main/java/de/thm/arsnova/entities/AnswerStatistics.java
+++ b/src/main/java/de/thm/arsnova/model/AnswerStatistics.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Collection;
diff --git a/src/main/java/de/thm/arsnova/entities/Attachment.java b/src/main/java/de/thm/arsnova/model/Attachment.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/Attachment.java
rename to src/main/java/de/thm/arsnova/model/Attachment.java
index 1f8d2e4fe..a3905ccd9 100644
--- a/src/main/java/de/thm/arsnova/entities/Attachment.java
+++ b/src/main/java/de/thm/arsnova/model/Attachment.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Objects;
diff --git a/src/main/java/de/thm/arsnova/entities/Authorize.java b/src/main/java/de/thm/arsnova/model/Authorize.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/Authorize.java
rename to src/main/java/de/thm/arsnova/model/Authorize.java
index 643cd1289..0458dbd8a 100644
--- a/src/main/java/de/thm/arsnova/entities/Authorize.java
+++ b/src/main/java/de/thm/arsnova/model/Authorize.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 public class Authorize {
 	private String user;
diff --git a/src/main/java/de/thm/arsnova/entities/ChoiceAnswer.java b/src/main/java/de/thm/arsnova/model/ChoiceAnswer.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/entities/ChoiceAnswer.java
rename to src/main/java/de/thm/arsnova/model/ChoiceAnswer.java
index f11f5b4f5..00d667f7f 100644
--- a/src/main/java/de/thm/arsnova/entities/ChoiceAnswer.java
+++ b/src/main/java/de/thm/arsnova/model/ChoiceAnswer.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/entities/ChoiceQuestionContent.java b/src/main/java/de/thm/arsnova/model/ChoiceQuestionContent.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/ChoiceQuestionContent.java
rename to src/main/java/de/thm/arsnova/model/ChoiceQuestionContent.java
index 0b3e34b13..400a4c00d 100644
--- a/src/main/java/de/thm/arsnova/entities/ChoiceQuestionContent.java
+++ b/src/main/java/de/thm/arsnova/model/ChoiceQuestionContent.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.ArrayList;
diff --git a/src/main/java/de/thm/arsnova/entities/ClientAuthentication.java b/src/main/java/de/thm/arsnova/model/ClientAuthentication.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/entities/ClientAuthentication.java
rename to src/main/java/de/thm/arsnova/model/ClientAuthentication.java
index 459df8a30..3d9d22b66 100644
--- a/src/main/java/de/thm/arsnova/entities/ClientAuthentication.java
+++ b/src/main/java/de/thm/arsnova/model/ClientAuthentication.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 public class ClientAuthentication {
diff --git a/src/main/java/de/thm/arsnova/entities/Comment.java b/src/main/java/de/thm/arsnova/model/Comment.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/Comment.java
rename to src/main/java/de/thm/arsnova/model/Comment.java
index c8218c48e..f25331a4a 100644
--- a/src/main/java/de/thm/arsnova/entities/Comment.java
+++ b/src/main/java/de/thm/arsnova/model/Comment.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/Content.java b/src/main/java/de/thm/arsnova/model/Content.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/Content.java
rename to src/main/java/de/thm/arsnova/model/Content.java
index 11bf0c4f6..471c98a2c 100644
--- a/src/main/java/de/thm/arsnova/entities/Content.java
+++ b/src/main/java/de/thm/arsnova/model/Content.java
@@ -1,10 +1,10 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.JsonView;
 import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver;
-import de.thm.arsnova.entities.serialization.FormatContentTypeIdResolver;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.FormatContentTypeIdResolver;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/Entity.java b/src/main/java/de/thm/arsnova/model/Entity.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/Entity.java
rename to src/main/java/de/thm/arsnova/model/Entity.java
index 9761ed86a..93add05c9 100644
--- a/src/main/java/de/thm/arsnova/entities/Entity.java
+++ b/src/main/java/de/thm/arsnova/model/Entity.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/Feedback.java b/src/main/java/de/thm/arsnova/model/Feedback.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/Feedback.java
rename to src/main/java/de/thm/arsnova/model/Feedback.java
index 235260cd1..22964d81c 100644
--- a/src/main/java/de/thm/arsnova/entities/Feedback.java
+++ b/src/main/java/de/thm/arsnova/model/Feedback.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/entities/FindQuery.java b/src/main/java/de/thm/arsnova/model/FindQuery.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/FindQuery.java
rename to src/main/java/de/thm/arsnova/model/FindQuery.java
index 0ad160608..d0364c3b7 100644
--- a/src/main/java/de/thm/arsnova/entities/FindQuery.java
+++ b/src/main/java/de/thm/arsnova/model/FindQuery.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/entities/LogEntry.java b/src/main/java/de/thm/arsnova/model/LogEntry.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/LogEntry.java
rename to src/main/java/de/thm/arsnova/model/LogEntry.java
index 894003587..e66d65c85 100644
--- a/src/main/java/de/thm/arsnova/entities/LogEntry.java
+++ b/src/main/java/de/thm/arsnova/model/LogEntry.java
@@ -1,8 +1,8 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 import java.util.Date;
 import java.util.Map;
@@ -97,7 +97,7 @@ public class LogEntry extends Entity {
 	}
 
 	@JsonView(View.Persistence.class)
-	public void setLevel(final de.thm.arsnova.entities.migration.v2.LogEntry.LogLevel level) {
+	public void setLevel(final de.thm.arsnova.model.migration.v2.LogEntry.LogLevel level) {
 		this.level = level.ordinal();
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/LoginCredentials.java b/src/main/java/de/thm/arsnova/model/LoginCredentials.java
similarity index 88%
rename from src/main/java/de/thm/arsnova/entities/LoginCredentials.java
rename to src/main/java/de/thm/arsnova/model/LoginCredentials.java
index 52668d3bf..3e90b53a6 100644
--- a/src/main/java/de/thm/arsnova/entities/LoginCredentials.java
+++ b/src/main/java/de/thm/arsnova/model/LoginCredentials.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 public class LoginCredentials {
diff --git a/src/main/java/de/thm/arsnova/entities/MigrationState.java b/src/main/java/de/thm/arsnova/model/MigrationState.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/MigrationState.java
rename to src/main/java/de/thm/arsnova/model/MigrationState.java
index 21e2eceb2..f27bb2f85 100644
--- a/src/main/java/de/thm/arsnova/entities/MigrationState.java
+++ b/src/main/java/de/thm/arsnova/model/MigrationState.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 import java.util.ArrayList;
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/Motd.java b/src/main/java/de/thm/arsnova/model/Motd.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/Motd.java
rename to src/main/java/de/thm/arsnova/model/Motd.java
index 63c04acc2..d67c19fb1 100644
--- a/src/main/java/de/thm/arsnova/entities/Motd.java
+++ b/src/main/java/de/thm/arsnova/model/Motd.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/Room.java b/src/main/java/de/thm/arsnova/model/Room.java
similarity index 99%
rename from src/main/java/de/thm/arsnova/entities/Room.java
rename to src/main/java/de/thm/arsnova/model/Room.java
index dfb4baf81..cb85893ef 100644
--- a/src/main/java/de/thm/arsnova/entities/Room.java
+++ b/src/main/java/de/thm/arsnova/model/Room.java
@@ -1,12 +1,11 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
diff --git a/src/main/java/de/thm/arsnova/entities/RoomStatistics.java b/src/main/java/de/thm/arsnova/model/RoomStatistics.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/RoomStatistics.java
rename to src/main/java/de/thm/arsnova/model/RoomStatistics.java
index 6358e1cf9..c2a94122c 100644
--- a/src/main/java/de/thm/arsnova/entities/RoomStatistics.java
+++ b/src/main/java/de/thm/arsnova/model/RoomStatistics.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 public class RoomStatistics {
diff --git a/src/main/java/de/thm/arsnova/entities/ScoreOptions.java b/src/main/java/de/thm/arsnova/model/ScoreOptions.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/ScoreOptions.java
rename to src/main/java/de/thm/arsnova/model/ScoreOptions.java
index e5559970d..c1791b437 100644
--- a/src/main/java/de/thm/arsnova/entities/ScoreOptions.java
+++ b/src/main/java/de/thm/arsnova/model/ScoreOptions.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/ServiceDescription.java b/src/main/java/de/thm/arsnova/model/ServiceDescription.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/ServiceDescription.java
rename to src/main/java/de/thm/arsnova/model/ServiceDescription.java
index c6546a724..b7724a921 100644
--- a/src/main/java/de/thm/arsnova/entities/ServiceDescription.java
+++ b/src/main/java/de/thm/arsnova/model/ServiceDescription.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 /**
  * A login service description. For example, this class is used to display the login buttons in ARSnova mobile.
diff --git a/src/main/java/de/thm/arsnova/entities/Statistics.java b/src/main/java/de/thm/arsnova/model/Statistics.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/Statistics.java
rename to src/main/java/de/thm/arsnova/model/Statistics.java
index a4a031cf1..fe7f38f4c 100644
--- a/src/main/java/de/thm/arsnova/entities/Statistics.java
+++ b/src/main/java/de/thm/arsnova/model/Statistics.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/TextAnswer.java b/src/main/java/de/thm/arsnova/model/TextAnswer.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/entities/TextAnswer.java
rename to src/main/java/de/thm/arsnova/model/TextAnswer.java
index ce959de9b..2f109c085 100644
--- a/src/main/java/de/thm/arsnova/entities/TextAnswer.java
+++ b/src/main/java/de/thm/arsnova/model/TextAnswer.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/UserProfile.java b/src/main/java/de/thm/arsnova/model/UserProfile.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/UserProfile.java
rename to src/main/java/de/thm/arsnova/model/UserProfile.java
index 1fbb2acc7..0fc793273 100644
--- a/src/main/java/de/thm/arsnova/entities/UserProfile.java
+++ b/src/main/java/de/thm/arsnova/model/UserProfile.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.springframework.core.style.ToStringCreator;
 
 import java.util.Date;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java b/src/main/java/de/thm/arsnova/model/migration/FromV2Migrator.java
similarity index 79%
rename from src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
rename to src/main/java/de/thm/arsnova/model/migration/FromV2Migrator.java
index cd5295931..281e6c3fa 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/model/migration/FromV2Migrator.java
@@ -15,13 +15,13 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration;
+package de.thm.arsnova.model.migration;
 
-import de.thm.arsnova.entities.ChoiceAnswer;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.TextAnswer;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.migration.v2.*;
+import de.thm.arsnova.model.ChoiceAnswer;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.TextAnswer;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.migration.v2.*;
 import org.checkerframework.checker.nullness.qual.Nullable;
 
 import java.util.ArrayList;
@@ -48,23 +48,23 @@ public class FromV2Migrator {
 	static final String V2_TYPE_YESNO = "yesno";
 	static final String V2_TYPE_FREETEXT = "freetext";
 	static final String V2_TYPE_GRID = "grid";
-	private static final Map<String, de.thm.arsnova.entities.Content.Format> formatMapping;
+	private static final Map<String, de.thm.arsnova.model.Content.Format> formatMapping;
 
 	private boolean ignoreRevision = false;
 
 	static {
 		formatMapping = new HashMap<>();
-		formatMapping.put(V2_TYPE_ABCD, de.thm.arsnova.entities.Content.Format.CHOICE);
-		formatMapping.put(V2_TYPE_SC, de.thm.arsnova.entities.Content.Format.CHOICE);
-		formatMapping.put(V2_TYPE_MC, de.thm.arsnova.entities.Content.Format.CHOICE);
-		formatMapping.put(V2_TYPE_VOTE, de.thm.arsnova.entities.Content.Format.SCALE);
-		formatMapping.put(V2_TYPE_SCHOOL, de.thm.arsnova.entities.Content.Format.SCALE);
-		formatMapping.put(V2_TYPE_YESNO, de.thm.arsnova.entities.Content.Format.BINARY);
-		formatMapping.put(V2_TYPE_FREETEXT, de.thm.arsnova.entities.Content.Format.TEXT);
-		formatMapping.put(V2_TYPE_GRID, de.thm.arsnova.entities.Content.Format.GRID);
+		formatMapping.put(V2_TYPE_ABCD, de.thm.arsnova.model.Content.Format.CHOICE);
+		formatMapping.put(V2_TYPE_SC, de.thm.arsnova.model.Content.Format.CHOICE);
+		formatMapping.put(V2_TYPE_MC, de.thm.arsnova.model.Content.Format.CHOICE);
+		formatMapping.put(V2_TYPE_VOTE, de.thm.arsnova.model.Content.Format.SCALE);
+		formatMapping.put(V2_TYPE_SCHOOL, de.thm.arsnova.model.Content.Format.SCALE);
+		formatMapping.put(V2_TYPE_YESNO, de.thm.arsnova.model.Content.Format.BINARY);
+		formatMapping.put(V2_TYPE_FREETEXT, de.thm.arsnova.model.Content.Format.TEXT);
+		formatMapping.put(V2_TYPE_GRID, de.thm.arsnova.model.Content.Format.GRID);
 	}
 
-	private void copyCommonProperties(final Entity from, final de.thm.arsnova.entities.Entity to) {
+	private void copyCommonProperties(final Entity from, final de.thm.arsnova.model.Entity to) {
 		to.setId(from.getId());
 		if (!ignoreRevision) {
 			to.setRevision(from.getRevision());
@@ -119,12 +119,12 @@ public class FromV2Migrator {
 		return Arrays.stream(motdList.getMotdkeys().split(",")).collect(Collectors.toSet());
 	}
 
-	public de.thm.arsnova.entities.Room migrate(final Room from, final Optional<UserProfile> owner) {
+	public de.thm.arsnova.model.Room migrate(final Room from, final Optional<UserProfile> owner) {
 		if (!owner.isPresent() && from.getCreator() != null ||
 				owner.isPresent() && !owner.get().getLoginId().equals(from.getCreator())) {
 			throw new IllegalArgumentException("Username of owner object does not match session creator.");
 		}
-		final de.thm.arsnova.entities.Room to = new de.thm.arsnova.entities.Room();
+		final de.thm.arsnova.model.Room to = new de.thm.arsnova.model.Room();
 		copyCommonProperties(from, to);
 		to.setCreationTimestamp(new Date(from.getCreationTime()));
 		to.setUpdateTimestamp(new Date());
@@ -137,7 +137,7 @@ public class FromV2Migrator {
 		to.setDescription(from.getPpDescription());
 		to.setClosed(!from.isActive());
 		if (from.hasAuthorDetails()) {
-			final de.thm.arsnova.entities.Room.Author author = new de.thm.arsnova.entities.Room.Author();
+			final de.thm.arsnova.model.Room.Author author = new de.thm.arsnova.model.Room.Author();
 			to.setAuthor(author);
 			author.setName(from.getPpAuthorName());
 			author.setMail(from.getPpAuthorMail());
@@ -146,7 +146,7 @@ public class FromV2Migrator {
 			author.setOrganizationLogo(from.getPpLogo());
 		}
 		if ("public_pool".equals(from.getSessionType())) {
-			final de.thm.arsnova.entities.Room.PoolProperties poolProperties = new de.thm.arsnova.entities.Room.PoolProperties();
+			final de.thm.arsnova.model.Room.PoolProperties poolProperties = new de.thm.arsnova.model.Room.PoolProperties();
 			to.setPoolProperties(poolProperties);
 			poolProperties.setLevel(from.getPpLevel());
 			poolProperties.setCategory(from.getPpSubject());
@@ -157,12 +157,12 @@ public class FromV2Migrator {
 		return to;
 	}
 
-	public de.thm.arsnova.entities.Room migrate(final Room from) {
+	public de.thm.arsnova.model.Room migrate(final Room from) {
 		return migrate(from, Optional.empty());
 	}
 
-	public de.thm.arsnova.entities.Room.Settings migrate(final RoomFeature feature) {
-		de.thm.arsnova.entities.Room.Settings settings = new de.thm.arsnova.entities.Room.Settings();
+	public de.thm.arsnova.model.Room.Settings migrate(final RoomFeature feature) {
+		de.thm.arsnova.model.Room.Settings settings = new de.thm.arsnova.model.Room.Settings();
 		if (feature != null) {
 			settings.setCommentsEnabled(feature.isInterposed() || feature.isInterposedFeedback()
 					|| feature.isTwitterWall() || feature.isTotal());
@@ -179,8 +179,8 @@ public class FromV2Migrator {
 		return settings;
 	}
 
-	public de.thm.arsnova.entities.Content migrate(final Content from) {
-		de.thm.arsnova.entities.Content to;
+	public de.thm.arsnova.model.Content migrate(final Content from) {
+		de.thm.arsnova.model.Content to;
 		switch (from.getQuestionType()) {
 			case V2_TYPE_ABCD:
 			case V2_TYPE_SC:
@@ -193,7 +193,7 @@ public class FromV2Migrator {
 				to.setFormat(formatMapping.get(from.getQuestionType()));
 				choiceQuestionContent.setMultiple(V2_TYPE_MC.equals(from.getQuestionType()));
 				for (int i = 0; i < from.getPossibleAnswers().size(); i++) {
-					de.thm.arsnova.entities.migration.v2.AnswerOption fromOption = from.getPossibleAnswers().get(i);
+					de.thm.arsnova.model.migration.v2.AnswerOption fromOption = from.getPossibleAnswers().get(i);
 					ChoiceQuestionContent.AnswerOption toOption = new ChoiceQuestionContent.AnswerOption();
 					toOption.setLabel(fromOption.getText());
 					toOption.setPoints(fromOption.getValue());
@@ -205,8 +205,8 @@ public class FromV2Migrator {
 
 				break;
 			case V2_TYPE_FREETEXT:
-				to = new de.thm.arsnova.entities.Content();
-				to.setFormat(de.thm.arsnova.entities.Content.Format.TEXT);
+				to = new de.thm.arsnova.model.Content();
+				to.setFormat(de.thm.arsnova.model.Content.Format.TEXT);
 				break;
 			default:
 				throw new IllegalArgumentException("Unsupported content format.");
@@ -218,7 +218,7 @@ public class FromV2Migrator {
 		to.setBody(from.getText());
 		to.setAbstentionsAllowed(from.isAbstention());
 		to.setAbstentionsAllowed(from.isAbstention());
-		de.thm.arsnova.entities.Content.State state = to.getState();
+		de.thm.arsnova.model.Content.State state = to.getState();
 		state.setRound(from.getPiRound());
 		state.setVisible(from.isActive());
 		state.setResponsesVisible(from.isShowStatistic());
@@ -228,7 +228,7 @@ public class FromV2Migrator {
 		return to;
 	}
 
-	public de.thm.arsnova.entities.Answer migrate(final Answer from, final de.thm.arsnova.entities.Content content) {
+	public de.thm.arsnova.model.Answer migrate(final Answer from, final de.thm.arsnova.model.Content content) {
 		if (content instanceof ChoiceQuestionContent) {
 			ChoiceQuestionContent choiceQuestionContent = (ChoiceQuestionContent) content;
 			return migrate(from, choiceQuestionContent.getOptions(), choiceQuestionContent.isMultiple());
@@ -288,12 +288,12 @@ public class FromV2Migrator {
 		return to;
 	}
 
-	public de.thm.arsnova.entities.Comment migrate(final Comment from, @Nullable final UserProfile creator) {
+	public de.thm.arsnova.model.Comment migrate(final Comment from, @Nullable final UserProfile creator) {
 		if (creator == null && from.getCreator() != null ||
 				creator != null && !creator.getLoginId().equals(from.getCreator())) {
 			throw new IllegalArgumentException("Username of creator object does not match comment creator.");
 		}
-		final de.thm.arsnova.entities.Comment to = new de.thm.arsnova.entities.Comment();
+		final de.thm.arsnova.model.Comment to = new de.thm.arsnova.model.Comment();
 		copyCommonProperties(from, to);
 		to.setRoomId(from.getSessionId());
 		if (creator != null) {
@@ -308,12 +308,12 @@ public class FromV2Migrator {
 	}
 
 
-	public de.thm.arsnova.entities.Comment migrate(final Comment from) {
+	public de.thm.arsnova.model.Comment migrate(final Comment from) {
 		return migrate(from, null);
 	}
 
-	public de.thm.arsnova.entities.Motd migrate(final Motd from) {
-		final de.thm.arsnova.entities.Motd to = new de.thm.arsnova.entities.Motd();
+	public de.thm.arsnova.model.Motd migrate(final Motd from) {
+		final de.thm.arsnova.model.Motd to = new de.thm.arsnova.model.Motd();
 		copyCommonProperties(from, to);
 		to.setCreationTimestamp(from.getStartdate());
 		to.setUpdateTimestamp(new Date());
@@ -321,16 +321,16 @@ public class FromV2Migrator {
 		to.setEndDate(from.getEnddate());
 		switch (from.getAudience()) {
 			case "all":
-				to.setAudience(de.thm.arsnova.entities.Motd.Audience.ALL);
+				to.setAudience(de.thm.arsnova.model.Motd.Audience.ALL);
 				break;
 			case "tutors":
-				to.setAudience(de.thm.arsnova.entities.Motd.Audience.AUTHORS);
+				to.setAudience(de.thm.arsnova.model.Motd.Audience.AUTHORS);
 				break;
 			case "students":
-				to.setAudience(de.thm.arsnova.entities.Motd.Audience.PARTICIPANTS);
+				to.setAudience(de.thm.arsnova.model.Motd.Audience.PARTICIPANTS);
 				break;
 			case "session":
-				to.setAudience(de.thm.arsnova.entities.Motd.Audience.ROOM);
+				to.setAudience(de.thm.arsnova.model.Motd.Audience.ROOM);
 				break;
 		}
 		to.setTitle(from.getTitle());
diff --git a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java b/src/main/java/de/thm/arsnova/model/migration/ToV2Migrator.java
similarity index 86%
rename from src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
rename to src/main/java/de/thm/arsnova/model/migration/ToV2Migrator.java
index 4649c0a78..22ffea137 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/model/migration/ToV2Migrator.java
@@ -15,13 +15,13 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration;
+package de.thm.arsnova.model.migration;
 
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.RoomStatistics;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.migration.v2.*;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.RoomStatistics;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.migration.v2.*;
 
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -30,7 +30,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import static de.thm.arsnova.entities.migration.FromV2Migrator.*;
+import static de.thm.arsnova.model.migration.FromV2Migrator.*;
 
 /**
  * Converts entities from current model version to legacy version 2.
@@ -39,7 +39,7 @@ import static de.thm.arsnova.entities.migration.FromV2Migrator.*;
  */
 public class ToV2Migrator {
 
-	private void copyCommonProperties(final de.thm.arsnova.entities.Entity from, final Entity to) {
+	private void copyCommonProperties(final de.thm.arsnova.model.Entity from, final Entity to) {
 		to.setId(from.getId());
 		to.setRevision(from.getRevision());
 	}
@@ -65,7 +65,7 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Room migrate(final de.thm.arsnova.entities.Room from, final Optional<UserProfile> owner) {
+	public Room migrate(final de.thm.arsnova.model.Room from, final Optional<UserProfile> owner) {
 		final Room to = new Room();
 		copyCommonProperties(from, to);
 		to.setKeyword(from.getShortId());
@@ -87,11 +87,11 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Room migrate(final de.thm.arsnova.entities.Room from) {
+	public Room migrate(final de.thm.arsnova.model.Room from) {
 		return migrate(from, Optional.empty());
 	}
 
-	public RoomFeature migrate(final de.thm.arsnova.entities.Room.Settings settings) {
+	public RoomFeature migrate(final de.thm.arsnova.model.Room.Settings settings) {
 		RoomFeature feature = new RoomFeature();
 
 		/* Features */
@@ -159,7 +159,7 @@ public class ToV2Migrator {
 		return feature;
 	}
 
-	public RoomInfo migrateStats(final de.thm.arsnova.entities.Room from) {
+	public RoomInfo migrateStats(final de.thm.arsnova.model.Room from) {
 		RoomInfo to = new RoomInfo(migrate(from));
 		RoomStatistics stats = from.getStatistics();
 		to.setNumQuestions(stats.getContentCount());
@@ -171,7 +171,7 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Content migrate(final de.thm.arsnova.entities.Content from) {
+	public Content migrate(final de.thm.arsnova.model.Content from) {
 		final Content to = new Content();
 		copyCommonProperties(from, to);
 		to.setSessionId(from.getRoomId());
@@ -226,7 +226,7 @@ public class ToV2Migrator {
 					throw new IllegalArgumentException("Unsupported content format.");
 			}
 		}
-		de.thm.arsnova.entities.Content.State state = from.getState();
+		de.thm.arsnova.model.Content.State state = from.getState();
 		to.setPiRound(state.getRound());
 		to.setActive(state.isVisible());
 		to.setShowStatistic(state.isResponsesVisible());
@@ -239,8 +239,8 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Answer migrate(final de.thm.arsnova.entities.ChoiceAnswer from,
-			final de.thm.arsnova.entities.ChoiceQuestionContent content, final Optional<UserProfile> creator) {
+	public Answer migrate(final de.thm.arsnova.model.ChoiceAnswer from,
+			final de.thm.arsnova.model.ChoiceQuestionContent content, final Optional<UserProfile> creator) {
 		final Answer to = new Answer();
 		copyCommonProperties(from, to);
 		to.setQuestionId(from.getContentId());
@@ -273,13 +273,13 @@ public class ToV2Migrator {
 		return answers.stream().collect(Collectors.joining(","));
 	}
 
-	public Answer migrate(final de.thm.arsnova.entities.ChoiceAnswer from,
-			final de.thm.arsnova.entities.ChoiceQuestionContent content) {
+	public Answer migrate(final de.thm.arsnova.model.ChoiceAnswer from,
+			final de.thm.arsnova.model.ChoiceQuestionContent content) {
 		return migrate(from, content, Optional.empty());
 	}
 
-	public Answer migrate(final de.thm.arsnova.entities.TextAnswer from,
-			final Optional<de.thm.arsnova.entities.Content> content, final Optional<UserProfile> creator) {
+	public Answer migrate(final de.thm.arsnova.model.TextAnswer from,
+			final Optional<de.thm.arsnova.model.Content> content, final Optional<UserProfile> creator) {
 		final Answer to = new Answer();
 		copyCommonProperties(from, to);
 		to.setQuestionId(from.getContentId());
@@ -295,11 +295,11 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Answer migrate(final de.thm.arsnova.entities.TextAnswer from) {
+	public Answer migrate(final de.thm.arsnova.model.TextAnswer from) {
 		return migrate(from, Optional.empty(), Optional.empty());
 	}
 
-	public Comment migrate(final de.thm.arsnova.entities.Comment from, final Optional<UserProfile> creator) {
+	public Comment migrate(final de.thm.arsnova.model.Comment from, final Optional<UserProfile> creator) {
 		final Comment to = new Comment();
 		copyCommonProperties(from, to);
 		to.setSessionId(from.getRoomId());
@@ -314,11 +314,11 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Comment migrate(final de.thm.arsnova.entities.Comment from) {
+	public Comment migrate(final de.thm.arsnova.model.Comment from) {
 		return migrate(from, Optional.empty());
 	}
 
-	public Motd migrate(final de.thm.arsnova.entities.Motd from) {
+	public Motd migrate(final de.thm.arsnova.model.Motd from) {
 		final Motd to = new Motd();
 		copyCommonProperties(from, to);
 		to.setMotdkey(from.getId());
@@ -347,7 +347,7 @@ public class ToV2Migrator {
 	}
 
 	public List<Answer> migrate(final AnswerStatistics from,
-			final de.thm.arsnova.entities.ChoiceQuestionContent content, int round) {
+			final de.thm.arsnova.model.ChoiceQuestionContent content, int round) {
 		if (round < 1 || round > content.getState().getRound()) {
 			throw new IllegalArgumentException("Invalid value for round");
 		}
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java b/src/main/java/de/thm/arsnova/model/migration/v2/Answer.java
similarity index 99%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Answer.java
index d160a6afb..681093b44 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Answer.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java b/src/main/java/de/thm/arsnova/model/migration/v2/AnswerOption.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/AnswerOption.java
index b655008a7..7e72b2734 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/AnswerOption.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/ClientAuthentication.java b/src/main/java/de/thm/arsnova/model/migration/v2/ClientAuthentication.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/ClientAuthentication.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/ClientAuthentication.java
index fe187412e..b4c67c3d3 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/ClientAuthentication.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/ClientAuthentication.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.serialization.View;
 import de.thm.arsnova.security.User;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.core.Authentication;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java b/src/main/java/de/thm/arsnova/model/migration/v2/Comment.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Comment.java
index 0da816cbf..de12c6630 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Comment.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java b/src/main/java/de/thm/arsnova/model/migration/v2/CommentReadingCount.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/CommentReadingCount.java
index 79271bad0..686a4149a 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/CommentReadingCount.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java b/src/main/java/de/thm/arsnova/model/migration/v2/Content.java
similarity index 99%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Content.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Content.java
index 04c920121..f804e3259 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Content.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java b/src/main/java/de/thm/arsnova/model/migration/v2/DbUser.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/DbUser.java
index 610be70a6..bcb6815e9 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/DbUser.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/DbUser.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 /**
  * A user account for ARSnova's own registration and login process.
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java b/src/main/java/de/thm/arsnova/model/migration/v2/Entity.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Entity.java
index 38528ee37..c76a7c1dd 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Entity.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Entity.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 public interface Entity {
 	String getId();
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java b/src/main/java/de/thm/arsnova/model/migration/v2/LogEntry.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/LogEntry.java
index a4c8b35ab..b3e8632d9 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/LogEntry.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/LogEntry.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 
 import java.util.Map;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java b/src/main/java/de/thm/arsnova/model/migration/v2/LoggedIn.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/LoggedIn.java
index d4b6e0a03..98b870592 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/LoggedIn.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 
 import java.util.ArrayList;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java b/src/main/java/de/thm/arsnova/model/migration/v2/Motd.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Motd.java
index 2a3a80a94..440dbc9a1 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Motd.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java b/src/main/java/de/thm/arsnova/model/migration/v2/MotdList.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/MotdList.java
index d044b7b06..8411386c5 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/MotdList.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java b/src/main/java/de/thm/arsnova/model/migration/v2/Room.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/Room.java
index 0d9863320..566bc5a96 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/Room.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.ScoreOptions;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.ScoreOptions;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java b/src/main/java/de/thm/arsnova/model/migration/v2/RoomFeature.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/RoomFeature.java
index aed77c9e5..f8635ac89 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/RoomFeature.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java b/src/main/java/de/thm/arsnova/model/migration/v2/RoomInfo.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/RoomInfo.java
index e22516606..599115d89 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/RoomInfo.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java b/src/main/java/de/thm/arsnova/model/migration/v2/VisitedRoom.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
rename to src/main/java/de/thm/arsnova/model/migration/v2/VisitedRoom.java
index 4434d33d2..ffa741467 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
+++ b/src/main/java/de/thm/arsnova/model/migration/v2/VisitedRoom.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration.v2;
+package de.thm.arsnova.model.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 
 /**
diff --git a/src/main/java/de/thm/arsnova/entities/package-info.java b/src/main/java/de/thm/arsnova/model/package-info.java
similarity index 63%
rename from src/main/java/de/thm/arsnova/entities/package-info.java
rename to src/main/java/de/thm/arsnova/model/package-info.java
index ed8a4656b..91ada1f83 100644
--- a/src/main/java/de/thm/arsnova/entities/package-info.java
+++ b/src/main/java/de/thm/arsnova/model/package-info.java
@@ -1,4 +1,4 @@
 /**
  * Classes to translate objects to and from JSON
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentMixIn.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentMixIn.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentMixIn.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentMixIn.java
index cf0c862f7..74a16826e 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentMixIn.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentMixIn.java
@@ -15,13 +15,13 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 
 @JsonIgnoreProperties(value = {"type"}, allowGetters = true)
 public abstract class CouchDbDocumentMixIn {
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentModule.java
similarity index 84%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentModule.java
index bf6cfd26c..a297aa28a 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentModule.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentModule.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.databind.module.SimpleModule;
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 
 public class CouchDbDocumentModule extends SimpleModule {
 	public CouchDbDocumentModule() {
@@ -28,6 +28,6 @@ public class CouchDbDocumentModule extends SimpleModule {
 	@Override
 	public void setupModule(SetupContext context) {
 		context.setMixInAnnotations(Entity.class, CouchDbDocumentMixIn.class);
-		context.setMixInAnnotations(de.thm.arsnova.entities.migration.v2.Entity.class, CouchDbDocumentV2MixIn.class);
+		context.setMixInAnnotations(de.thm.arsnova.model.migration.v2.Entity.class, CouchDbDocumentV2MixIn.class);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentV2MixIn.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentV2MixIn.java
index b1cba4e5d..4e06a77e6 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbDocumentV2MixIn.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbDocumentV2MixIn.java
@@ -15,13 +15,13 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 
 @JsonIgnoreProperties(value = {"type"}, allowGetters = true)
 public abstract class CouchDbDocumentV2MixIn {
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbObjectMapperFactory.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbObjectMapperFactory.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbObjectMapperFactory.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbObjectMapperFactory.java
index 6fbbc6359..748b65c6a 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbObjectMapperFactory.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbObjectMapperFactory.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.databind.MapperFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldConverter.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldConverter.java
index b9fefcadb..9918dfc72 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldConverter.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.Converter;
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 
 public class CouchDbTypeFieldConverter implements Converter<Class<? extends Entity>, String> {
 
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java b/src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldV2Converter.java
similarity index 78%
rename from src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java
rename to src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldV2Converter.java
index d0ed69da2..41ee2c099 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldV2Converter.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/CouchDbTypeFieldV2Converter.java
@@ -15,20 +15,20 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.Converter;
-import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.DbUser;
-import de.thm.arsnova.entities.migration.v2.Entity;
-import de.thm.arsnova.entities.migration.v2.LogEntry;
-import de.thm.arsnova.entities.migration.v2.Motd;
-import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.model.migration.v2.Answer;
+import de.thm.arsnova.model.migration.v2.Comment;
+import de.thm.arsnova.model.migration.v2.Content;
+import de.thm.arsnova.model.migration.v2.DbUser;
+import de.thm.arsnova.model.migration.v2.Entity;
+import de.thm.arsnova.model.migration.v2.LogEntry;
+import de.thm.arsnova.model.migration.v2.Motd;
+import de.thm.arsnova.model.migration.v2.MotdList;
+import de.thm.arsnova.model.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/FormatAnswerTypeIdResolver.java b/src/main/java/de/thm/arsnova/model/serialization/FormatAnswerTypeIdResolver.java
similarity index 87%
rename from src/main/java/de/thm/arsnova/entities/serialization/FormatAnswerTypeIdResolver.java
rename to src/main/java/de/thm/arsnova/model/serialization/FormatAnswerTypeIdResolver.java
index 5e2f3335b..c3d48485a 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/FormatAnswerTypeIdResolver.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/FormatAnswerTypeIdResolver.java
@@ -1,14 +1,14 @@
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.databind.DatabindContext;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase;
 import com.fasterxml.jackson.databind.type.TypeFactory;
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.ChoiceAnswer;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.TextAnswer;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.ChoiceAnswer;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.TextAnswer;
 
 import java.io.IOException;
 
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/FormatContentTypeIdResolver.java b/src/main/java/de/thm/arsnova/model/serialization/FormatContentTypeIdResolver.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/entities/serialization/FormatContentTypeIdResolver.java
rename to src/main/java/de/thm/arsnova/model/serialization/FormatContentTypeIdResolver.java
index 2b2834460..9936b8e97 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/FormatContentTypeIdResolver.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/FormatContentTypeIdResolver.java
@@ -1,12 +1,12 @@
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.databind.DatabindContext;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase;
 import com.fasterxml.jackson.databind.type.TypeFactory;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.Content;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.Content;
 
 import java.io.IOException;
 
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/View.java b/src/main/java/de/thm/arsnova/model/serialization/View.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/entities/serialization/View.java
rename to src/main/java/de/thm/arsnova/model/serialization/View.java
index e57b49f86..8a6829578 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/View.java
+++ b/src/main/java/de/thm/arsnova/model/serialization/View.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.serialization;
+package de.thm.arsnova.model.serialization;
 
 public class View {
 	public interface Public {}
diff --git a/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java b/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java
similarity index 87%
rename from src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java
rename to src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java
index 6270b09f9..b199acb6e 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java
+++ b/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.transport;
+package de.thm.arsnova.model.transport;
 
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 /**
  * An answer that is about to get saved in the database. Answers are not saved immediately, they are instead stored
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java b/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java
rename to src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java
index 6ff8bfd5d..ac2814acb 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java
+++ b/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java
@@ -15,18 +15,18 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.transport;
+package de.thm.arsnova.model.transport;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Motd;
-import de.thm.arsnova.entities.migration.v2.Room;
-import de.thm.arsnova.entities.migration.v2.RoomFeature;
-import de.thm.arsnova.entities.migration.v2.RoomInfo;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.Answer;
+import de.thm.arsnova.model.migration.v2.Comment;
+import de.thm.arsnova.model.migration.v2.Content;
+import de.thm.arsnova.model.migration.v2.Motd;
+import de.thm.arsnova.model.migration.v2.Room;
+import de.thm.arsnova.model.migration.v2.RoomFeature;
+import de.thm.arsnova.model.migration.v2.RoomInfo;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java b/src/main/java/de/thm/arsnova/model/transport/ScoreStatistics.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java
rename to src/main/java/de/thm/arsnova/model/transport/ScoreStatistics.java
index ee8134470..0a09a2292 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java
+++ b/src/main/java/de/thm/arsnova/model/transport/ScoreStatistics.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.transport;
+package de.thm.arsnova.model.transport;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/package-info.java b/src/main/java/de/thm/arsnova/model/transport/package-info.java
similarity index 86%
rename from src/main/java/de/thm/arsnova/entities/transport/package-info.java
rename to src/main/java/de/thm/arsnova/model/transport/package-info.java
index a6920b7c8..39062cacc 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/package-info.java
+++ b/src/main/java/de/thm/arsnova/model/transport/package-info.java
@@ -4,4 +4,4 @@
  * Since sometimes only a subset of properties are needed, sending the whole entity is a waste of bandwith. Therefore,
  * entities optimized for data transport are located here.
  */
-package de.thm.arsnova.entities.transport;
+package de.thm.arsnova.model.transport;
diff --git a/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
deleted file mode 100644
index 8396dbedd..000000000
--- a/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package de.thm.arsnova.persistance;
-
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.services.score.Score;
-
-public interface SessionStatisticsRepository {
-	Score getLearningProgress(Room room);
-}
diff --git a/src/main/java/de/thm/arsnova/persistance/StatisticsRepository.java b/src/main/java/de/thm/arsnova/persistance/StatisticsRepository.java
deleted file mode 100644
index ea334f0d6..000000000
--- a/src/main/java/de/thm/arsnova/persistance/StatisticsRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.thm.arsnova.persistance;
-
-import de.thm.arsnova.entities.Statistics;
-
-public interface StatisticsRepository {
-	Statistics getStatistics();
-}
diff --git a/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java b/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/persistance/AnswerRepository.java
rename to src/main/java/de/thm/arsnova/persistence/AnswerRepository.java
index f60df296f..c07995b55 100644
--- a/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/AttachmentRepository.java b/src/main/java/de/thm/arsnova/persistence/AttachmentRepository.java
similarity index 52%
rename from src/main/java/de/thm/arsnova/persistance/AttachmentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/AttachmentRepository.java
index 68a8d0c46..fb6bc64e1 100644
--- a/src/main/java/de/thm/arsnova/persistance/AttachmentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/AttachmentRepository.java
@@ -1,6 +1,6 @@
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.Attachment;
+import de.thm.arsnova.model.Attachment;
 
 public interface AttachmentRepository extends CrudRepository<Attachment, String> {
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java b/src/main/java/de/thm/arsnova/persistence/CommentRepository.java
similarity index 74%
rename from src/main/java/de/thm/arsnova/persistance/CommentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/CommentRepository.java
index 69881eb48..afa7bf82e 100644
--- a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/CommentRepository.java
@@ -1,8 +1,8 @@
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.CommentReadingCount;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/ContentRepository.java b/src/main/java/de/thm/arsnova/persistence/ContentRepository.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/persistance/ContentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/ContentRepository.java
index 588283891..89be07388 100644
--- a/src/main/java/de/thm/arsnova/persistance/ContentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/ContentRepository.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/CrudRepository.java b/src/main/java/de/thm/arsnova/persistence/CrudRepository.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/persistance/CrudRepository.java
rename to src/main/java/de/thm/arsnova/persistence/CrudRepository.java
index 2461a2cef..98390d49f 100644
--- a/src/main/java/de/thm/arsnova/persistance/CrudRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/CrudRepository.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
 /**
  * This is a temporary extension to {@link org.springframework.data.repository.CrudRepository} which simplifies the
diff --git a/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java b/src/main/java/de/thm/arsnova/persistence/LogEntryRepository.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java
rename to src/main/java/de/thm/arsnova/persistence/LogEntryRepository.java
index f6e059a90..49d91f511 100644
--- a/src/main/java/de/thm/arsnova/persistance/LogEntryRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/LogEntryRepository.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.migration.v2.LogEntry;
+import de.thm.arsnova.model.migration.v2.LogEntry;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java b/src/main/java/de/thm/arsnova/persistence/MotdRepository.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/persistance/MotdRepository.java
rename to src/main/java/de/thm/arsnova/persistence/MotdRepository.java
index 93df79481..f320bbe66 100644
--- a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/MotdRepository.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.Motd;
+import de.thm.arsnova.model.Motd;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java b/src/main/java/de/thm/arsnova/persistence/RoomRepository.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/persistance/RoomRepository.java
rename to src/main/java/de/thm/arsnova/persistence/RoomRepository.java
index b539cc7e2..9e811203c 100644
--- a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/RoomRepository.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ImportExportContainer;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ImportExportContainer;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistence/SessionStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistence/SessionStatisticsRepository.java
new file mode 100644
index 000000000..7812c1469
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/persistence/SessionStatisticsRepository.java
@@ -0,0 +1,8 @@
+package de.thm.arsnova.persistence;
+
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.service.score.Score;
+
+public interface SessionStatisticsRepository {
+	Score getLearningProgress(Room room);
+}
diff --git a/src/main/java/de/thm/arsnova/persistence/StatisticsRepository.java b/src/main/java/de/thm/arsnova/persistence/StatisticsRepository.java
new file mode 100644
index 000000000..03e7be384
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/persistence/StatisticsRepository.java
@@ -0,0 +1,7 @@
+package de.thm.arsnova.persistence;
+
+import de.thm.arsnova.model.Statistics;
+
+public interface StatisticsRepository {
+	Statistics getStatistics();
+}
diff --git a/src/main/java/de/thm/arsnova/persistance/UserRepository.java b/src/main/java/de/thm/arsnova/persistence/UserRepository.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/persistance/UserRepository.java
rename to src/main/java/de/thm/arsnova/persistence/UserRepository.java
index a0ee1b488..61ab8b258 100644
--- a/src/main/java/de/thm/arsnova/persistance/UserRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/UserRepository.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance;
+package de.thm.arsnova.persistence;
 
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.UserProfile;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java
index 9138c8d05..026246bb3 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java
@@ -1,12 +1,12 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.collect.Lists;
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.persistance.AnswerRepository;
-import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.persistence.AnswerRepository;
+import de.thm.arsnova.persistence.LogEntryRepository;
 import org.ektorp.BulkDeleteDocument;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAttachmentRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAttachmentRepository.java
similarity index 68%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAttachmentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAttachmentRepository.java
index 6e8bbd601..409b9170d 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAttachmentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAttachmentRepository.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.Attachment;
-import de.thm.arsnova.persistance.AttachmentRepository;
+import de.thm.arsnova.model.Attachment;
+import de.thm.arsnova.persistence.AttachmentRepository;
 import org.ektorp.CouchDbConnector;
 
 public class CouchDbAttachmentRepository extends CouchDbCrudRepository<Attachment> implements AttachmentRepository {
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java
index 1cad0e06f..8b353d242 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java
@@ -1,11 +1,11 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
-import de.thm.arsnova.persistance.CommentRepository;
-import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.CommentReadingCount;
+import de.thm.arsnova.persistence.CommentRepository;
+import de.thm.arsnova.persistence.LogEntryRepository;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.UpdateConflictException;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java
index 71c63836f..5defab3af 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java
@@ -1,9 +1,9 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.LogEntryRepository;
 import org.ektorp.BulkDeleteDocument;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCrudRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCrudRepository.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCrudRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCrudRepository.java
index dd6c5b975..39285cd0d 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCrudRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCrudRepository.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.persistance.CrudRepository;
+import de.thm.arsnova.model.Entity;
+import de.thm.arsnova.persistence.CrudRepository;
 import org.ektorp.BulkDeleteDocument;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.support.CouchDbRepositorySupport;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbInitializer.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbInitializer.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbInitializer.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbInitializer.java
index 63191a436..697ffc06d 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbInitializer.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbInitializer.java
@@ -1,10 +1,10 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import de.thm.arsnova.entities.MigrationState;
-import de.thm.arsnova.persistance.couchdb.migrations.MigrationExecutor;
-import de.thm.arsnova.services.StatusService;
+import de.thm.arsnova.model.MigrationState;
+import de.thm.arsnova.persistence.couchdb.migrations.MigrationExecutor;
+import de.thm.arsnova.service.StatusService;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.DbAccessException;
 import org.ektorp.DocumentNotFoundException;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbLogEntryRepository.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbLogEntryRepository.java
index c25d5b7b0..1af116fa2 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbLogEntryRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbLogEntryRepository.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.migration.v2.LogEntry;
-import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.model.migration.v2.LogEntry;
+import de.thm.arsnova.persistence.LogEntryRepository;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.support.CouchDbRepositorySupport;
 import org.slf4j.Logger;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbMotdRepository.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbMotdRepository.java
index 0830118c5..6d1e01fa8 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbMotdRepository.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.persistance.MotdRepository;
+import de.thm.arsnova.model.Motd;
+import de.thm.arsnova.persistence.MotdRepository;
 import org.ektorp.CouchDbConnector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java
index d11af8b7b..6a7c4e32a 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java
@@ -15,16 +15,16 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.RoomStatistics;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ImportExportContainer;
-import de.thm.arsnova.persistance.LogEntryRepository;
-import de.thm.arsnova.persistance.MotdRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.RoomStatistics;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ImportExportContainer;
+import de.thm.arsnova.persistence.LogEntryRepository;
+import de.thm.arsnova.persistence.MotdRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.ViewQuery;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbSessionStatisticsRepository.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbSessionStatisticsRepository.java
index ff689d905..4a1b49c7e 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbSessionStatisticsRepository.java
@@ -1,9 +1,9 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
-import de.thm.arsnova.services.score.Score;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
+import de.thm.arsnova.service.score.Score;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.ViewResult;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbStatisticsRepository.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbStatisticsRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbStatisticsRepository.java
index 3506f7da4..e45c3dc7e 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbStatisticsRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbStatisticsRepository.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
-import de.thm.arsnova.entities.Statistics;
-import de.thm.arsnova.persistance.StatisticsRepository;
+import de.thm.arsnova.model.Statistics;
+import de.thm.arsnova.persistence.StatisticsRepository;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.DbAccessException;
 import org.ektorp.ViewResult;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbUserRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbUserRepository.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbUserRepository.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbUserRepository.java
index fb4364b0c..f9cf3bcb7 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbUserRepository.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbUserRepository.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb;
+package de.thm.arsnova.persistence.couchdb;
 
 import com.google.common.collect.Lists;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.persistance.UserRepository;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.persistence.UserRepository;
 import org.ektorp.BulkDeleteDocument;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrateFromLegacyCondition.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrateFromLegacyCondition.java
index 0c2d1c681..b81b9369a 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrateFromLegacyCondition.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.persistance.couchdb.migrations;
+package de.thm.arsnova.persistence.couchdb.migrations;
 
 import org.springframework.context.annotation.Condition;
 import org.springframework.context.annotation.ConditionContext;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/Migration.java b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/Migration.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/migrations/Migration.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/migrations/Migration.java
index 5c74f9dc0..e2d43a08a 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/Migration.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/Migration.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb.migrations;
+package de.thm.arsnova.persistence.couchdb.migrations;
 
 public interface Migration {
 	String getId();
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrationExecutor.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrationExecutor.java
index 68554e69c..ff74e2356 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/MigrationExecutor.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb.migrations;
+package de.thm.arsnova.persistence.couchdb.migrations;
 
-import de.thm.arsnova.entities.MigrationState;
+import de.thm.arsnova.model.MigrationState;
 import org.checkerframework.checker.nullness.qual.NonNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/V2ToV3Migration.java
similarity index 85%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/migrations/V2ToV3Migration.java
index 9a258a951..37b57cedf 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/migrations/V2ToV3Migration.java
@@ -15,23 +15,23 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.persistance.couchdb.migrations;
-
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.migration.FromV2Migrator;
-import de.thm.arsnova.entities.migration.v2.DbUser;
-import de.thm.arsnova.entities.migration.v2.LoggedIn;
-import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.RoomRepository;
-import de.thm.arsnova.persistance.UserRepository;
-import de.thm.arsnova.persistance.couchdb.support.MangoCouchDbConnector;
-import de.thm.arsnova.persistance.couchdb.support.PagedMangoResponse;
+package de.thm.arsnova.persistence.couchdb.migrations;
+
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Motd;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.migration.FromV2Migrator;
+import de.thm.arsnova.model.migration.v2.DbUser;
+import de.thm.arsnova.model.migration.v2.LoggedIn;
+import de.thm.arsnova.model.migration.v2.MotdList;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.RoomRepository;
+import de.thm.arsnova.persistence.UserRepository;
+import de.thm.arsnova.persistence.couchdb.support.MangoCouchDbConnector;
+import de.thm.arsnova.persistence.couchdb.support.PagedMangoResponse;
 import org.ektorp.DbAccessException;
 import org.ektorp.DocumentNotFoundException;
 import org.slf4j.Logger;
@@ -185,9 +185,9 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<UserProfile> profilesV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.DbUser> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.DbUser.class);
-			List<de.thm.arsnova.entities.migration.v2.DbUser> dbUsersV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.DbUser> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.DbUser.class);
+			List<de.thm.arsnova.model.migration.v2.DbUser> dbUsersV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (dbUsersV2.size() == 0) {
 				break;
@@ -241,9 +241,9 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<UserProfile> profilesV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.LoggedIn> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.LoggedIn.class);
-			List<de.thm.arsnova.entities.migration.v2.LoggedIn> loggedInsV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.LoggedIn> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.LoggedIn.class);
+			List<de.thm.arsnova.model.migration.v2.LoggedIn> loggedInsV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (loggedInsV2.isEmpty()) {
 				break;
@@ -275,15 +275,15 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<Room> roomsV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.Room> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.Room.class);
-			List<de.thm.arsnova.entities.migration.v2.Room> roomsV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.Room> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.Room.class);
+			List<de.thm.arsnova.model.migration.v2.Room> roomsV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (roomsV2.size() == 0) {
 				break;
 			}
 
-			for (de.thm.arsnova.entities.migration.v2.Room roomV2 : roomsV2) {
+			for (de.thm.arsnova.model.migration.v2.Room roomV2 : roomsV2) {
 				List<UserProfile> profiles = userRepository.findByLoginId(roomV2.getCreator());
 				if (profiles.size() == 0) {
 					logger.warn("Skipping migration of Room {}. Creator {} does not exist.",
@@ -314,15 +314,15 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<Motd> motdsV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.Motd> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.Motd.class);
-			List<de.thm.arsnova.entities.migration.v2.Motd> motdsV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.Motd> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.Motd.class);
+			List<de.thm.arsnova.model.migration.v2.Motd> motdsV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (motdsV2.size() == 0) {
 				break;
 			}
 
-			for (de.thm.arsnova.entities.migration.v2.Motd motdV2 : motdsV2) {
+			for (de.thm.arsnova.model.migration.v2.Motd motdV2 : motdsV2) {
 				if (motdV2.getAudience().equals("session")) {
 					Room room = roomRepository.findByShortId(motdV2.getSessionkey());
 					/* sessionId has not been set for some old MotDs */
@@ -353,15 +353,15 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<Comment> commentsV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.Comment> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.Comment.class);
-			List<de.thm.arsnova.entities.migration.v2.Comment> commentsV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.Comment> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.Comment.class);
+			List<de.thm.arsnova.model.migration.v2.Comment> commentsV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (commentsV2.size() == 0) {
 				break;
 			}
 
-			for (de.thm.arsnova.entities.migration.v2.Comment commentV2 : commentsV2) {
+			for (de.thm.arsnova.model.migration.v2.Comment commentV2 : commentsV2) {
 				try {
 					Room roomV3 = roomRepository.findOne(commentV2.getSessionId());
 					List<UserProfile> profiles = Collections.EMPTY_LIST;
@@ -401,15 +401,15 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<Content> contentsV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.Content> response =
-					fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.Content.class);
-			List<de.thm.arsnova.entities.migration.v2.Content> contentsV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.Content> response =
+					fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.Content.class);
+			List<de.thm.arsnova.model.migration.v2.Content> contentsV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (contentsV2.size() == 0) {
 				break;
 			}
 
-			for (de.thm.arsnova.entities.migration.v2.Content contentV2 : contentsV2) {
+			for (de.thm.arsnova.model.migration.v2.Content contentV2 : contentsV2) {
 				if (roomRepository.existsById(contentV2.getSessionId())) {
 					try {
 						contentsV3.add(migrator.migrate(contentV2));
@@ -439,15 +439,15 @@ public class V2ToV3Migration implements Migration {
 			logger.debug("Migration progress: {}, bookmark: {}", skip, bookmark);
 			query.setBookmark(bookmark);
 			List<Answer> answersV3 = new ArrayList<>();
-			PagedMangoResponse<de.thm.arsnova.entities.migration.v2.Answer> response =
-					 fromConnector.queryForPage(query, de.thm.arsnova.entities.migration.v2.Answer.class);
-			List<de.thm.arsnova.entities.migration.v2.Answer> answersV2 = response.getEntities();
+			PagedMangoResponse<de.thm.arsnova.model.migration.v2.Answer> response =
+					 fromConnector.queryForPage(query, de.thm.arsnova.model.migration.v2.Answer.class);
+			List<de.thm.arsnova.model.migration.v2.Answer> answersV2 = response.getEntities();
 			bookmark = response.getBookmark();
 			if (answersV2.size() == 0) {
 				break;
 			}
 
-			for (de.thm.arsnova.entities.migration.v2.Answer answerV2 : answersV2) {
+			for (de.thm.arsnova.model.migration.v2.Answer answerV2 : answersV2) {
 				if (!roomRepository.existsById(answerV2.getSessionId())) {
 					logger.warn("Skipping migration of Answer {}. Room {} does not exist.",
 							answerV2.getId(), answerV2.getQuestionId());
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoCouchDbConnector.java b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoCouchDbConnector.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoCouchDbConnector.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoCouchDbConnector.java
index 6870d9891..b8f61d21f 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoCouchDbConnector.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoCouchDbConnector.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.persistance.couchdb.support;
+package de.thm.arsnova.persistence.couchdb.support;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -8,7 +8,7 @@ import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.Converter;
-import de.thm.arsnova.entities.serialization.View;
+import de.thm.arsnova.model.serialization.View;
 import org.ektorp.CouchDbInstance;
 import org.ektorp.DbAccessException;
 import org.ektorp.http.HttpResponse;
@@ -17,14 +17,12 @@ import org.ektorp.impl.StdCouchDbConnector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * This Connector adds a query method which uses CouchDB's Mango API to retrieve data.
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoQueryResultParser.java b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoQueryResultParser.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoQueryResultParser.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoQueryResultParser.java
index b5eaccfac..c8fd9289e 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoQueryResultParser.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoQueryResultParser.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.persistance.couchdb.support;
+package de.thm.arsnova.persistence.couchdb.support;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoResponseHandler.java b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoResponseHandler.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoResponseHandler.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoResponseHandler.java
index ebe116b61..84ae2275c 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/support/MangoResponseHandler.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/support/MangoResponseHandler.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.persistance.couchdb.support;
+package de.thm.arsnova.persistence.couchdb.support;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.ektorp.http.HttpResponse;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/support/PagedMangoResponse.java b/src/main/java/de/thm/arsnova/persistence/couchdb/support/PagedMangoResponse.java
similarity index 90%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/support/PagedMangoResponse.java
rename to src/main/java/de/thm/arsnova/persistence/couchdb/support/PagedMangoResponse.java
index 180d7a45f..a8f4b3793 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/support/PagedMangoResponse.java
+++ b/src/main/java/de/thm/arsnova/persistence/couchdb/support/PagedMangoResponse.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.persistance.couchdb.support;
+package de.thm.arsnova.persistence.couchdb.support;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index acb2861df..13ab5f6c9 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -17,15 +17,15 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.persistance.CommentRepository;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.MotdRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+import de.thm.arsnova.model.Motd;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.persistence.CommentRepository;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.MotdRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java b/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
index 430bb7493..a723eccb7 100644
--- a/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/CasUserDetailsService.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.jasig.cas.client.validation.Assertion;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.cas.userdetails.AbstractCasAssertionUserDetailsService;
diff --git a/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java b/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
index 822e3d31c..e9859decb 100644
--- a/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
+++ b/src/main/java/de/thm/arsnova/security/CustomLdapUserDetailsMapper.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/de/thm/arsnova/security/GuestUserDetailsService.java b/src/main/java/de/thm/arsnova/security/GuestUserDetailsService.java
index b262ee38f..5596de1c1 100644
--- a/src/main/java/de/thm/arsnova/security/GuestUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/GuestUserDetailsService.java
@@ -17,9 +17,8 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
diff --git a/src/main/java/de/thm/arsnova/security/RegisteredUserDetailsService.java b/src/main/java/de/thm/arsnova/security/RegisteredUserDetailsService.java
index 209e62282..24b3fc103 100644
--- a/src/main/java/de/thm/arsnova/security/RegisteredUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/RegisteredUserDetailsService.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
diff --git a/src/main/java/de/thm/arsnova/security/User.java b/src/main/java/de/thm/arsnova/security/User.java
index 0dae8e0bc..35f1fb64b 100644
--- a/src/main/java/de/thm/arsnova/security/User.java
+++ b/src/main/java/de/thm/arsnova/security/User.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
 import org.springframework.security.core.GrantedAuthority;
 
 import java.util.Collection;
diff --git a/src/main/java/de/thm/arsnova/security/jwt/JwtService.java b/src/main/java/de/thm/arsnova/security/jwt/JwtService.java
index e1f4b1d40..204a60f55 100644
--- a/src/main/java/de/thm/arsnova/security/jwt/JwtService.java
+++ b/src/main/java/de/thm/arsnova/security/jwt/JwtService.java
@@ -4,9 +4,9 @@ import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.DecodedJWT;
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.security.User;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.service.UserService;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
diff --git a/src/main/java/de/thm/arsnova/security/pac4j/OauthUserDetailsService.java b/src/main/java/de/thm/arsnova/security/pac4j/OauthUserDetailsService.java
index f3f415be8..cb61fa803 100644
--- a/src/main/java/de/thm/arsnova/security/pac4j/OauthUserDetailsService.java
+++ b/src/main/java/de/thm/arsnova/security/pac4j/OauthUserDetailsService.java
@@ -17,9 +17,9 @@
  */
 package de.thm.arsnova.security.pac4j;
 
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.security.User;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.service.UserService;
 import org.pac4j.oauth.profile.facebook.FacebookProfile;
 import org.pac4j.oauth.profile.google2.Google2Profile;
 import org.pac4j.oauth.profile.twitter.TwitterProfile;
diff --git a/src/main/java/de/thm/arsnova/services/AnswerService.java b/src/main/java/de/thm/arsnova/service/AnswerService.java
similarity index 87%
rename from src/main/java/de/thm/arsnova/services/AnswerService.java
rename to src/main/java/de/thm/arsnova/service/AnswerService.java
index ea1769e10..536d410dd 100644
--- a/src/main/java/de/thm/arsnova/services/AnswerService.java
+++ b/src/main/java/de/thm/arsnova/service/AnswerService.java
@@ -1,9 +1,9 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.TextAnswer;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.TextAnswer;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.List;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/services/AnswerServiceImpl.java b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/services/AnswerServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
index 29320ebc6..5b5535ad9 100644
--- a/src/main/java/de/thm/arsnova/services/AnswerServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
@@ -15,23 +15,23 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
-
-import de.thm.arsnova.entities.Answer;
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.TextAnswer;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.AnswerQueueElement;
-import de.thm.arsnova.events.DeleteAnswerEvent;
-import de.thm.arsnova.events.NewAnswerEvent;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.persistance.AnswerRepository;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+package de.thm.arsnova.service;
+
+import de.thm.arsnova.model.Answer;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.TextAnswer;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.AnswerQueueElement;
+import de.thm.arsnova.event.DeleteAnswerEvent;
+import de.thm.arsnova.event.NewAnswerEvent;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.persistence.AnswerRepository;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.ektorp.DbAccessException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/de/thm/arsnova/services/AttachmentService.java b/src/main/java/de/thm/arsnova/service/AttachmentService.java
similarity index 74%
rename from src/main/java/de/thm/arsnova/services/AttachmentService.java
rename to src/main/java/de/thm/arsnova/service/AttachmentService.java
index 854365313..cb49b4861 100644
--- a/src/main/java/de/thm/arsnova/services/AttachmentService.java
+++ b/src/main/java/de/thm/arsnova/service/AttachmentService.java
@@ -1,6 +1,6 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Attachment;
+import de.thm.arsnova.model.Attachment;
 import org.springframework.web.multipart.MultipartFile;
 
 public interface AttachmentService extends EntityService<Attachment> {
diff --git a/src/main/java/de/thm/arsnova/services/AttachmentServiceImpl.java b/src/main/java/de/thm/arsnova/service/AttachmentServiceImpl.java
similarity index 88%
rename from src/main/java/de/thm/arsnova/services/AttachmentServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/AttachmentServiceImpl.java
index 75efe93c7..6b2cc2edf 100644
--- a/src/main/java/de/thm/arsnova/services/AttachmentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/AttachmentServiceImpl.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Attachment;
-import de.thm.arsnova.persistance.AttachmentRepository;
+import de.thm.arsnova.model.Attachment;
+import de.thm.arsnova.persistence.AttachmentRepository;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.multipart.MultipartFile;
diff --git a/src/main/java/de/thm/arsnova/services/CommentFindQueryService.java b/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/services/CommentFindQueryService.java
rename to src/main/java/de/thm/arsnova/service/CommentFindQueryService.java
index d80b47a00..fdbe5b886 100644
--- a/src/main/java/de/thm/arsnova/services/CommentFindQueryService.java
+++ b/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.FindQuery;
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.model.FindQuery;
+import de.thm.arsnova.model.Comment;
 import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
diff --git a/src/main/java/de/thm/arsnova/services/CommentService.java b/src/main/java/de/thm/arsnova/service/CommentService.java
similarity index 75%
rename from src/main/java/de/thm/arsnova/services/CommentService.java
rename to src/main/java/de/thm/arsnova/service/CommentService.java
index 021499325..a359bf881 100644
--- a/src/main/java/de/thm/arsnova/services/CommentService.java
+++ b/src/main/java/de/thm/arsnova/service/CommentService.java
@@ -1,7 +1,7 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.migration.v2.CommentReadingCount;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
similarity index 88%
rename from src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
index e48c84852..3404880e8 100644
--- a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
@@ -1,16 +1,15 @@
-package de.thm.arsnova.services;
-
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
-import de.thm.arsnova.events.DeleteCommentEvent;
-import de.thm.arsnova.events.NewCommentEvent;
-import de.thm.arsnova.exceptions.ForbiddenException;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.persistance.CommentRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+package de.thm.arsnova.service;
+
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.CommentReadingCount;
+import de.thm.arsnova.event.DeleteCommentEvent;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.persistence.CommentRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
diff --git a/src/main/java/de/thm/arsnova/services/ContentService.java b/src/main/java/de/thm/arsnova/service/ContentService.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/services/ContentService.java
rename to src/main/java/de/thm/arsnova/service/ContentService.java
index 587e3e06e..253298413 100644
--- a/src/main/java/de/thm/arsnova/services/ContentService.java
+++ b/src/main/java/de/thm/arsnova/service/ContentService.java
@@ -32,10 +32,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.List;
 
diff --git a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
index b07d6ee17..4bd055372 100644
--- a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
@@ -15,18 +15,18 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
-
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.events.*;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.persistance.AnswerRepository;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.LogEntryRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+package de.thm.arsnova.service;
+
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.event.*;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.persistence.AnswerRepository;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.LogEntryRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.ektorp.DocumentNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
index eab3e5356..9f11f884b 100644
--- a/src/main/java/de/thm/arsnova/services/DefaultEntityServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
@@ -15,14 +15,14 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
-import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.entities.serialization.View;
-import de.thm.arsnova.persistance.CrudRepository;
+import de.thm.arsnova.model.Entity;
+import de.thm.arsnova.model.serialization.View;
+import de.thm.arsnova.persistence.CrudRepository;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreFilter;
 
diff --git a/src/main/java/de/thm/arsnova/services/EntityService.java b/src/main/java/de/thm/arsnova/service/EntityService.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/EntityService.java
rename to src/main/java/de/thm/arsnova/service/EntityService.java
index d4df43e52..9158e4f5b 100644
--- a/src/main/java/de/thm/arsnova/services/EntityService.java
+++ b/src/main/java/de/thm/arsnova/service/EntityService.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreFilter;
 
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/service/FeedbackService.java
similarity index 90%
rename from src/main/java/de/thm/arsnova/services/FeedbackService.java
rename to src/main/java/de/thm/arsnova/service/FeedbackService.java
index dbc673578..1b5ab72e6 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackService.java
+++ b/src/main/java/de/thm/arsnova/service/FeedbackService.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Feedback;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Feedback;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 /**
  * The functionality the feedback service should provide.
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java b/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java
index e5a00e6b6..81a366013 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java
@@ -15,16 +15,16 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
-
-import de.thm.arsnova.entities.Feedback;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.events.DeleteFeedbackForRoomsEvent;
-import de.thm.arsnova.events.NewFeedbackEvent;
-import de.thm.arsnova.exceptions.NoContentException;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.persistance.RoomRepository;
+package de.thm.arsnova.service;
+
+import de.thm.arsnova.model.Feedback;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.event.DeleteFeedbackForRoomsEvent;
+import de.thm.arsnova.event.NewFeedbackEvent;
+import de.thm.arsnova.web.exceptions.NoContentException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java b/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java
similarity index 70%
rename from src/main/java/de/thm/arsnova/services/FeedbackStorageService.java
rename to src/main/java/de/thm/arsnova/service/FeedbackStorageService.java
index 26d3715c4..74dc27e73 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java
+++ b/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java
@@ -1,8 +1,8 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Feedback;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Feedback;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.List;
 import java.util.Map;
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java b/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java
index 983c13e23..ef8df172c 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Feedback;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Feedback;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/thm/arsnova/services/FindQueryService.java b/src/main/java/de/thm/arsnova/service/FindQueryService.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/services/FindQueryService.java
rename to src/main/java/de/thm/arsnova/service/FindQueryService.java
index 2cf1399c9..09f3aae1b 100644
--- a/src/main/java/de/thm/arsnova/services/FindQueryService.java
+++ b/src/main/java/de/thm/arsnova/service/FindQueryService.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.entities.FindQuery;
+import de.thm.arsnova.model.Entity;
+import de.thm.arsnova.model.FindQuery;
 
 import java.util.Set;
 
diff --git a/src/main/java/de/thm/arsnova/services/MotdService.java b/src/main/java/de/thm/arsnova/service/MotdService.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/services/MotdService.java
rename to src/main/java/de/thm/arsnova/service/MotdService.java
index 25ee3d398..6de4cc1d2 100644
--- a/src/main/java/de/thm/arsnova/services/MotdService.java
+++ b/src/main/java/de/thm/arsnova/service/MotdService.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Motd;
+import de.thm.arsnova.model.Motd;
 
 import java.util.Date;
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java b/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/MotdServiceImpl.java
index 44069df2c..66f6e0142 100644
--- a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.exceptions.BadRequestException;
-import de.thm.arsnova.persistance.MotdRepository;
+import de.thm.arsnova.model.Motd;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.web.exceptions.BadRequestException;
+import de.thm.arsnova.persistence.MotdRepository;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
diff --git a/src/main/java/de/thm/arsnova/services/ResponseProviderService.java b/src/main/java/de/thm/arsnova/service/ResponseProviderService.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/ResponseProviderService.java
rename to src/main/java/de/thm/arsnova/service/ResponseProviderService.java
index 79aaf92b2..cc311debf 100644
--- a/src/main/java/de/thm/arsnova/services/ResponseProviderService.java
+++ b/src/main/java/de/thm/arsnova/service/ResponseProviderService.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import javax.servlet.http.HttpServletResponse;
 
diff --git a/src/main/java/de/thm/arsnova/services/ResponseProviderServiceImpl.java b/src/main/java/de/thm/arsnova/service/ResponseProviderServiceImpl.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/services/ResponseProviderServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/ResponseProviderServiceImpl.java
index abcbba9eb..812071485 100644
--- a/src/main/java/de/thm/arsnova/services/ResponseProviderServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/ResponseProviderServiceImpl.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.ScopedProxyMode;
diff --git a/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java b/src/main/java/de/thm/arsnova/service/RoomFindQueryService.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/services/RoomFindQueryService.java
rename to src/main/java/de/thm/arsnova/service/RoomFindQueryService.java
index c56a6c9b3..80edfe8eb 100644
--- a/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java
+++ b/src/main/java/de/thm/arsnova/service/RoomFindQueryService.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.FindQuery;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.FindQuery;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.UserProfile;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
diff --git a/src/main/java/de/thm/arsnova/services/RoomService.java b/src/main/java/de/thm/arsnova/service/RoomService.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/services/RoomService.java
rename to src/main/java/de/thm/arsnova/service/RoomService.java
index 7c87d708f..4fb354332 100644
--- a/src/main/java/de/thm/arsnova/services/RoomService.java
+++ b/src/main/java/de/thm/arsnova/service/RoomService.java
@@ -15,13 +15,13 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ImportExportContainer;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ImportExportContainer;
+import de.thm.arsnova.model.transport.ScoreStatistics;
 
 import java.util.List;
 import java.util.UUID;
diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
index 558eb6704..5546c98c6 100644
--- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
@@ -15,37 +15,35 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.transport.ImportExportContainer;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.events.DeleteRoomEvent;
-import de.thm.arsnova.events.FeatureChangeEvent;
-import de.thm.arsnova.events.FlipFlashcardsEvent;
-import de.thm.arsnova.events.LockFeedbackEvent;
-import de.thm.arsnova.events.NewRoomEvent;
-import de.thm.arsnova.events.StatusRoomEvent;
-import de.thm.arsnova.exceptions.ForbiddenException;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.persistance.AnswerRepository;
-import de.thm.arsnova.persistance.CommentRepository;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.LogEntryRepository;
-import de.thm.arsnova.persistance.RoomRepository;
-import de.thm.arsnova.services.score.ScoreCalculator;
-import de.thm.arsnova.services.score.ScoreCalculatorFactory;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.model.transport.ImportExportContainer;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.event.DeleteRoomEvent;
+import de.thm.arsnova.event.FeatureChangeEvent;
+import de.thm.arsnova.event.FlipFlashcardsEvent;
+import de.thm.arsnova.event.LockFeedbackEvent;
+import de.thm.arsnova.event.StatusRoomEvent;
+import de.thm.arsnova.web.exceptions.ForbiddenException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.persistence.AnswerRepository;
+import de.thm.arsnova.persistence.CommentRepository;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.LogEntryRepository;
+import de.thm.arsnova.persistence.RoomRepository;
+import de.thm.arsnova.service.score.ScoreCalculator;
+import de.thm.arsnova.service.score.ScoreCalculatorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.context.ApplicationEventPublisher;
@@ -58,7 +56,6 @@ import org.springframework.stereotype.Service;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
diff --git a/src/main/java/de/thm/arsnova/services/StatisticsService.java b/src/main/java/de/thm/arsnova/service/StatisticsService.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/services/StatisticsService.java
rename to src/main/java/de/thm/arsnova/service/StatisticsService.java
index 0739baa2f..aa74d212d 100644
--- a/src/main/java/de/thm/arsnova/services/StatisticsService.java
+++ b/src/main/java/de/thm/arsnova/service/StatisticsService.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Statistics;
+import de.thm.arsnova.model.Statistics;
 
 /**
  * The functionality the statistics service should provide.
diff --git a/src/main/java/de/thm/arsnova/services/StatisticsServiceImpl.java b/src/main/java/de/thm/arsnova/service/StatisticsServiceImpl.java
similarity index 93%
rename from src/main/java/de/thm/arsnova/services/StatisticsServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/StatisticsServiceImpl.java
index 828607a40..53ba87727 100644
--- a/src/main/java/de/thm/arsnova/services/StatisticsServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/StatisticsServiceImpl.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Statistics;
-import de.thm.arsnova.persistance.StatisticsRepository;
+import de.thm.arsnova.model.Statistics;
+import de.thm.arsnova.persistence.StatisticsRepository;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/thm/arsnova/services/StatusService.java b/src/main/java/de/thm/arsnova/service/StatusService.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/StatusService.java
rename to src/main/java/de/thm/arsnova/service/StatusService.java
index 316f0344c..7052dfb9a 100644
--- a/src/main/java/de/thm/arsnova/services/StatusService.java
+++ b/src/main/java/de/thm/arsnova/service/StatusService.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import java.util.Map;
 
diff --git a/src/main/java/de/thm/arsnova/services/StatusServiceImpl.java b/src/main/java/de/thm/arsnova/service/StatusServiceImpl.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/services/StatusServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/StatusServiceImpl.java
index a8f3ba930..d1ca23dd2 100644
--- a/src/main/java/de/thm/arsnova/services/StatusServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/StatusServiceImpl.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import org.springframework.stereotype.Service;
 
diff --git a/src/main/java/de/thm/arsnova/services/TimerService.java b/src/main/java/de/thm/arsnova/service/TimerService.java
similarity index 76%
rename from src/main/java/de/thm/arsnova/services/TimerService.java
rename to src/main/java/de/thm/arsnova/service/TimerService.java
index cbb321b32..1db313d63 100644
--- a/src/main/java/de/thm/arsnova/services/TimerService.java
+++ b/src/main/java/de/thm/arsnova/service/TimerService.java
@@ -1,6 +1,6 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 public interface TimerService {
 	void startNewRound(final String contentId, ClientAuthentication user);
diff --git a/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java b/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/services/TimerServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/TimerServiceImpl.java
index 3a7c7e76b..b676a41e1 100644
--- a/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java
@@ -1,15 +1,15 @@
-package de.thm.arsnova.services;
-
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.events.PiRoundCancelEvent;
-import de.thm.arsnova.events.PiRoundDelayedStartEvent;
-import de.thm.arsnova.events.PiRoundEndEvent;
-import de.thm.arsnova.events.PiRoundResetEvent;
-import de.thm.arsnova.persistance.AnswerRepository;
-import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.RoomRepository;
+package de.thm.arsnova.service;
+
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.event.PiRoundCancelEvent;
+import de.thm.arsnova.event.PiRoundDelayedStartEvent;
+import de.thm.arsnova.event.PiRoundEndEvent;
+import de.thm.arsnova.event.PiRoundResetEvent;
+import de.thm.arsnova.persistence.AnswerRepository;
+import de.thm.arsnova.persistence.ContentRepository;
+import de.thm.arsnova.persistence.RoomRepository;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/service/UserService.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/services/UserService.java
rename to src/main/java/de/thm/arsnova/service/UserService.java
index 814bcd84c..0f2138223 100644
--- a/src/main/java/de/thm/arsnova/services/UserService.java
+++ b/src/main/java/de/thm/arsnova/service/UserService.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.security.User;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.GrantedAuthority;
@@ -38,7 +38,7 @@ public interface UserService extends EntityService<UserProfile> {
 
 	ClientAuthentication getCurrentUser();
 
-	de.thm.arsnova.entities.ClientAuthentication getCurrentClientAuthentication();
+	de.thm.arsnova.model.ClientAuthentication getCurrentClientAuthentication();
 
 	boolean isAdmin(String username);
 
diff --git a/src/main/java/de/thm/arsnova/services/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/UserServiceImpl.java
rename to src/main/java/de/thm/arsnova/service/UserServiceImpl.java
index 18d872bf3..51498b832 100644
--- a/src/main/java/de/thm/arsnova/services/UserServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
@@ -15,16 +15,16 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import com.codahale.metrics.annotation.Gauge;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.exceptions.BadRequestException;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.persistance.UserRepository;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.web.exceptions.BadRequestException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.persistence.UserRepository;
 import de.thm.arsnova.security.GuestUserDetailsService;
 import de.thm.arsnova.security.User;
 import de.thm.arsnova.security.jwt.JwtService;
@@ -65,7 +65,6 @@ import javax.annotation.PreDestroy;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.text.MessageFormat;
 import java.util.*;
 import java.util.Map.Entry;
@@ -216,7 +215,7 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple
 	}
 
 	@Override
-	public de.thm.arsnova.entities.ClientAuthentication getCurrentClientAuthentication() {
+	public de.thm.arsnova.model.ClientAuthentication getCurrentClientAuthentication() {
 		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
 		if (authentication == null || !(authentication.getPrincipal() instanceof User)) {
 			return null;
@@ -225,8 +224,8 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple
 		String jwt = authentication instanceof JwtToken ?
 				(String) authentication.getCredentials() : jwtService.createSignedToken(user);
 
-		de.thm.arsnova.entities.ClientAuthentication clientAuthentication =
-				new de.thm.arsnova.entities.ClientAuthentication(user.getId(), user.getUsername(),
+		de.thm.arsnova.model.ClientAuthentication clientAuthentication =
+				new de.thm.arsnova.model.ClientAuthentication(user.getId(), user.getUsername(),
 						user.getAuthProvider(), jwt);
 
 		return clientAuthentication;
diff --git a/src/main/java/de/thm/arsnova/services/package-info.java b/src/main/java/de/thm/arsnova/service/package-info.java
similarity index 62%
rename from src/main/java/de/thm/arsnova/services/package-info.java
rename to src/main/java/de/thm/arsnova/service/package-info.java
index d87d15a84..dfa2ac665 100644
--- a/src/main/java/de/thm/arsnova/services/package-info.java
+++ b/src/main/java/de/thm/arsnova/service/package-info.java
@@ -1,4 +1,4 @@
 /**
  * Classes and interfaces for the service layer
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
diff --git a/src/main/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java
similarity index 94%
rename from src/main/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculator.java
rename to src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java
index 59dfb1e7e..0eed46c4d 100644
--- a/src/main/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 
 /**
  * Calculates learning progress based on overall correctness of an answer. A question is answered correctly if and
diff --git a/src/main/java/de/thm/arsnova/services/score/QuestionScore.java b/src/main/java/de/thm/arsnova/service/score/QuestionScore.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/services/score/QuestionScore.java
rename to src/main/java/de/thm/arsnova/service/score/QuestionScore.java
index fcf7adb16..0ea10b92d 100644
--- a/src/main/java/de/thm/arsnova/services/score/QuestionScore.java
+++ b/src/main/java/de/thm/arsnova/service/score/QuestionScore.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/src/main/java/de/thm/arsnova/services/score/Score.java b/src/main/java/de/thm/arsnova/service/score/Score.java
similarity index 96%
rename from src/main/java/de/thm/arsnova/services/score/Score.java
rename to src/main/java/de/thm/arsnova/service/score/Score.java
index c0f1d3fa4..d3c5e4d29 100644
--- a/src/main/java/de/thm/arsnova/services/score/Score.java
+++ b/src/main/java/de/thm/arsnova/service/score/Score.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 import java.util.HashMap;
 import java.util.HashSet;
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java
rename to src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java
index a4a7bd556..7b34fddbd 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 
 /**
  * Calculates score based on a question's value.
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java
similarity index 83%
rename from src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java
rename to src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java
index d43f0549c..7eb61b0c7 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
 
 /**
  * Defines the core functionality which the score calculation should provide.
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactory.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactory.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactory.java
rename to src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactory.java
index 473c1dcce..5294a3587 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactory.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactory.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
 /**
  * Interface for Spring dependency injection.
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java
rename to src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
index d6816d4ee..78acff908 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.events.*;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.event.*;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.context.ApplicationEventPublisher;
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorListener.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorListener.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/services/score/ScoreCalculatorListener.java
rename to src/main/java/de/thm/arsnova/service/score/ScoreCalculatorListener.java
index 113d5d7e2..d78cc8863 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorListener.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorListener.java
@@ -15,10 +15,10 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.events.ArsnovaEvent;
-import de.thm.arsnova.events.ArsnovaEventVisitor;
+import de.thm.arsnova.event.ArsnovaEvent;
+import de.thm.arsnova.event.ArsnovaEventVisitor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
diff --git a/src/main/java/de/thm/arsnova/services/score/UserScore.java b/src/main/java/de/thm/arsnova/service/score/UserScore.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/services/score/UserScore.java
rename to src/main/java/de/thm/arsnova/service/score/UserScore.java
index 37eb20b87..bc91a2559 100644
--- a/src/main/java/de/thm/arsnova/services/score/UserScore.java
+++ b/src/main/java/de/thm/arsnova/service/score/UserScore.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 
 /**
  * The learning progress answer score of a particular user.
diff --git a/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java
rename to src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java
index 315a0371a..de9b62054 100644
--- a/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 import org.springframework.cache.annotation.Cacheable;
 
 /**
diff --git a/src/main/java/de/thm/arsnova/util/ImageUtils.java b/src/main/java/de/thm/arsnova/util/ImageUtils.java
index bdfdfc272..5ac24d889 100644
--- a/src/main/java/de/thm/arsnova/util/ImageUtils.java
+++ b/src/main/java/de/thm/arsnova/util/ImageUtils.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.util;
 
-import de.thm.arsnova.entities.migration.v2.Answer;
+import de.thm.arsnova.model.migration.v2.Answer;
 import org.apache.commons.codec.binary.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/de/thm/arsnova/web/InternalEntityAspect.java b/src/main/java/de/thm/arsnova/web/InternalEntityAspect.java
index 3b9de7eb6..3a59bedc3 100644
--- a/src/main/java/de/thm/arsnova/web/InternalEntityAspect.java
+++ b/src/main/java/de/thm/arsnova/web/InternalEntityAspect.java
@@ -1,6 +1,6 @@
 package de.thm.arsnova.web;
 
-import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.model.Entity;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
@@ -15,7 +15,7 @@ import org.slf4j.LoggerFactory;
 public class InternalEntityAspect {
 	private static final Logger logger = LoggerFactory.getLogger(InternalEntityAspect.class);
 
-	@AfterReturning(pointcut = "execution(de.thm.arsnova.entities.Entity+ de.thm.arsnova.controller.*.*(..))", returning = "entity")
+	@AfterReturning(pointcut = "execution(de.thm.arsnova.model.Entity+ de.thm.arsnova.controller.*.*(..))", returning = "entity")
 	public void prohibitInternalEntitySerialization(final Entity entity) {
 		logger.debug("Executing InternalEntityAspect for entity: {}", entity);
 
diff --git a/src/main/java/de/thm/arsnova/web/MaintenanceModeFilter.java b/src/main/java/de/thm/arsnova/web/MaintenanceModeFilter.java
index 7efb6f035..7d2e3bc6f 100644
--- a/src/main/java/de/thm/arsnova/web/MaintenanceModeFilter.java
+++ b/src/main/java/de/thm/arsnova/web/MaintenanceModeFilter.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.web;
 
-import de.thm.arsnova.services.StatusService;
+import de.thm.arsnova.service.StatusService;
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
diff --git a/src/main/java/de/thm/arsnova/aop/RangeAspect.java b/src/main/java/de/thm/arsnova/web/RangeAspect.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/aop/RangeAspect.java
rename to src/main/java/de/thm/arsnova/web/RangeAspect.java
index 522d568e7..9959fab9c 100644
--- a/src/main/java/de/thm/arsnova/aop/RangeAspect.java
+++ b/src/main/java/de/thm/arsnova/web/RangeAspect.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.aop;
+package de.thm.arsnova.web;
 
 import de.thm.arsnova.util.PaginationListDecorator;
 import de.thm.arsnova.controller.PaginationController;
-import de.thm.arsnova.services.ResponseProviderService;
+import de.thm.arsnova.service.ResponseProviderService;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
diff --git a/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java b/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
index 3edfc47be..da4afef5e 100644
--- a/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
+++ b/src/main/java/de/thm/arsnova/web/ResponseInterceptorHandler.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.web;
 
-import de.thm.arsnova.services.ResponseProviderService;
+import de.thm.arsnova.service.ResponseProviderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
diff --git a/src/main/java/de/thm/arsnova/exceptions/BadRequestException.java b/src/main/java/de/thm/arsnova/web/exceptions/BadRequestException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/BadRequestException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/BadRequestException.java
index b7e80b833..7f417aca2 100644
--- a/src/main/java/de/thm/arsnova/exceptions/BadRequestException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/BadRequestException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Bad Request means status code 400.
diff --git a/src/main/java/de/thm/arsnova/exceptions/ForbiddenException.java b/src/main/java/de/thm/arsnova/web/exceptions/ForbiddenException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/ForbiddenException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/ForbiddenException.java
index 05b21dab6..aefe91f33 100644
--- a/src/main/java/de/thm/arsnova/exceptions/ForbiddenException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/ForbiddenException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Forbidden means status code 403.
diff --git a/src/main/java/de/thm/arsnova/exceptions/NoContentException.java b/src/main/java/de/thm/arsnova/web/exceptions/NoContentException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/NoContentException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/NoContentException.java
index f3f7e8164..0177ac4ac 100644
--- a/src/main/java/de/thm/arsnova/exceptions/NoContentException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/NoContentException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * No Content means status code 204.
diff --git a/src/main/java/de/thm/arsnova/exceptions/NotFoundException.java b/src/main/java/de/thm/arsnova/web/exceptions/NotFoundException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/NotFoundException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/NotFoundException.java
index a0a12b25a..faa58e11d 100644
--- a/src/main/java/de/thm/arsnova/exceptions/NotFoundException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/NotFoundException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Not Found means status code 404.
diff --git a/src/main/java/de/thm/arsnova/exceptions/NotImplementedException.java b/src/main/java/de/thm/arsnova/web/exceptions/NotImplementedException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/NotImplementedException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/NotImplementedException.java
index 93f7ed795..7941effb4 100644
--- a/src/main/java/de/thm/arsnova/exceptions/NotImplementedException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/NotImplementedException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Not Implemented means status code 501.
diff --git a/src/main/java/de/thm/arsnova/exceptions/PayloadTooLargeException.java b/src/main/java/de/thm/arsnova/web/exceptions/PayloadTooLargeException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/PayloadTooLargeException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/PayloadTooLargeException.java
index 9233b58f2..5dff0716a 100644
--- a/src/main/java/de/thm/arsnova/exceptions/PayloadTooLargeException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/PayloadTooLargeException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Payload Too Large means status code 413.
diff --git a/src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java b/src/main/java/de/thm/arsnova/web/exceptions/PreconditionFailedException.java
similarity index 92%
rename from src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/PreconditionFailedException.java
index e14d30c7e..31c1de8b2 100644
--- a/src/main/java/de/thm/arsnova/exceptions/PreconditionFailedException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/PreconditionFailedException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Precondition Failed means status code 412.
diff --git a/src/main/java/de/thm/arsnova/exceptions/UnauthorizedException.java b/src/main/java/de/thm/arsnova/web/exceptions/UnauthorizedException.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/exceptions/UnauthorizedException.java
rename to src/main/java/de/thm/arsnova/web/exceptions/UnauthorizedException.java
index f6a91249b..e889a0f42 100644
--- a/src/main/java/de/thm/arsnova/exceptions/UnauthorizedException.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/UnauthorizedException.java
@@ -1,4 +1,4 @@
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
 
 /**
  * Unauthorized means status code 401.
diff --git a/src/main/java/de/thm/arsnova/exceptions/package-info.java b/src/main/java/de/thm/arsnova/web/exceptions/package-info.java
similarity index 62%
rename from src/main/java/de/thm/arsnova/exceptions/package-info.java
rename to src/main/java/de/thm/arsnova/web/exceptions/package-info.java
index ea831c868..03df89db5 100644
--- a/src/main/java/de/thm/arsnova/exceptions/package-info.java
+++ b/src/main/java/de/thm/arsnova/web/exceptions/package-info.java
@@ -1,4 +1,4 @@
 /**
  * Contains exceptions used to return HTTP status codes
  */
-package de.thm.arsnova.exceptions;
+package de.thm.arsnova.web.exceptions;
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index 8ade69539..be4809c12 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -28,20 +28,20 @@ import com.corundumstudio.socketio.listener.DataListener;
 import com.corundumstudio.socketio.listener.DisconnectListener;
 import com.corundumstudio.socketio.protocol.Packet;
 import com.corundumstudio.socketio.protocol.PacketType;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.ScoreOptions;
-import de.thm.arsnova.entities.migration.ToV2Migrator;
-import de.thm.arsnova.events.*;
-import de.thm.arsnova.exceptions.NoContentException;
-import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.services.AnswerService;
-import de.thm.arsnova.services.CommentService;
-import de.thm.arsnova.services.FeedbackService;
-import de.thm.arsnova.services.ContentService;
-import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.Comment;
+import de.thm.arsnova.model.ScoreOptions;
+import de.thm.arsnova.model.migration.ToV2Migrator;
+import de.thm.arsnova.event.*;
+import de.thm.arsnova.web.exceptions.NoContentException;
+import de.thm.arsnova.web.exceptions.NotFoundException;
+import de.thm.arsnova.web.exceptions.UnauthorizedException;
+import de.thm.arsnova.service.AnswerService;
+import de.thm.arsnova.service.CommentService;
+import de.thm.arsnova.service.FeedbackService;
+import de.thm.arsnova.service.ContentService;
+import de.thm.arsnova.service.RoomService;
+import de.thm.arsnova.service.UserService;
 import de.thm.arsnova.websocket.message.Feedback;
 import de.thm.arsnova.websocket.message.Content;
 import de.thm.arsnova.websocket.message.Room;
@@ -152,7 +152,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 					return;
 				}
 				final String roomId = userService.getRoomIdByUserId(u.getId());
-				final de.thm.arsnova.entities.Room room = roomService.getInternal(roomId, u);
+				final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, u);
 
 				if (room.getSettings().isFeedbackLocked()) {
 					logger.debug("Feedback ignored: User: {}, Room Id: {}, Feedback: {}", u, roomId, data.getValue());
@@ -339,9 +339,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		this.useSSL = useSSL;
 	}
 
-	public void reportDeletedFeedback(final ClientAuthentication user, final Set<de.thm.arsnova.entities.Room> rooms) {
+	public void reportDeletedFeedback(final ClientAuthentication user, final Set<de.thm.arsnova.model.Room> rooms) {
 		final List<String> roomShortIds = new ArrayList<>();
-		for (final de.thm.arsnova.entities.Room room : rooms) {
+		for (final de.thm.arsnova.model.Room room : rooms) {
 			roomShortIds.add(room.getShortId());
 		}
 		this.sendToUser(user, "feedbackReset", roomShortIds);
@@ -376,8 +376,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	 * relevant Socket.IO data, the client needs to know after joining a session.
 	 */
 	public void reportRoomDataToClient(final String roomId, final ClientAuthentication user, final SocketIOClient client) {
-		final de.thm.arsnova.entities.Room room = roomService.getInternal(roomId, user);
-		final de.thm.arsnova.entities.Room.Settings settings = room.getSettings();
+		final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, user);
+		final de.thm.arsnova.model.Room.Settings settings = room.getSettings();
 
 		client.sendEvent("unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, user));
 		client.sendEvent("unansweredPreparationQuestions", contentService.getUnAnsweredPreparationContentIds(roomId, user));
@@ -386,7 +386,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		client.sendEvent("countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
 		client.sendEvent("activeUserCountData", roomService.activeUsers(roomId));
 //		client.sendEvent("learningProgressOptions", room.getLearningProgressOptions());
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomId(roomId);
+		final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId);
 		client.sendEvent("feedbackData", fb.getValues());
 
 		if (settings.isFlashcardsEnabled()) {
@@ -403,8 +403,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		}
 	}
 
-	public void reportUpdatedFeedbackForRoom(final de.thm.arsnova.entities.Room room) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomId(room.getId());
+	public void reportUpdatedFeedbackForRoom(final de.thm.arsnova.model.Room room) {
+		final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(room.getId());
 		broadcastInRoom(room.getId(), "feedbackData", fb.getValues());
 		try {
 			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getId());
@@ -415,7 +415,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	}
 
 	public void reportFeedbackForUserInRoom(final Room room, final ClientAuthentication user) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomId(room.getKeyword());
+		final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(room.getKeyword());
 		Long averageFeedback;
 		try {
 			averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getKeyword());
@@ -441,18 +441,18 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		broadcastInRoom(roomId, "activeUserCountData", count);
 	}
 
-	public void reportAnswersToContentAvailable(final de.thm.arsnova.entities.Room room, final Content content) {
+	public void reportAnswersToContentAvailable(final de.thm.arsnova.model.Room room, final Content content) {
 		broadcastInRoom(room.getId(), "answersToLecQuestionAvail", content.get_id());
 	}
 
-	public void reportCommentAvailable(final de.thm.arsnova.entities.Room room, final Comment comment) {
+	public void reportCommentAvailable(final de.thm.arsnova.model.Room room, final Comment comment) {
 		/* TODO role handling implementation, send this only to users with role lecturer */
 		broadcastInRoom(room.getId(), "audQuestionAvail", comment.getId());
 	}
 
-	public void reportContentAvailable(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
+	public void reportContentAvailable(final de.thm.arsnova.model.Room room, final List<de.thm.arsnova.model.Content> qs) {
 		List<Content> contents = new ArrayList<>();
-		for (de.thm.arsnova.entities.Content q : qs) {
+		for (de.thm.arsnova.model.Content q : qs) {
 			contents.add(new Content(q));
 		}
 
@@ -463,9 +463,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		broadcastInRoom(room.getId(), "lecturerQuestionAvailable", contents);
 	}
 
-	public void reportContentsLocked(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
+	public void reportContentsLocked(final de.thm.arsnova.model.Room room, final List<de.thm.arsnova.model.Content> qs) {
 		List<Content> contents = new ArrayList<>();
-		for (de.thm.arsnova.entities.Content q : qs) {
+		for (de.thm.arsnova.model.Content q : qs) {
 			contents.add(new Content(q));
 		}
 		broadcastInRoom(room.getId(), "lecturerQuestionLocked", contents);
@@ -532,7 +532,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		broadcastInRoom(roomId, "countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
 
 		// Update the unanswered count for the content variant that was answered.
-		final de.thm.arsnova.entities.Content content = event.getContent();
+		final de.thm.arsnova.model.Content content = event.getContent();
 		if ("lecture".equals(content.getGroups())) {
 			sendToUser(event.getUser(), "unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, event.getUser()));
 		} else if ("preparation".equals(content.getGroups())) {
@@ -597,7 +597,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	public void visit(LockVotesEvent event) {
 		List<Content> contents = new ArrayList<>();
-		for (de.thm.arsnova.entities.Content q : event.getQuestions()) {
+		for (de.thm.arsnova.model.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
 		broadcastInRoom(event.getRoom().getId(), "lockVotes", contents);
@@ -606,7 +606,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	public void visit(UnlockVotesEvent event) {
 		List<Content> contents = new ArrayList<>();
-		for (de.thm.arsnova.entities.Content q : event.getQuestions()) {
+		for (de.thm.arsnova.model.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
 		broadcastInRoom(event.getRoom().getId(), "unlockVotes", contents);
@@ -615,7 +615,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	public void visit(FeatureChangeEvent event) {
 		final String roomId = event.getRoom().getId();
-		final de.thm.arsnova.entities.Room.Settings settings = event.getRoom().getSettings();
+		final de.thm.arsnova.model.Room.Settings settings = event.getRoom().getSettings();
 		broadcastInRoom(roomId, "featureChange", toV2Migrator.migrate(settings));
 
 		if (settings.isFlashcardsEnabled()) {
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerListener.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerListener.java
index bbb982965..1d69bc792 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerListener.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerListener.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.websocket;
 
-import de.thm.arsnova.events.ArsnovaEvent;
-import de.thm.arsnova.events.ArsnovaEventVisitor;
+import de.thm.arsnova.event.ArsnovaEvent;
+import de.thm.arsnova.event.ArsnovaEventVisitor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
diff --git a/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java b/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java
index 9eae5d655..18ef78073 100644
--- a/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java
+++ b/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java
@@ -18,9 +18,9 @@
 package de.thm.arsnova.websocket;
 
 import com.corundumstudio.socketio.SocketIOClient;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 import de.thm.arsnova.security.User;
-import de.thm.arsnova.services.UserService;
+import de.thm.arsnova.service.UserService;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
diff --git a/src/main/java/de/thm/arsnova/websocket/message/Content.java b/src/main/java/de/thm/arsnova/websocket/message/Content.java
index 71886b220..c95f6a2b6 100644
--- a/src/main/java/de/thm/arsnova/websocket/message/Content.java
+++ b/src/main/java/de/thm/arsnova/websocket/message/Content.java
@@ -25,7 +25,7 @@ public class Content {
 	private final String _id;
 	private final String variant;
 
-	public Content(de.thm.arsnova.entities.Content content) {
+	public Content(de.thm.arsnova.model.Content content) {
 		this._id = content.getId();
 		/* FIXME: Message does not support content with multiple groups */
 		this.variant = content.getGroups().toArray(new String[1])[0];
diff --git a/src/main/resources/META-INF/aop.xml b/src/main/resources/META-INF/aop.xml
index bfd7f46db..fe4871b30 100644
--- a/src/main/resources/META-INF/aop.xml
+++ b/src/main/resources/META-INF/aop.xml
@@ -6,7 +6,7 @@
 	</weaver>
 
 	<aspects>
-		<aspect name="de.thm.arsnova.aop.RangeAspect"/>
+		<aspect name="de.thm.arsnova.web.RangeAspect"/>
 		<aspect name="de.thm.arsnova.web.InternalEntityAspect"/>
 		<aspect name="de.thm.arsnova.websocket.WebsocketAuthenticationAspect"/>
 	</aspects>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index f5e11a6bb..3195f1d88 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -11,7 +11,7 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			de.thm.arsnova.config.AppConfig
-			de.thm.arsnova.config.PersistanceConfig
+			de.thm.arsnova.config.PersistenceConfig
 			de.thm.arsnova.config.SecurityConfig
 		</param-value>
 	</context-param>
diff --git a/src/test/java/de/thm/arsnova/config/TestAppConfig.java b/src/test/java/de/thm/arsnova/config/TestAppConfig.java
index 90fdd7697..2d40e7060 100644
--- a/src/test/java/de/thm/arsnova/config/TestAppConfig.java
+++ b/src/test/java/de/thm/arsnova/config/TestAppConfig.java
@@ -1,7 +1,7 @@
 package de.thm.arsnova.config;
 
-import de.thm.arsnova.persistance.UserRepository;
-import de.thm.arsnova.services.StubUserService;
+import de.thm.arsnova.persistence.UserRepository;
+import de.thm.arsnova.service.StubUserService;
 import de.thm.arsnova.websocket.ArsnovaSocketioServer;
 import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
 import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
index f602e80d4..9acd9adfe 100644
--- a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
+++ b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
@@ -1,6 +1,6 @@
 package de.thm.arsnova.config;
 
-import de.thm.arsnova.persistance.*;
+import de.thm.arsnova.persistence.*;
 import org.mockito.Mockito;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
diff --git a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
index 7d7993da4..271b36b4a 100644
--- a/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/AbstractControllerTest.java
@@ -21,7 +21,7 @@ import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.services.StubUserService;
+import de.thm.arsnova.service.StubUserService;
 import org.junit.After;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/test/java/de/thm/arsnova/controller/v2/AuthenticationControllerTest.java b/src/test/java/de/thm/arsnova/controller/v2/AuthenticationControllerTest.java
index f3a118426..7a7681bdc 100644
--- a/src/test/java/de/thm/arsnova/controller/v2/AuthenticationControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/v2/AuthenticationControllerTest.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.controller.AbstractControllerTest;
-import de.thm.arsnova.services.StubUserService;
+import de.thm.arsnova.service.StubUserService;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
diff --git a/src/test/java/de/thm/arsnova/controller/v2/CourseControllerTest.java b/src/test/java/de/thm/arsnova/controller/v2/CourseControllerTest.java
index 980130965..01765d047 100644
--- a/src/test/java/de/thm/arsnova/controller/v2/CourseControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/v2/CourseControllerTest.java
@@ -19,8 +19,7 @@ package de.thm.arsnova.controller.v2;
 
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.controller.AbstractControllerTest;
-import de.thm.arsnova.controller.v2.CourseController;
-import de.thm.arsnova.services.StubUserService;
+import de.thm.arsnova.service.StubUserService;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.InjectMocks;
diff --git a/src/test/java/de/thm/arsnova/entities/ContentTest.java b/src/test/java/de/thm/arsnova/model/ContentTest.java
similarity index 95%
rename from src/test/java/de/thm/arsnova/entities/ContentTest.java
rename to src/test/java/de/thm/arsnova/model/ContentTest.java
index 2cacd43a1..26a14227d 100644
--- a/src/test/java/de/thm/arsnova/entities/ContentTest.java
+++ b/src/test/java/de/thm/arsnova/model/ContentTest.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
-import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.migration.v2.AnswerOption;
-import de.thm.arsnova.entities.migration.v2.Content;
+import de.thm.arsnova.model.migration.v2.Answer;
+import de.thm.arsnova.model.migration.v2.AnswerOption;
+import de.thm.arsnova.model.migration.v2.Content;
 import org.junit.Test;
 
 import java.util.ArrayList;
diff --git a/src/test/java/de/thm/arsnova/entities/EntityTest.java b/src/test/java/de/thm/arsnova/model/EntityTest.java
similarity index 99%
rename from src/test/java/de/thm/arsnova/entities/EntityTest.java
rename to src/test/java/de/thm/arsnova/model/EntityTest.java
index 839c14426..d5edc7e76 100644
--- a/src/test/java/de/thm/arsnova/entities/EntityTest.java
+++ b/src/test/java/de/thm/arsnova/model/EntityTest.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import org.junit.Test;
 import org.springframework.core.style.ToStringCreator;
diff --git a/src/test/java/de/thm/arsnova/entities/FeedbackTest.java b/src/test/java/de/thm/arsnova/model/FeedbackTest.java
similarity index 98%
rename from src/test/java/de/thm/arsnova/entities/FeedbackTest.java
rename to src/test/java/de/thm/arsnova/model/FeedbackTest.java
index e0f3c1b67..01ddd3b1f 100644
--- a/src/test/java/de/thm/arsnova/entities/FeedbackTest.java
+++ b/src/test/java/de/thm/arsnova/model/FeedbackTest.java
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
 import org.junit.Test;
 
diff --git a/src/test/java/de/thm/arsnova/entities/TestClient.java b/src/test/java/de/thm/arsnova/model/TestClient.java
similarity index 92%
rename from src/test/java/de/thm/arsnova/entities/TestClient.java
rename to src/test/java/de/thm/arsnova/model/TestClient.java
index 905c152aa..ffb7c9a52 100644
--- a/src/test/java/de/thm/arsnova/entities/TestClient.java
+++ b/src/test/java/de/thm/arsnova/model/TestClient.java
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities;
+package de.thm.arsnova.model;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
 import org.springframework.security.core.GrantedAuthority;
 
 import java.util.HashSet;
diff --git a/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java b/src/test/java/de/thm/arsnova/model/migration/FromV2MigratorTest.java
similarity index 93%
rename from src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java
rename to src/test/java/de/thm/arsnova/model/migration/FromV2MigratorTest.java
index fa1c2c82b..fec6f4954 100644
--- a/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java
+++ b/src/test/java/de/thm/arsnova/model/migration/FromV2MigratorTest.java
@@ -15,16 +15,16 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration;
+package de.thm.arsnova.model.migration;
 
 import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.entities.ChoiceAnswer;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.migration.v2.Answer;
+import de.thm.arsnova.model.ChoiceAnswer;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.migration.v2.Answer;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/test/java/de/thm/arsnova/entities/migration/ToV2MigratorTest.java b/src/test/java/de/thm/arsnova/model/migration/ToV2MigratorTest.java
similarity index 95%
rename from src/test/java/de/thm/arsnova/entities/migration/ToV2MigratorTest.java
rename to src/test/java/de/thm/arsnova/model/migration/ToV2MigratorTest.java
index 26a344cfe..d52d3eb0c 100644
--- a/src/test/java/de/thm/arsnova/entities/migration/ToV2MigratorTest.java
+++ b/src/test/java/de/thm/arsnova/model/migration/ToV2MigratorTest.java
@@ -15,17 +15,17 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.entities.migration;
+package de.thm.arsnova.model.migration;
 
 import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.entities.AnswerStatistics;
-import de.thm.arsnova.entities.ChoiceAnswer;
-import de.thm.arsnova.entities.ChoiceQuestionContent;
-import de.thm.arsnova.entities.Content;
-import de.thm.arsnova.entities.migration.v2.Answer;
+import de.thm.arsnova.model.AnswerStatistics;
+import de.thm.arsnova.model.ChoiceAnswer;
+import de.thm.arsnova.model.ChoiceQuestionContent;
+import de.thm.arsnova.model.Content;
+import de.thm.arsnova.model.migration.v2.Answer;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java b/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java
similarity index 97%
rename from src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java
rename to src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java
index 12425ee84..2a8ccbecc 100644
--- a/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java
+++ b/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java
@@ -1,12 +1,12 @@
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.persistance.RoomRepository;
+import de.thm.arsnova.model.Room;
+import de.thm.arsnova.persistence.RoomRepository;
 import de.thm.arsnova.test.context.support.WithMockUser;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/src/test/java/de/thm/arsnova/services/StubUserService.java b/src/test/java/de/thm/arsnova/service/StubUserService.java
similarity index 93%
rename from src/test/java/de/thm/arsnova/services/StubUserService.java
rename to src/test/java/de/thm/arsnova/service/StubUserService.java
index 5a53c6604..a08514848 100644
--- a/src/test/java/de/thm/arsnova/services/StubUserService.java
+++ b/src/test/java/de/thm/arsnova/service/StubUserService.java
@@ -15,11 +15,11 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.persistance.UserRepository;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
+import de.thm.arsnova.persistence.UserRepository;
 import de.thm.arsnova.security.User;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
diff --git a/src/test/java/de/thm/arsnova/services/UserServiceTest.java b/src/test/java/de/thm/arsnova/service/UserServiceTest.java
similarity index 97%
rename from src/test/java/de/thm/arsnova/services/UserServiceTest.java
rename to src/test/java/de/thm/arsnova/service/UserServiceTest.java
index 5dd1a3779..6794fa424 100644
--- a/src/test/java/de/thm/arsnova/services/UserServiceTest.java
+++ b/src/test/java/de/thm/arsnova/service/UserServiceTest.java
@@ -15,14 +15,14 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services;
+package de.thm.arsnova.service;
 
 import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.security.User;
 import de.thm.arsnova.security.pac4j.OAuthToken;
 import org.junit.Test;
diff --git a/src/test/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculatorTest.java b/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java
similarity index 96%
rename from src/test/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculatorTest.java
rename to src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java
index 007d2f2ee..dad34d7b7 100644
--- a/src/test/java/de/thm/arsnova/services/score/QuestionBasedScoreCalculatorTest.java
+++ b/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.TestClient;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.model.TestClient;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java b/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java
similarity index 95%
rename from src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java
rename to src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java
index 8461f81c8..5469530b0 100644
--- a/src/test/java/de/thm/arsnova/services/score/ScoreBasedScoreCalculatorTest.java
+++ b/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java
@@ -15,12 +15,12 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package de.thm.arsnova.services.score;
+package de.thm.arsnova.service.score;
 
-import de.thm.arsnova.entities.TestClient;
-import de.thm.arsnova.entities.migration.v2.ClientAuthentication;
-import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.persistance.SessionStatisticsRepository;
+import de.thm.arsnova.model.TestClient;
+import de.thm.arsnova.model.migration.v2.ClientAuthentication;
+import de.thm.arsnova.model.transport.ScoreStatistics;
+import de.thm.arsnova.persistence.SessionStatisticsRepository;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/src/test/java/de/thm/arsnova/test/context/support/WithMockUser.java b/src/test/java/de/thm/arsnova/test/context/support/WithMockUser.java
index 249252b79..bcbcece44 100644
--- a/src/test/java/de/thm/arsnova/test/context/support/WithMockUser.java
+++ b/src/test/java/de/thm/arsnova/test/context/support/WithMockUser.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.test.context.support;
 
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.UserProfile;
 import org.springframework.security.test.context.support.WithSecurityContext;
 
 import java.lang.annotation.Documented;
diff --git a/src/test/java/de/thm/arsnova/test/context/support/WithMockUserSecurityContextFactory.java b/src/test/java/de/thm/arsnova/test/context/support/WithMockUserSecurityContextFactory.java
index ed777e26d..b158e109f 100644
--- a/src/test/java/de/thm/arsnova/test/context/support/WithMockUserSecurityContextFactory.java
+++ b/src/test/java/de/thm/arsnova/test/context/support/WithMockUserSecurityContextFactory.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.test.context.support;
 
-import de.thm.arsnova.entities.UserProfile;
+import de.thm.arsnova.model.UserProfile;
 import de.thm.arsnova.security.User;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
-- 
GitLab