From 26c801ebee94d3ebff4aaa90c2dcfa077ab256b5 Mon Sep 17 00:00:00 2001
From: Kacper Ziubryniewicz <kapi2289@gmail.com>
Date: Sat, 28 Sep 2019 15:17:03 +0200
Subject: [PATCH] [Structure] Move daos and models to database modules

---
 .../java/pl/szczodrzynski/edziennik/App.java  |  24 ++--
 .../pl/szczodrzynski/edziennik/Extensions.kt  |   4 +-
 .../szczodrzynski/edziennik/MainActivity.kt   |  14 +-
 .../pl/szczodrzynski/edziennik/Notifier.java  |   2 +-
 .../edziennik/WidgetTimetable.java            |  10 +-
 .../api/interfaces/MessageListCallback.java   |   9 --
 .../interfaces/RecipientListGetCallback.java  |   9 --
 .../edziennik/api/v2/ApiLoginResult.kt        |   6 -
 .../edziennik/api/v2/FirstLoginResult.kt      |   6 -
 .../api/v2/librus/data/DataLibrus.kt          |  10 --
 .../v2/librus/firstlogin/FirstLoginLibrus.kt  |  12 --
 .../librus/firstlogin/FirstLoginSynergia.kt   |  12 --
 .../edziennik/{ => data}/api/AppError.java    |   2 +-
 .../edziennik/{ => data}/api/Edziennik.java   |  96 ++++++-------
 .../edziennik/{ => data}/api/Iuczniowie.java  |  94 ++++++------
 .../edziennik/{ => data}/api/Librus.java      | 134 +++++++++---------
 .../{ => data}/api/Mobidziennik.java          |  96 ++++++-------
 .../edziennik/{ => data}/api/Vulcan.java      |  90 ++++++------
 .../api/interfaces/AttachmentGetCallback.java |   2 +-
 .../api/interfaces/EdziennikInterface.java    |  13 +-
 .../api/interfaces/ErrorCallback.java         |   4 +-
 .../api/interfaces/LoginCallback.java         |   2 +-
 .../api/interfaces/MessageGetCallback.java    |   5 +-
 .../api/interfaces/MessageListCallback.java   |   9 ++
 .../api/interfaces/ProgressCallback.java      |   2 +-
 .../interfaces/RecipientListGetCallback.java  |   9 ++
 .../api/interfaces/SyncCallback.java          |  11 +-
 .../edziennik/data/api/v2/ApiLoginResult.kt   |   6 +
 .../edziennik/{ => data}/api/v2/Constants.kt  |   2 +-
 .../edziennik/data/api/v2/FirstLoginResult.kt |   6 +
 .../{ => data}/api/v2/librus/Librus.kt        |  36 ++---
 .../data/api/v2/librus/data/DataLibrus.kt     |  10 ++
 .../v2/librus/firstlogin/FirstLoginLibrus.kt  |  12 ++
 .../librus/firstlogin/FirstLoginSynergia.kt   |  12 ++
 .../api/v2/librus/login/LoginJst.kt           |   9 +-
 .../api/v2/librus/login/LoginLibrus.kt        |  14 +-
 .../api/v2/librus/login/LoginSynergia.kt      |   8 +-
 .../v2/librus/login/SynergiaTokenExtractor.kt |  18 +--
 .../{ => data}/api/v2/models/DataStore.kt     |  19 ++-
 .../{ => data}/api/v2/models/Feature.kt       |   4 +-
 .../{ => data}/api/v2/models/Features.kt      |   6 +-
 .../{datamodels => data/db}/AppDb.java        |  48 ++++++-
 .../db/converters}/ConverterDate.java         |   2 +-
 .../db/converters}/ConverterJsonObject.java   |   2 +-
 .../db/converters}/ConverterListLong.java     |   2 +-
 .../db/converters}/ConverterListString.java   |   2 +-
 .../db/converters}/ConverterTime.java         |   2 +-
 .../modules/announcements}/Announcement.java  |   2 +-
 .../announcements}/AnnouncementDao.java       |   6 +-
 .../announcements}/AnnouncementFull.java      |   2 +-
 .../db/modules/attendance}/Attendance.java    |   2 +-
 .../db/modules/attendance}/AttendanceDao.java |   4 +-
 .../modules/attendance}/AttendanceFull.java   |   2 +-
 .../db/modules/debuglog}/DebugLog.java        |   3 +-
 .../db/modules/debuglog}/DebugLogDao.java     |   2 +-
 .../db/modules/events}/Event.java             |   2 +-
 .../db/modules/events}/EventDao.java          |   8 +-
 .../db/modules/events}/EventFull.java         |   2 +-
 .../db/modules/events}/EventType.java         |   4 +-
 .../db/modules/events}/EventTypeDao.java      |   2 +-
 .../db/modules/feedback}/FeedbackMessage.java |   2 +-
 .../modules/feedback}/FeedbackMessageDao.java |   2 +-
 .../feedback}/FeedbackMessageWithCount.java   |   2 +-
 .../db/modules/grades}/Grade.java             |   2 +-
 .../db/modules/grades}/GradeCategory.java     |   2 +-
 .../db/modules/grades}/GradeCategoryDao.java  |   2 +-
 .../db/modules/grades}/GradeDao.java          |   4 +-
 .../db/modules/grades}/GradeFull.java         |   2 +-
 .../db/modules/lessons}/Lesson.java           |   2 +-
 .../db/modules/lessons}/LessonChange.java     |   2 +-
 .../db/modules/lessons}/LessonChangeDao.java  |   4 +-
 .../db/modules/lessons}/LessonChangeFull.java |   2 +-
 .../db/modules/lessons}/LessonDao.java        |   2 +-
 .../db/modules/lessons}/LessonFull.java       |   8 +-
 .../db/modules/login}/LoginStore.java         |   5 +-
 .../db/modules/login}/LoginStoreDao.java      |   4 +-
 .../db/modules/luckynumber}/LuckyNumber.java  |   2 +-
 .../modules/luckynumber}/LuckyNumberDao.java  |   2 +-
 .../db/modules/messages}/Message.java         |   2 +-
 .../db/modules/messages}/MessageDao.java      |  12 +-
 .../db/modules/messages}/MessageFull.java     |   2 +-
 .../modules/messages}/MessageRecipient.java   |   2 +-
 .../messages}/MessageRecipientDao.java        |   5 +-
 .../messages}/MessageRecipientFull.java       |   2 +-
 .../db/modules/metadata}/Metadata.java        |   2 +-
 .../db/modules/metadata}/MetadataDao.java     |  26 ++--
 .../db/modules/notices}/Notice.java           |   2 +-
 .../db/modules/notices}/NoticeDao.java        |   6 +-
 .../db/modules/notices}/NoticeFull.java       |   2 +-
 .../db/modules/profiles}/Profile.kt           |   2 +-
 .../db/modules/profiles}/ProfileDao.java      |   4 +-
 .../db/modules/profiles}/ProfileFull.kt       |   5 +-
 .../db/modules/subjects}/Subject.java         |   2 +-
 .../db/modules/subjects}/SubjectDao.java      |   2 +-
 .../db/modules/teachers}/Teacher.java         |   3 +-
 .../db/modules/teachers}/TeacherDao.java      |   2 +-
 .../db/modules/teams}/Team.java               |   2 +-
 .../db/modules/teams}/TeamDao.java            |   2 +-
 .../edziennik/network/ServerRequest.java      |   4 +-
 .../sync/MyFirebaseMessagingService.java      |  16 +--
 .../edziennik/sync/SyncService.java           |  10 +-
 .../ui/dialogs/event/EventListAdapter.java    |   6 +-
 .../ui/dialogs/event/EventListDialog.java     |   4 +-
 .../ui/dialogs/event/EventManualDialog.java   |  30 ++--
 .../ui/dialogs/grade/GradeDetailsDialog.java  |   6 +-
 .../lessonchange/LessonChangeDialog.java      |   2 +-
 .../RegisterAgendaCalendarFragment.java       |   4 +-
 .../agenda/RegisterAgendaDefaultFragment.java |  10 +-
 .../announcements/AnnouncementsAdapter.java   |   2 +-
 .../RegisterAnnouncementsFragment.java        |   2 +-
 .../attendance/AttendancesAdapter.java        |  14 +-
 .../RegisterAttendancesFragment.java          |  22 +--
 .../ui/modules/base/CrashActivity.java        |   2 +-
 .../ui/modules/base/FeedbackActivity.java     |   4 +-
 .../ui/modules/base/FeedbackFragment.kt       |   2 +-
 .../ui/modules/grades/GradesListAdapter.java  |   6 +-
 .../modules/grades/GradesSubjectAdapter.java  |  15 +-
 .../grades/RegisterGradesFragment.java        |  18 +--
 .../grades/editor/GradesEditorFragment.kt     |  10 +-
 .../ui/modules/home/CounterActivity.java      |   3 +-
 .../ui/modules/home/HomeFragment.java         |  22 +--
 .../ui/modules/home/HomeTimetableCard.java    |   8 +-
 .../ui/modules/homework/HomeworkAdapter.java  |   2 +-
 .../ui/modules/homework/HomeworkFragment.kt   |   2 +-
 .../modules/homework/HomeworkListFragment.kt  |   2 +-
 .../ui/modules/login/LoginActivity.java       |   2 +-
 .../login/LoginIuczniowieFragment.java        |   8 +-
 .../ui/modules/login/LoginLibrusFragment.java |   8 +-
 .../modules/login/LoginMigrationFragment.java |  88 ++++++------
 .../login/LoginMigrationSyncFragment.java     |  10 +-
 .../login/LoginMobidziennikFragment.java      |  12 +-
 .../ui/modules/login/LoginProfileObject.java  |   4 +-
 .../modules/login/LoginProgressFragment.java  |  14 +-
 .../modules/login/LoginSummaryFragment.java   |   2 +-
 .../ui/modules/login/LoginSyncFragment.java   |  60 ++++----
 .../ui/modules/login/LoginVulcanFragment.java |  12 +-
 .../ui/modules/messages/MessagesAdapter.java  |   6 +-
 .../messages/MessagesComposeActivity.java     |  14 +-
 .../MessagesComposeSuggestionAdapter.java     |   2 +-
 .../messages/MessagesDetailsFragment.java     |  16 +--
 .../ui/modules/messages/MessagesFragment.kt   |   2 +-
 .../messages/MessagesListFragment.java        |  20 +--
 .../ui/modules/messages/MessagesUtils.java    |  12 +-
 .../ui/modules/notices/NoticesAdapter.kt      |   6 +-
 .../notices/RegisterNoticesFragment.java      |   6 +-
 .../modules/settings/SettingsNewFragment.java |  14 +-
 .../timetable/RegisterTimetableFragment.java  |   8 +-
 .../modules/timetable/TimetableAdapter.java   |   8 +-
 .../webpush/WebPushConfigActivity.java        |   2 +-
 .../szczodrzynski/edziennik/utils/Colors.java |   2 +-
 .../edziennik/utils/models/AppConfig.java     |   8 +-
 .../utils/models/ItemGradesSubjectModel.java  |   6 +-
 .../utils/models/ItemTimetableModel.java      |   4 +-
 .../widgets/WidgetConfigActivity.java         |   2 +-
 .../luckynumber/WidgetLuckyNumber.java        |   2 +-
 .../main/res/layout/dialog_grade_details.xml  |   2 +-
 156 files changed, 872 insertions(+), 804 deletions(-)
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt
 delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/AppError.java (99%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/Edziennik.java (93%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/Iuczniowie.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/Librus.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/Mobidziennik.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/Vulcan.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/AttachmentGetCallback.java (85%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/EdziennikInterface.java (88%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/ErrorCallback.java (61%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/LoginCallback.java (50%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/MessageGetCallback.java (60%)
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/ProgressCallback.java (77%)
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/interfaces/SyncCallback.java (55%)
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/Constants.kt (96%)
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/librus/Librus.kt (85%)
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt
 create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/librus/login/LoginJst.kt (50%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/librus/login/LoginLibrus.kt (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/librus/login/LoginSynergia.kt (55%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/librus/login/SynergiaTokenExtractor.kt (91%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/models/DataStore.kt (79%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/models/Feature.kt (64%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{ => data}/api/v2/models/Features.kt (73%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db}/AppDb.java (89%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/converters}/ConverterDate.java (87%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/converters}/ConverterJsonObject.java (89%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/converters}/ConverterListLong.java (90%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/converters}/ConverterListString.java (90%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/converters}/ConverterTime.java (88%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/announcements}/Announcement.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/announcements}/AnnouncementDao.java (92%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/announcements}/AnnouncementFull.java (74%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/attendance}/Attendance.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/attendance}/AttendanceDao.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/attendance}/AttendanceFull.java (81%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/debuglog}/DebugLog.java (82%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/debuglog}/DebugLogDao.java (69%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/events}/Event.java (98%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/events}/EventDao.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/events}/EventFull.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/events}/EventType.java (92%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/events}/EventTypeDao.java (93%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/feedback}/FeedbackMessage.java (91%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/feedback}/FeedbackMessageDao.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/feedback}/FeedbackMessageWithCount.java (62%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/grades}/Grade.java (98%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/grades}/GradeCategory.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/grades}/GradeCategoryDao.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/grades}/GradeDao.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/grades}/GradeFull.java (84%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/Lesson.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/LessonChange.java (98%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/LessonChangeDao.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/LessonChangeFull.java (84%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/LessonDao.java (99%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/lessons}/LessonFull.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/login}/LoginStore.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/login}/LoginStoreDao.java (90%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/luckynumber}/LuckyNumber.java (90%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/luckynumber}/LuckyNumberDao.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/Message.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/MessageDao.java (89%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/MessageFull.java (89%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/MessageRecipient.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/MessageRecipientDao.java (92%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/messages}/MessageRecipientFull.java (88%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/metadata}/Metadata.java (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/metadata}/MetadataDao.java (88%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/notices}/Notice.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/notices}/NoticeDao.java (92%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/notices}/NoticeFull.java (75%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/profiles}/Profile.kt (99%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/profiles}/ProfileDao.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/profiles}/ProfileFull.kt (97%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/subjects}/Subject.java (96%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/subjects}/SubjectDao.java (94%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/teachers}/Teacher.java (98%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/teachers}/TeacherDao.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/teams}/Team.java (95%)
 rename app/src/main/java/pl/szczodrzynski/edziennik/{datamodels => data/db/modules/teams}/TeamDao.java (97%)

diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.java b/app/src/main/java/pl/szczodrzynski/edziennik/App.java
index 7822861b..afb44fda 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/App.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.java
@@ -64,16 +64,16 @@ import okhttp3.ConnectionSpec;
 import okhttp3.OkHttpClient;
 import okhttp3.TlsVersion;
 import pl.szczodrzynski.edziennik.ui.modules.base.CrashActivity;
-import pl.szczodrzynski.edziennik.api.Edziennik;
-import pl.szczodrzynski.edziennik.api.Iuczniowie;
-import pl.szczodrzynski.edziennik.api.Librus;
-import pl.szczodrzynski.edziennik.api.Mobidziennik;
-import pl.szczodrzynski.edziennik.api.Vulcan;
-import pl.szczodrzynski.edziennik.datamodels.AppDb;
-import pl.szczodrzynski.edziennik.datamodels.DebugLog;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.api.Edziennik;
+import pl.szczodrzynski.edziennik.data.api.Iuczniowie;
+import pl.szczodrzynski.edziennik.data.api.Librus;
+import pl.szczodrzynski.edziennik.data.api.Mobidziennik;
+import pl.szczodrzynski.edziennik.data.api.Vulcan;
+import pl.szczodrzynski.edziennik.data.db.AppDb;
+import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.utils.models.AppConfig;
 import pl.szczodrzynski.edziennik.network.NetworkUtils;
 import pl.szczodrzynski.edziennik.network.TLSSocketFactory;
@@ -83,8 +83,8 @@ import pl.szczodrzynski.edziennik.utils.PermissionChecker;
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
 
 public class App extends androidx.multidex.MultiDexApplication {
     private static final String TAG = "App";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt
index a1808960..76719287 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt
@@ -9,8 +9,8 @@ import android.os.Bundle
 import androidx.core.app.ActivityCompat
 import com.google.gson.JsonArray
 import com.google.gson.JsonObject
-import pl.szczodrzynski.edziennik.datamodels.Profile
-import pl.szczodrzynski.edziennik.datamodels.Teacher
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
 import pl.szczodrzynski.navlib.R
 import pl.szczodrzynski.navlib.crc16
 import pl.szczodrzynski.navlib.getColorFromRes
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt
index 77e72edb..7e43c292 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt
@@ -19,7 +19,7 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria
 import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
 import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem
 import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
-import pl.szczodrzynski.edziennik.datamodels.Metadata.*
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.*
 import pl.szczodrzynski.edziennik.utils.Themes
 import pl.szczodrzynski.navlib.NavView
 import pl.szczodrzynski.navlib.SystemBarsUtil
@@ -41,13 +41,13 @@ import com.mikepenz.materialdrawer.model.ProfileDrawerItem
 import com.mikepenz.materialdrawer.model.interfaces.IProfile
 import pl.droidsonroids.gif.GifDrawable
 import pl.szczodrzynski.edziennik.App.APP_URL
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.*
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.*
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback
 import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.Profile
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
 import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog
 import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment
 import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java
index 0ad8cc23..cc2237c3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java
@@ -16,7 +16,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.receivers.BootReceiver;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java
index 194dace4..36296e39 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.java
@@ -28,10 +28,10 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
 import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.ItemWidgetTimetableModel;
@@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.widgets.timetable.LessonDetailsActivity;
 import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableService;
 
 import static pl.szczodrzynski.edziennik.ExtensionsKt.filterOutArchived;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java
deleted file mode 100644
index 77137a0e..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageListCallback.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
-
-import java.util.List;
-
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-
-public interface MessageListCallback {
-    void onSuccess(List<MessageFull> messageList);
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java
deleted file mode 100644
index dce9ec9d..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/RecipientListGetCallback.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
-
-import java.util.List;
-
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-
-public interface RecipientListGetCallback {
-    void onSuccess(List<Teacher> teacherList);
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt
deleted file mode 100644
index 30b0edad..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiLoginResult.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package pl.szczodrzynski.edziennik.api.v2
-
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-
-data class ApiLoginResult(val loginStore: LoginStore, val error: AppError?)
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt
deleted file mode 100644
index 92d3da9e..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/FirstLoginResult.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package pl.szczodrzynski.edziennik.api.v2
-
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.datamodels.Profile
-
-data class FirstLoginResult(val profileList: ArrayList<Profile>, val error: AppError?)
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt
deleted file mode 100644
index 66fc9c39..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/DataLibrus.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.data
-
-import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.Profile
-
-class DataLibrus(val app: App, val profile: Profile, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) {
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt
deleted file mode 100644
index e8255006..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginLibrus.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin
-
-import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.Profile
-
-class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
-    init {
-
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt
deleted file mode 100644
index 376a86ac..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/FirstLoginSynergia.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin
-
-import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.Profile
-
-class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
-    init {
-
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java
similarity index 99%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java
index d5f6c2a7..ea72e969 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/AppError.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.content.Context;
 import android.os.AsyncTask;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java
similarity index 93%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java
index c085e092..1e18057d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Edziennik.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Edziennik.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.app.Activity;
 import android.appwidget.AppWidgetManager;
@@ -43,25 +43,25 @@ import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.WidgetTimetable;
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.AttendanceFull;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.NoticeFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Notification;
 import pl.szczodrzynski.edziennik.network.ServerRequest;
@@ -75,34 +75,34 @@ import static com.mikepenz.iconics.utils.IconicsConvertersKt.colorInt;
 import static com.mikepenz.iconics.utils.IconicsConvertersKt.sizeDp;
 import static pl.szczodrzynski.edziennik.App.APP_URL;
 import static pl.szczodrzynski.edziennik.MainActivity.DRAWER_ITEM_HOME;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OK;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_ARCHIVED;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND;
-import static pl.szczodrzynski.edziennik.api.AppError.stringErrorCode;
-import static pl.szczodrzynski.edziennik.api.AppError.stringErrorType;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_AGENDA;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ALL;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCES;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_GRADES;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_NOTICES;
-import static pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OK;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_ARCHIVED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
+import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorCode;
+import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorType;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_AGENDA;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ALL;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCES;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_GRADES;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_NOTICES;
+import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 import static pl.szczodrzynski.edziennik.sync.SyncService.PROFILE_MAX_PROGRESS;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 import static pl.szczodrzynski.edziennik.utils.Utils.ns;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java
index ef582884..83b8a8e9 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Iuczniowie.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Iuczniowie.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.content.Context;
 import android.graphics.Color;
@@ -34,58 +34,58 @@ import okhttp3.HttpUrl;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface;
-import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.datamodels.Announcement;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.Lesson;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
+import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Endpoint;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.models.Week;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE;
 import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
 import static pl.szczodrzynski.edziennik.utils.Utils.crc32;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java
index 9eb31ea0..83bda4b6 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Librus.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Librus.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.content.Context;
 import android.graphics.Color;
@@ -45,34 +45,34 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface;
-import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.api.v2.models.DataStore;
-import pl.szczodrzynski.edziennik.datamodels.Announcement;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
-import pl.szczodrzynski.edziennik.datamodels.Lesson;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
+import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Endpoint;
@@ -86,44 +86,44 @@ import static java.net.HttpURLConnection.HTTP_GONE;
 import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
 import static java.net.HttpURLConnection.HTTP_OK;
 import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_DISCONNECTED;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_TEACHER_ABSENCE;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_NORMAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_EDUCATOR;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_LIBRARIAN;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_OTHER;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PARENTS_COUNCIL;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PEDAGOGUE;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_ADMIN;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SECRETARIAT;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SUPER_ADMIN;
-import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_TEACHER;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_DISCONNECTED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_TEACHER_ABSENCE;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_NORMAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_EDUCATOR;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_LIBRARIAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_OTHER;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PARENTS_COUNCIL;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PEDAGOGUE;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_ADMIN;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SECRETARIAT;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SUPER_ADMIN;
+import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_TEACHER;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.c;
 import static pl.szczodrzynski.edziennik.utils.Utils.contains;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java
index e3ac7922..c8c6b52e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Mobidziennik.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Mobidziennik.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.content.Context;
 import android.graphics.Color;
@@ -40,59 +40,59 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface;
-import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
-import pl.szczodrzynski.edziennik.datamodels.Lesson;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
+import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Endpoint;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.models.Week;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_CUSTOM;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_CUSTOM;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java
index 6694fc5d..d1095dcb 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/Vulcan.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Vulcan.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api;
+package pl.szczodrzynski.edziennik.data.api;
 
 import android.content.Context;
 import android.os.Build;
@@ -35,30 +35,30 @@ import okhttp3.OkHttpClient;
 import okio.Buffer;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.EdziennikInterface;
-import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
-import pl.szczodrzynski.edziennik.datamodels.Lesson;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
+import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Endpoint;
@@ -66,26 +66,26 @@ import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.models.Week;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE;
-import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
 import static pl.szczodrzynski.edziennik.utils.Utils.c;
 import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java
similarity index 85%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java
index 1a24ee68..0bd76455 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/AttachmentGetCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/AttachmentGetCallback.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 import im.wangchao.mhttp.Request;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java
similarity index 88%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java
index 15770e2f..5b2af1b8 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/EdziennikInterface.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 import android.content.Context;
 import androidx.annotation.NonNull;
@@ -6,10 +6,11 @@ import androidx.annotation.Nullable;
 
 import java.util.Map;
 
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
 import pl.szczodrzynski.edziennik.utils.models.Endpoint;
 
@@ -59,7 +60,7 @@ public interface EdziennikInterface {
      *
      * Updates a database-saved {@code teacherList} with {@code loginId}s.
      *
-     * A {@link pl.szczodrzynski.edziennik.datamodels.Teacher} is considered as a recipient when its {@code loginId} is not null.
+     * A {@link Teacher} is considered as a recipient when its {@code loginId} is not null.
      *
      * May be executed on any thread.
      *
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java
similarity index 61%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java
index 4f84f640..cc8f2375 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ErrorCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ErrorCallback.java
@@ -1,10 +1,10 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 import android.content.Context;
 
 import androidx.annotation.NonNull;
 
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 
 public interface ErrorCallback {
     void onError(Context activityContext, @NonNull AppError error);
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java
similarity index 50%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java
index 4720eee4..cae0c65e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/LoginCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/LoginCallback.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 public interface LoginCallback {
     void onSuccess();
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java
similarity index 60%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java
index 2fca992c..7fd973c8 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/MessageGetCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageGetCallback.java
@@ -1,7 +1,6 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
 
 /**
  * Callback containing a {@link MessageFull} which already has its {@code body} and {@code recipients}.
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java
new file mode 100644
index 00000000..71561ffd
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/MessageListCallback.java
@@ -0,0 +1,9 @@
+package pl.szczodrzynski.edziennik.data.api.interfaces;
+
+import java.util.List;
+
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+
+public interface MessageListCallback {
+    void onSuccess(List<MessageFull> messageList);
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java
similarity index 77%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java
index 07a88987..32948eb9 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/ProgressCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/ProgressCallback.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 import androidx.annotation.StringRes;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java
new file mode 100644
index 00000000..fc249432
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/RecipientListGetCallback.java
@@ -0,0 +1,9 @@
+package pl.szczodrzynski.edziennik.data.api.interfaces;
+
+import java.util.List;
+
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+
+public interface RecipientListGetCallback {
+    void onSuccess(List<Teacher> teacherList);
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java
similarity index 55%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java
index 54329973..dfaf243b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/interfaces/SyncCallback.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/SyncCallback.java
@@ -1,15 +1,12 @@
-package pl.szczodrzynski.edziennik.api.interfaces;
+package pl.szczodrzynski.edziennik.data.api.interfaces;
 
 import android.content.Context;
 
 import java.util.List;
 
-import androidx.annotation.StringRes;
-
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 
 /**
  * A callback used for error reporting, progress information.
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt
new file mode 100644
index 00000000..8dc3ac89
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/ApiLoginResult.kt
@@ -0,0 +1,6 @@
+package pl.szczodrzynski.edziennik.data.api.v2
+
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+
+data class ApiLoginResult(val loginStore: LoginStore, val error: AppError?)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt
index 0125de4d..59165f11 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/Constants.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.v2
+package pl.szczodrzynski.edziennik.data.api.v2
 
 const val FEATURE_ALL = 0
 const val FEATURE_TIMETABLE = 1
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt
new file mode 100644
index 00000000..099c2771
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/FirstLoginResult.kt
@@ -0,0 +1,6 @@
+package pl.szczodrzynski.edziennik.data.api.v2
+
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+
+data class FirstLoginResult(val profileList: ArrayList<Profile>, val error: AppError?)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt
similarity index 85%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt
index d99bce51..106a4f07 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/Librus.kt
@@ -1,24 +1,24 @@
-package pl.szczodrzynski.edziennik.api.v2.librus
+package pl.szczodrzynski.edziennik.data.api.v2.librus
 
 import android.content.Context
 import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.api.AppError.*
-import pl.szczodrzynski.edziennik.api.interfaces.*
-import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_EMAIL
-import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_JST
-import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_SYNERGIA
-import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginLibrus
-import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginSynergia
-import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginJst
-import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrus
-import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginSynergia
-import pl.szczodrzynski.edziennik.api.v2.librus.login.SynergiaTokenExtractor
-import pl.szczodrzynski.edziennik.api.v2.models.DataStore
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.MessageFull
-import pl.szczodrzynski.edziennik.datamodels.Profile
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.api.AppError.*
+import pl.szczodrzynski.edziennik.data.api.interfaces.*
+import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_EMAIL
+import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_JST
+import pl.szczodrzynski.edziennik.data.api.v2.LOGIN_MODE_LIBRUS_SYNERGIA
+import pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin.FirstLoginLibrus
+import pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin.FirstLoginSynergia
+import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginJst
+import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginLibrus
+import pl.szczodrzynski.edziennik.data.api.v2.librus.login.LoginSynergia
+import pl.szczodrzynski.edziennik.data.api.v2.librus.login.SynergiaTokenExtractor
+import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo
 import pl.szczodrzynski.edziennik.utils.models.Endpoint
 import pl.szczodrzynski.edziennik.utils.Utils.d
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt
new file mode 100644
index 00000000..85f1167e
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/data/DataLibrus.kt
@@ -0,0 +1,10 @@
+package pl.szczodrzynski.edziennik.data.api.v2.librus.data
+
+import pl.szczodrzynski.edziennik.App
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+
+class DataLibrus(val app: App, val profile: Profile, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) {
+
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt
new file mode 100644
index 00000000..0e8e02b6
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginLibrus.kt
@@ -0,0 +1,12 @@
+package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin
+
+import pl.szczodrzynski.edziennik.App
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+
+class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
+    init {
+
+    }
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt
new file mode 100644
index 00000000..79587cd8
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/firstlogin/FirstLoginSynergia.kt
@@ -0,0 +1,12 @@
+package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin
+
+import pl.szczodrzynski.edziennik.App
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
+
+class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
+    init {
+
+    }
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt
similarity index 50%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt
index 78ed7672..3baac1b1 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginJst.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginJst.kt
@@ -1,13 +1,12 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.login
+package pl.szczodrzynski.edziennik.data.api.v2.librus.login
 
 import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.api.v2.ApiLoginResult
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
 
 class LoginJst(val app: App, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) {
     companion object {
         private const val TAG = "librus.LoginJst"
     }
 
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt
index 959fc74c..26769951 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginLibrus.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginLibrus.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.login
+package pl.szczodrzynski.edziennik.data.api.v2.librus.login
 
 import android.util.Pair
 import com.google.gson.JsonObject
@@ -9,11 +9,11 @@ import im.wangchao.mhttp.callback.JsonCallbackHandler
 import im.wangchao.mhttp.callback.TextCallbackHandler
 import pl.szczodrzynski.edziennik.App
 import pl.szczodrzynski.edziennik.R
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.api.AppError.*
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.api.v2.*
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.api.AppError.*
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.api.v2.*
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
 import pl.szczodrzynski.edziennik.getInt
 import pl.szczodrzynski.edziennik.getString
 import pl.szczodrzynski.edziennik.utils.Utils.c
@@ -180,4 +180,4 @@ class LoginLibrus(val app: App, val loginStore: LoginStore, val callback: Progre
                 .build()
                 .enqueue()
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt
similarity index 55%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt
index 026f3e50..ed48071f 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LoginSynergia.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/LoginSynergia.kt
@@ -1,12 +1,12 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.login
+package pl.szczodrzynski.edziennik.data.api.v2.librus.login
 
 import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
 
 class LoginSynergia(val app: App, val loginStore: LoginStore, val callback: ProgressCallback, val onSuccess: () -> Unit) {
     companion object {
         private const val TAG = "librus.LoginSynergia"
     }
 
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt
similarity index 91%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt
index c7f3f69e..983cd5b3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/librus/login/SynergiaTokenExtractor.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.v2.librus.login
+package pl.szczodrzynski.edziennik.data.api.v2.librus.login
 
 import com.google.gson.JsonNull
 import com.google.gson.JsonObject
@@ -6,13 +6,13 @@ import im.wangchao.mhttp.Request
 import im.wangchao.mhttp.Response
 import im.wangchao.mhttp.callback.JsonCallbackHandler
 import pl.szczodrzynski.edziennik.*
-import pl.szczodrzynski.edziennik.api.AppError
-import pl.szczodrzynski.edziennik.api.AppError.*
-import pl.szczodrzynski.edziennik.api.v2.LIBRUS_USER_AGENT
-import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
-import pl.szczodrzynski.edziennik.api.v2.LIBRUS_ACCOUNT_URL
-import pl.szczodrzynski.edziennik.datamodels.LoginStore
-import pl.szczodrzynski.edziennik.datamodels.Profile
+import pl.szczodrzynski.edziennik.data.api.AppError
+import pl.szczodrzynski.edziennik.data.api.AppError.*
+import pl.szczodrzynski.edziennik.data.api.v2.LIBRUS_USER_AGENT
+import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
+import pl.szczodrzynski.edziennik.data.api.v2.LIBRUS_ACCOUNT_URL
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
 import pl.szczodrzynski.edziennik.utils.Utils.d
 import java.net.HttpURLConnection.*
 
@@ -107,4 +107,4 @@ class SynergiaTokenExtractor(val app: App, val profile: Profile, val loginStore:
                 .enqueue()
         return true
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt
similarity index 79%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt
index a3d12e97..ac4c64eb 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataStore.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/DataStore.kt
@@ -1,9 +1,24 @@
-package pl.szczodrzynski.edziennik.api.v2.models
+package pl.szczodrzynski.edziennik.data.api.v2.models
 
 import android.util.LongSparseArray
 import androidx.core.util.forEach
 import androidx.core.util.isNotEmpty
-import pl.szczodrzynski.edziennik.datamodels.*
+import pl.szczodrzynski.edziennik.data.db.AppDb
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
 import pl.szczodrzynski.edziennik.utils.models.Date
 
 data class DataStore(private val appDb: AppDb, val profileId: Int) {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt
similarity index 64%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt
index b502fe85..e9ca9fce 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Feature.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.api.v2.models
+package pl.szczodrzynski.edziennik.data.api.v2.models
 
 
 data class Feature(val featureId: Int, val loginOptions: Map<Int, List<Int>>) {
@@ -7,4 +7,4 @@ data class Feature(val featureId: Int, val loginOptions: Map<Int, List<Int>>) {
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt
similarity index 73%
rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt
index bf40bd80..6a0e9ece 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Features.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/v2/models/Features.kt
@@ -1,6 +1,6 @@
-package pl.szczodrzynski.edziennik.api.v2.models
+package pl.szczodrzynski.edziennik.data.api.v2.models
 
-import pl.szczodrzynski.edziennik.api.v2.*
+import pl.szczodrzynski.edziennik.data.api.v2.*
 
 val Features = listOf(
         Feature(FEATURE_TIMETABLE, mapOf(
@@ -10,4 +10,4 @@ val Features = listOf(
                         LOGIN_MODE_LIBRUS_JST
                 )
         ))
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java
similarity index 89%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java
index 05d390fd..647a94aa 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AppDb.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/AppDb.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db;
 
 import androidx.sqlite.db.SupportSQLiteDatabase;
 import androidx.room.Database;
@@ -6,6 +6,52 @@ import androidx.room.Room;
 import androidx.room.RoomDatabase;
 import androidx.room.TypeConverters;
 import androidx.room.migration.Migration;
+
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementDao;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceDao;
+import pl.szczodrzynski.edziennik.data.db.converters.ConverterDate;
+import pl.szczodrzynski.edziennik.data.db.converters.ConverterJsonObject;
+import pl.szczodrzynski.edziennik.data.db.converters.ConverterListLong;
+import pl.szczodrzynski.edziennik.data.db.converters.ConverterListString;
+import pl.szczodrzynski.edziennik.data.db.converters.ConverterTime;
+import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
+import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLogDao;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventDao;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventTypeDao;
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage;
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessageDao;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategoryDao;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeDao;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChangeDao;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonDao;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStoreDao;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumberDao;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageDao;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientDao;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.MetadataDao;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeDao;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileDao;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.SubjectDao;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherDao;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.TeamDao;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 
 import android.content.Context;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java
similarity index 87%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java
index e77c3e2b..a130362b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterDate.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterDate.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.converters;
 
 import androidx.room.TypeConverter;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java
similarity index 89%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java
index e0b864f1..47d9b4d4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterJsonObject.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterJsonObject.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.converters;
 
 import androidx.room.TypeConverter;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java
similarity index 90%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java
index 583c2605..b5c2ceb1 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListLong.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListLong.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.converters;
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java
similarity index 90%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java
index 86abae6b..6f579104 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterListString.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterListString.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.converters;
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java
similarity index 88%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java
index c3a37864..63573772 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ConverterTime.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/converters/ConverterTime.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.converters;
 
 import androidx.room.TypeConverter;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java
index 516071f8..49ba227c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Announcement.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/Announcement.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.announcements;
 
 import androidx.annotation.Nullable;
 import androidx.room.ColumnInfo;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java
similarity index 92%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java
index 165ca00b..852e16f4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.announcements;
 
 import java.util.List;
 
@@ -11,7 +11,9 @@ import androidx.room.RawQuery;
 import androidx.sqlite.db.SimpleSQLiteQuery;
 import androidx.sqlite.db.SupportSQLiteQuery;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT;
 
 @Dao
 public abstract class AnnouncementDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java
similarity index 74%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java
index d7c5fd74..29d4e814 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AnnouncementFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/announcements/AnnouncementFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.announcements;
 
 public class AnnouncementFull extends Announcement {
     public String teacherFullName = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java
index ca8a5f58..b7ae5ca4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Attendance.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/Attendance.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.attendance;
 
 import androidx.annotation.NonNull;
 import androidx.room.ColumnInfo;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java
index 5dacf4f0..05c44822 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.attendance;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
@@ -12,7 +12,7 @@ import pl.szczodrzynski.edziennik.utils.models.Date;
 
 import java.util.List;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
 
 @Dao
 public abstract class AttendanceDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java
similarity index 81%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java
index 8f6d4a7b..8f9f3751 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/AttendanceFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/attendance/AttendanceFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.attendance;
 
 public class AttendanceFull extends Attendance {
     public String teacherFullName = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java
similarity index 82%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java
index 7d22db18..866a3882 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLog.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLog.java
@@ -1,7 +1,6 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.debuglog;
 
 import androidx.room.Entity;
-import androidx.room.Index;
 import androidx.room.PrimaryKey;
 
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java
similarity index 69%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java
index b1a0a5e6..14dd6a88 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/DebugLogDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/debuglog/DebugLogDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.debuglog;
 
 import androidx.room.Dao;
 import androidx.room.Insert;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java
similarity index 98%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java
index 24c916f0..e55e2a47 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Event.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/Event.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.events;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java
index 63c53ed1..2d1e7d37 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.events;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
@@ -17,9 +17,9 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
 
 @Dao
 public abstract class EventDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java
index 98887679..08b6966b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.events;
 
 public class EventFull extends Event {
     public String typeName = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java
similarity index 92%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java
index 10848dc6..e06f7656 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventType.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventType.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.events;
 
 import android.graphics.Color;
 
@@ -28,4 +28,4 @@ public class EventType {
     public EventType(int profileId, int id, String name, String color) {
         this(profileId, id, name, Color.parseColor(color));
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java
similarity index 93%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java
index 0b0b0dd6..7baf8189 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/EventTypeDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/events/EventTypeDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.events;
 
 import java.util.List;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java
similarity index 91%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java
index 9e8328ba..14cd5823 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessage.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessage.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.feedback;
 
 import androidx.room.Entity;
 import androidx.room.Ignore;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java
index f35f6743..24a45376 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.feedback;
 
 import java.util.List;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java
similarity index 62%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java
index bbea7461..17320fee 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/FeedbackMessageWithCount.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/feedback/FeedbackMessageWithCount.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.feedback;
 
 public class FeedbackMessageWithCount extends FeedbackMessage {
     public int messageCount = 0;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java
similarity index 98%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java
index 0ac89fd3..e6883003 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Grade.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/Grade.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.grades;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java
index 4ebd05c3..dfe76dfd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategory.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategory.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.grades;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java
index 3cfd8cf6..6cdf6bbe 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeCategoryDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeCategoryDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.grades;
 
 import java.util.List;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java
index b986e471..4487317b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.grades;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
@@ -14,7 +14,7 @@ import android.util.SparseIntArray;
 
 import java.util.List;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE;
 
 @Dao
 public abstract class GradeDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java
similarity index 84%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java
index ac1259bb..44c62b0a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/GradeFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/grades/GradeFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.grades;
 
 public class GradeFull extends Grade {
     //public String category = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java
index 0a1278e2..95402750 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Lesson.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/Lesson.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 import java.util.List;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java
similarity index 98%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java
index f85f34e4..e651494e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChange.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChange.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java
index 3e91bfde..d270eed3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
@@ -14,7 +14,7 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.db.LessonChangeCounter;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 
 @Dao
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java
similarity index 84%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java
index e44f9242..87cb2b95 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonChangeFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonChangeFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 public class LessonChangeFull extends LessonChange {
     /*public String changeTeacherFullName = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java
similarity index 99%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java
index e2de1e2f..220977ab 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java
index e60b26d3..fc607833 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LessonFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/lessons/LessonFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.lessons;
 
 import androidx.room.ColumnInfo;
 import android.content.Context;
@@ -7,9 +7,9 @@ import androidx.annotation.Nullable;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_ADDED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_ADDED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 
 public class LessonFull extends Lesson {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java
index ec13779c..5545c5f5 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStore.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStore.java
@@ -1,16 +1,17 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.login;
 
 import android.os.Bundle;
 
 import androidx.annotation.Nullable;
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
-import androidx.annotation.NonNull;
 import androidx.room.Ignore;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+
 @Entity(tableName = "loginStores",
         primaryKeys = {"loginStoreId"})
 public class LoginStore {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java
similarity index 90%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java
index eee57539..49fc3eea 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LoginStoreDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/login/LoginStoreDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.login;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
@@ -8,6 +8,8 @@ import androidx.room.Query;
 
 import java.util.List;
 
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+
 @Dao
 public abstract class LoginStoreDao {
     @Insert(onConflict = OnConflictStrategy.REPLACE)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java
similarity index 90%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java
index 6350a5f1..c2ccd4bb 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumber.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumber.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.luckynumber;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java
index 9fe62154..a775bedf 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/LuckyNumberDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/luckynumber/LuckyNumberDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.luckynumber;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java
index 6fbca751..02fdaa24 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Message.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/Message.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java
similarity index 89%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java
index 7decdfb5..8f5048b4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 import java.util.List;
 
@@ -11,10 +11,12 @@ import androidx.room.RawQuery;
 import androidx.sqlite.db.SimpleSQLiteQuery;
 import androidx.sqlite.db.SupportSQLiteQuery;
 
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE;
 
 @Dao
 public abstract class MessageDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java
similarity index 89%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java
index b6b5547b..30df0a81 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java
index 973cc3eb..29635e5a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipient.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipient.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java
similarity index 92%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java
index 72058604..4bd876e3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientDao.java
@@ -1,8 +1,7 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 import java.util.List;
 
-import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
 import androidx.room.Insert;
 import androidx.room.OnConflictStrategy;
@@ -11,8 +10,6 @@ import androidx.room.RawQuery;
 import androidx.sqlite.db.SimpleSQLiteQuery;
 import androidx.sqlite.db.SupportSQLiteQuery;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE;
-
 @Dao
 public abstract class MessageRecipientDao {
     @Query("DELETE FROM messageRecipients WHERE profileId = :profileId")
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java
similarity index 88%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java
index d3aed76b..69dbd54c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MessageRecipientFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/messages/MessageRecipientFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.messages;
 
 public class MessageRecipientFull extends MessageRecipient {
     public String fullName = null;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java
index 2ac2a6e0..3e5be9f0 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Metadata.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/Metadata.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.metadata;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java
similarity index 88%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java
index 40a44d25..95733185 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/MetadataDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/metadata/MetadataDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.metadata;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
@@ -9,16 +9,24 @@ import androidx.room.Transaction;
 
 import java.util.List;
 
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
 import pl.szczodrzynski.edziennik.utils.models.db.UnreadCounter;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE;
 
 @Dao
 public abstract class MetadataDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java
index 230dd596..f80ac904 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Notice.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/Notice.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.notices;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java
similarity index 92%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java
index 3fcda14b..0d6a28ec 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.notices;
 
 import androidx.lifecycle.LiveData;
 import androidx.sqlite.db.SimpleSQLiteQuery;
@@ -11,7 +11,9 @@ import androidx.room.RawQuery;
 
 import java.util.List;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE;
 
 @Dao
 public abstract class NoticeDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java
similarity index 75%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java
index 5746118b..4fbf3119 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/NoticeFull.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/notices/NoticeFull.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.notices;
 
 public class NoticeFull extends Notice {
     public String teacherFullName = "";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt
similarity index 99%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt
index 5cf1b446..d53118c6 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Profile.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/Profile.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels
+package pl.szczodrzynski.edziennik.data.db.modules.profiles
 
 import androidx.room.ColumnInfo
 import androidx.room.Entity
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java
index a22aab66..2cb9fe68 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.profiles;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
@@ -8,7 +8,7 @@ import androidx.room.Query;
 
 import java.util.List;
 
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 
 @Dao
 public interface ProfileDao {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt
index 037c29cc..f692bcf5 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/ProfileFull.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/profiles/ProfileFull.kt
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels
+package pl.szczodrzynski.edziennik.data.db.modules.profiles
 
 import android.content.Context
 import androidx.room.ColumnInfo
@@ -11,7 +11,8 @@ import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
 import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
 import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_NOTICES
 import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
-import pl.szczodrzynski.edziennik.datamodels.LoginStore.*
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.*
 import java.util.*
 
 class ProfileFull : Profile {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java
similarity index 96%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java
index e927ae15..f5192f20 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Subject.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/Subject.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.subjects;
 
 import java.util.List;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java
similarity index 94%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java
index a1f63e1f..1698efce 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/SubjectDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/subjects/SubjectDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.subjects;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java
similarity index 98%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java
index 2679b5a5..ba7e84c6 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Teacher.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/Teacher.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.teachers;
 
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -6,7 +6,6 @@ import android.graphics.Bitmap;
 import java.util.List;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
 import androidx.room.Ignore;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java
index 649fea8f..cde76ccd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeacherDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teachers/TeacherDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.teachers;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java
similarity index 95%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java
index 51073444..eb5b4af7 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/Team.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/Team.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.teams;
 
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java
similarity index 97%
rename from app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java
rename to app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java
index 409b4b51..2abb9af5 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/datamodels/TeamDao.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/db/modules/teams/TeamDao.java
@@ -1,4 +1,4 @@
-package pl.szczodrzynski.edziennik.datamodels;
+package pl.szczodrzynski.edziennik.data.db.modules.teams;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java b/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java
index 373fa30b..aec2b69e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/network/ServerRequest.java
@@ -16,10 +16,10 @@ import im.wangchao.mhttp.ThreadMode;
 import im.wangchao.mhttp.callback.JsonCallbackHandler;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 
 public class ServerRequest {
     private App app;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java b/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java
index a9984194..d8841ebf 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/sync/MyFirebaseMessagingService.java
@@ -17,19 +17,19 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.ui.modules.base.DebugFragment;
 import pl.szczodrzynski.edziennik.utils.models.Notification;
 import pl.szczodrzynski.edziennik.network.ServerRequest;
 
 import static pl.szczodrzynski.edziennik.App.APP_URL;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 import static pl.szczodrzynski.edziennik.utils.Utils.strToInt;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java b/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java
index 5f4263ad..e3eddf3d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/sync/SyncService.java
@@ -14,11 +14,11 @@ import java.util.Collection;
 import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 
 import static pl.szczodrzynski.edziennik.Notifier.ID_GET_DATA;
 import static pl.szczodrzynski.edziennik.Notifier.ID_GET_DATA_ERROR;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java
index 3df99e78..ccf28951 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListAdapter.java
@@ -18,12 +18,12 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java
index 57ae66fc..6cd3fbbd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventListDialog.java
@@ -18,8 +18,8 @@ import androidx.recyclerview.widget.RecyclerView;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java
index bfdb5be7..4a24d2e0 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.java
@@ -36,16 +36,16 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.models.Week;
@@ -54,11 +54,11 @@ import pl.szczodrzynski.edziennik.utils.TextInputDropDown;
 import pl.szczodrzynski.edziennik.utils.Themes;
 
 import static pl.szczodrzynski.edziennik.App.APP_URL;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_UNDEFINED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_UNDEFINED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.ns;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java
index 43ad22d3..cabc3e63 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/grade/GradeDetailsDialog.java
@@ -19,11 +19,11 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.ui.modules.grades.GradesListAdapter;
 import pl.szczodrzynski.edziennik.databinding.DialogGradeDetailsBinding;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
 import pl.szczodrzynski.edziennik.utils.Colors;
 
-import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT;
 
 public class GradeDetailsDialog {
     private App app;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java
index 3d58f199..155bad51 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/lessonchange/LessonChangeDialog.java
@@ -16,7 +16,7 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableAdapter;
 import pl.szczodrzynski.edziennik.databinding.DialogLessonChangeListBinding;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaCalendarFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaCalendarFragment.java
index 4048694b..0ac063fc 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaCalendarFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaCalendarFragment.java
@@ -28,8 +28,8 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaCalendarBinding;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.Themes;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaDefaultFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaDefaultFragment.java
index 3e9ffcba..c3dbd0c6 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaDefaultFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/agenda/RegisterAgendaDefaultFragment.java
@@ -38,8 +38,8 @@ import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaCalendarBinding;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAgendaDefaultBinding;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog;
 import pl.szczodrzynski.edziennik.ui.dialogs.lessonchange.LessonChangeDialog;
@@ -52,9 +52,9 @@ import pl.szczodrzynski.edziennik.utils.Utils;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.AGENDA_CALENDAR;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.AGENDA_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.AGENDA_CALENDAR;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.AGENDA_DEFAULT;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.intToStr;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java
index 3b76fcb7..1b0d4fda 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsAdapter.java
@@ -15,7 +15,7 @@ import androidx.databinding.DataBindingUtil;
 import androidx.recyclerview.widget.RecyclerView;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.RowAnnouncementsItemBinding;
-import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull;
+import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull;
 
 public class AnnouncementsAdapter extends RecyclerView.Adapter<AnnouncementsAdapter.ViewHolder> {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/RegisterAnnouncementsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/RegisterAnnouncementsFragment.java
index 5b8d36a7..8e70a958 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/RegisterAnnouncementsFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/RegisterAnnouncementsFragment.java
@@ -24,7 +24,7 @@ import pl.szczodrzynski.edziennik.databinding.FragmentRegisterSchoolNoticesBindi
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT;
 
 public class RegisterAnnouncementsFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendancesAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendancesAdapter.java
index 35d3d1de..a8b71528 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendancesAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/AttendancesAdapter.java
@@ -15,14 +15,14 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.AttendanceFull;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull;
 
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
 
 public class AttendancesAdapter extends RecyclerView.Adapter<AttendancesAdapter.ViewHolder> {
     private Context context;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/RegisterAttendancesFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/RegisterAttendancesFragment.java
index 638c934c..e5f8b43a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/RegisterAttendancesFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/attendance/RegisterAttendancesFragment.java
@@ -40,22 +40,22 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterAttendancesBinding;
-import pl.szczodrzynski.edziennik.datamodels.AttendanceFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Week;
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
-import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
 
 public class RegisterAttendancesFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java
index 2371e286..f159282a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.java
@@ -41,7 +41,7 @@ import pl.szczodrzynski.edziennik.network.ServerRequest;
 import pl.szczodrzynski.edziennik.utils.Themes;
 
 import static pl.szczodrzynski.edziennik.App.APP_URL;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 
 public final class CrashActivity extends AppCompatActivity {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackActivity.java
index b09d8211..a1625acd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackActivity.java
@@ -6,8 +6,8 @@ import androidx.databinding.DataBindingUtil;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.ActivityFeedbackBinding;
-import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage;
-import pl.szczodrzynski.edziennik.datamodels.FeedbackMessageWithCount;
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage;
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessageWithCount;
 import pl.szczodrzynski.edziennik.network.ServerRequest;
 import pl.szczodrzynski.edziennik.utils.Anim;
 import pl.szczodrzynski.edziennik.utils.Themes;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackFragment.kt
index e0689141..4351a6f7 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/FeedbackFragment.kt
@@ -25,7 +25,7 @@ import pl.szczodrzynski.edziennik.App.APP_URL
 import pl.szczodrzynski.edziennik.R
 import pl.szczodrzynski.edziennik.MainActivity
 import pl.szczodrzynski.edziennik.databinding.FragmentFeedbackBinding
-import pl.szczodrzynski.edziennik.datamodels.FeedbackMessage
+import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage
 import pl.szczodrzynski.edziennik.network.ServerRequest
 import pl.szczodrzynski.edziennik.utils.Anim
 import pl.szczodrzynski.edziennik.utils.Themes
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java
index ec902e12..0c1c1326 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesListAdapter.java
@@ -18,13 +18,13 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.grade.GradeDetailsDialog;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.Colors;
 
-import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT;
 
 public class GradesListAdapter extends RecyclerView.Adapter<GradesListAdapter.ViewHolder> {
     private Context mContext;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java
index 30dd7562..25705cb3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/GradesSubjectAdapter.java
@@ -30,10 +30,9 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.datamodels.AppDb;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.ui.modules.grades.GradesListAdapter;
+import pl.szczodrzynski.edziennik.data.db.AppDb;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
 import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel;
 import pl.szczodrzynski.edziennik.utils.Anim;
 import pl.szczodrzynski.edziennik.utils.Colors;
@@ -42,10 +41,10 @@ import pl.szczodrzynski.edziennik.utils.Utils;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static pl.szczodrzynski.edziennik.MainActivity.TARGET_GRADES_EDITOR;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.COLOR_MODE_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.COLOR_MODE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM;
 
 public class GradesSubjectAdapter extends ArrayAdapter<ItemGradesSubjectModel> implements View.OnClickListener {
     private static final String TAG = "GradesSubjectAdapter";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/RegisterGradesFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/RegisterGradesFragment.java
index f74f8b22..dddd897b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/RegisterGradesFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/RegisterGradesFragment.java
@@ -24,20 +24,20 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterGradesBinding;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
 import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel;
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_AVG;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_ALL_GRADES;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_AVG;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_ALL_GRADES;
 import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_DATE_ASC;
 import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_DATE_DESC;
 import static pl.szczodrzynski.edziennik.utils.models.AppConfig.ORDER_BY_SUBJECT_ASC;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt
index 2d362f62..7d8641ea 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/grades/editor/GradesEditorFragment.kt
@@ -14,11 +14,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import com.afollestad.materialdialogs.MaterialDialog
 import pl.szczodrzynski.edziennik.*
 import pl.szczodrzynski.edziennik.databinding.FragmentGradesEditorBinding
-import pl.szczodrzynski.edziennik.datamodels.Grade
-import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_AVG_2_AVG
-import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_AVG_2_SEM
-import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_1_SEM_2_AVG
-import pl.szczodrzynski.edziennik.datamodels.Profile.Companion.YEAR_ALL_GRADES
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_AVG_2_AVG
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_AVG_2_SEM
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_1_SEM_2_AVG
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_ALL_GRADES
 import pl.szczodrzynski.edziennik.utils.Colors
 import pl.szczodrzynski.edziennik.utils.Themes
 import java.text.DecimalFormat
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java
index 5c408573..14a6b71c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/CounterActivity.java
@@ -15,8 +15,7 @@ import java.util.TimerTask;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.ActivityCounterBinding;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
-import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java
index 5498305f..24df37d0 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeFragment.java
@@ -44,10 +44,10 @@ import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.CardLuckyNumberBinding;
 import pl.szczodrzynski.edziennik.databinding.CardUpdateBinding;
 import pl.szczodrzynski.edziennik.databinding.FragmentHomeBinding;
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeActivity;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.ItemGradesSubjectModel;
@@ -60,13 +60,13 @@ import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem;
 
 import static pl.szczodrzynski.edziennik.App.UPDATES_ON_PLAY_STORE;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
-import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
+import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
 
 public class HomeFragment extends Fragment {
     private static final String TAG = "HomeFragment";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java
index ab75de3d..377efeb5 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/home/HomeTimetableCard.java
@@ -24,14 +24,14 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.CardTimetableBinding;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.models.Week;
 
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
 import static pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment.updateInterval;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java
index 547b37f6..38644e37 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkAdapter.java
@@ -17,7 +17,7 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog;
 import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
 import pl.szczodrzynski.edziennik.utils.models.Date;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkFragment.kt
index 171f4bf9..9ccd97ce 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkFragment.kt
@@ -13,7 +13,7 @@ import pl.szczodrzynski.edziennik.App
 import pl.szczodrzynski.edziennik.MainActivity
 import pl.szczodrzynski.edziennik.R
 import pl.szczodrzynski.edziennik.databinding.FragmentHomeworkBinding
-import pl.szczodrzynski.edziennik.datamodels.Metadata
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog
 import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment
 import pl.szczodrzynski.edziennik.utils.Themes
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt
index e0ac9d97..22da31a5 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/homework/HomeworkListFragment.kt
@@ -11,7 +11,7 @@ import pl.szczodrzynski.edziennik.App
 import pl.szczodrzynski.edziennik.MainActivity
 import pl.szczodrzynski.edziennik.R
 import pl.szczodrzynski.edziennik.databinding.HomeworkListBinding
-import pl.szczodrzynski.edziennik.datamodels.Event
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event
 import pl.szczodrzynski.edziennik.getInt
 import pl.szczodrzynski.edziennik.utils.models.Date
 import pl.szczodrzynski.edziennik.utils.Themes
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java
index b95f5b3a..5d5b210d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginActivity.java
@@ -14,7 +14,7 @@ import androidx.navigation.NavOptions;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 import pl.szczodrzynski.edziennik.databinding.ActivityLoginBinding;
 
 public class LoginActivity extends AppCompatActivity {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java
index 484710ea..e1eb8091 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginIuczniowieFragment.java
@@ -18,12 +18,12 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginIuczniowieBinding;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
 
 public class LoginIuczniowieFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java
index cf08423b..fb0612fd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginLibrusFragment.java
@@ -18,12 +18,12 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginLibrusBinding;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
 
 public class LoginLibrusFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java
index e5679f59..cd881665 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationFragment.java
@@ -18,20 +18,20 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginMigrationBinding;
-import pl.szczodrzynski.edziennik.datamodels.Attendance;
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
-import pl.szczodrzynski.edziennik.datamodels.Lesson;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
-import pl.szczodrzynski.edziennik.datamodels.Metadata;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
-import pl.szczodrzynski.edziennik.datamodels.Team;
+import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 
@@ -52,36 +52,36 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_CLASS_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_ESSAY;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXCURSION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_INFORMATION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PROJECT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PT_MEETING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_READING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_CLASS_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_ESSAY;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXCURSION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_INFORMATION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PROJECT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_READING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_DEMO;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_UNSPECIFIED;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_CLASS_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_ESSAY;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXCURSION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_INFORMATION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PROJECT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PT_MEETING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_READING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_CLASS_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_ESSAY;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXCURSION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_INFORMATION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PROJECT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_READING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_DEMO;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_UNSPECIFIED;
 
 public class LoginMigrationFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java
index fed6e16d..8adeebf2 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMigrationSyncFragment.java
@@ -20,12 +20,12 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginMigrationSyncBinding;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.sync.SyncJob;
 import pl.szczodrzynski.edziennik.sync.SyncService;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java
index f5797ac7..0c4c5f33 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginMobidziennikFragment.java
@@ -16,14 +16,14 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginMobidziennikBinding;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_ARCHIVED;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SERVER_ADDRESS;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OLD_PASSWORD;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_ARCHIVED;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SERVER_ADDRESS;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OLD_PASSWORD;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
 
 public class LoginMobidziennikFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java
index 88fb5d4c..9ee42950 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProfileObject.java
@@ -5,8 +5,8 @@ import java.util.ArrayList;
 import java.util.List;
 
 import androidx.annotation.NonNull;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
 
 public class LoginProfileObject {
     LoginStore loginStore = null;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java
index 63a9aea9..93f00fa3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginProgressFragment.java
@@ -20,15 +20,15 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.Edziennik;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.Edziennik;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginProgressBinding;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
 
 public class LoginProgressFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java
index d1e5a57f..43efd3fe 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSummaryFragment.java
@@ -26,7 +26,7 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginSummaryBinding;
 import pl.szczodrzynski.edziennik.databinding.RowLoginProfileListItemBinding;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
 
 public class LoginSummaryFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java
index 9c5ab3f9..3b8c436e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginSyncFragment.java
@@ -22,40 +22,40 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginSyncBinding;
-import pl.szczodrzynski.edziennik.datamodels.EventType;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.sync.SyncJob;
 import pl.szczodrzynski.edziennik.sync.SyncService;
 
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_CLASS_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_EXCURSION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_INFORMATION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PROJECT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_PT_MEETING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_READING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.COLOR_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_CLASS_EVENT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_ESSAY;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXCURSION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_INFORMATION;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PROJECT;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_READING;
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_UNSPECIFIED;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_CLASS_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_EXCURSION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_INFORMATION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PROJECT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_PT_MEETING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_READING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.COLOR_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_CLASS_EVENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_ESSAY;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXCURSION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_INFORMATION;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PROJECT;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_READING;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_UNSPECIFIED;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 
 public class LoginSyncFragment extends Fragment {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java
index 2c6911c4..7b65eead 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginVulcanFragment.java
@@ -37,15 +37,15 @@ import javax.crypto.ShortBufferException;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.ui.modules.webpush.QrScannerActivity;
-import pl.szczodrzynski.edziennik.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.AppError;
 import pl.szczodrzynski.edziennik.databinding.FragmentLoginVulcanBinding;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_EXPIRED_TOKEN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_PIN;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SYMBOL;
-import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_TOKEN;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_EXPIRED_TOKEN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_PIN;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SYMBOL;
+import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_TOKEN;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
 
 public class LoginVulcanFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java
index 7a1574bf..35b75308 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesAdapter.java
@@ -17,11 +17,11 @@ import androidx.recyclerview.widget.RecyclerView;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.databinding.MessagesItemBinding;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DRAFT;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DRAFT;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
 
 public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.ViewHolder> {
     private App app;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java
index c496039c..04a0b025 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeActivity.java
@@ -35,14 +35,14 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.api.Edziennik;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.Edziennik;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.MessagesComposeActivityBinding;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
 import pl.szczodrzynski.edziennik.utils.Colors;
 import pl.szczodrzynski.edziennik.utils.Themes;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java
index 525fa9e6..748e2c32 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesComposeSuggestionAdapter.java
@@ -19,7 +19,7 @@ import java.util.Comparator;
 import java.util.List;
 
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.Teacher;
+import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
 
 public class MessagesComposeSuggestionAdapter extends ArrayAdapter<Teacher> {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java
index 654e424d..645b66d3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesDetailsFragment.java
@@ -51,15 +51,15 @@ import im.wangchao.mhttp.callback.FileCallbackHandler;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.api.Edziennik;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.Edziennik;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.MessagesDetailsBinding;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.models.Time;
 import pl.szczodrzynski.edziennik.utils.Anim;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt
index 3b130c0b..db7fae3b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesFragment.kt
@@ -12,7 +12,7 @@ import pl.szczodrzynski.edziennik.App
 import pl.szczodrzynski.edziennik.R
 import pl.szczodrzynski.edziennik.MainActivity
 import pl.szczodrzynski.edziennik.databinding.FragmentMessagesBinding
-import pl.szczodrzynski.edziennik.datamodels.Message
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
 import pl.szczodrzynski.edziennik.utils.Themes
 import java.util.*
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java
index d4216103..17e77c41 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesListFragment.java
@@ -29,20 +29,20 @@ import java.util.List;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.api.AppError;
-import pl.szczodrzynski.edziennik.api.Edziennik;
-import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
+import pl.szczodrzynski.edziennik.data.api.AppError;
+import pl.szczodrzynski.edziennik.data.api.Edziennik;
+import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
 import pl.szczodrzynski.edziennik.databinding.MessagesListBinding;
-import pl.szczodrzynski.edziennik.datamodels.LoginStore;
-import pl.szczodrzynski.edziennik.datamodels.Message;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
 import pl.szczodrzynski.edziennik.utils.Themes;
 
 import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 
 public class MessagesListFragment extends Fragment {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java
index 8c3d1c1e..91ed9a56 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessagesUtils.java
@@ -8,15 +8,15 @@ import android.graphics.RectF;
 import androidx.core.graphics.ColorUtils;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.MessageFull;
-import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
+import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
 import pl.szczodrzynski.edziennik.utils.Colors;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DRAFT;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
-import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DRAFT;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
+import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
 
 public class MessagesUtils {
     public static class MessageInfo {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/NoticesAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/NoticesAdapter.kt
index 2d4daaa3..41efc20f 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/NoticesAdapter.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/NoticesAdapter.kt
@@ -18,11 +18,11 @@ import com.mikepenz.iconics.utils.colorRes
 import com.mikepenz.iconics.utils.sizeDp
 import pl.szczodrzynski.edziennik.App
 import pl.szczodrzynski.edziennik.R
-import pl.szczodrzynski.edziennik.datamodels.Notice
-import pl.szczodrzynski.edziennik.datamodels.NoticeFull
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
+import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull
 import pl.szczodrzynski.edziennik.utils.models.Date
 
-import pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK
+import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK
 import pl.szczodrzynski.edziennik.utils.Utils.bs
 
 class NoticesAdapter//getting the context and product list with constructor
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/RegisterNoticesFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/RegisterNoticesFragment.java
index 02dbbd2f..72a97e67 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/RegisterNoticesFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/notices/RegisterNoticesFragment.java
@@ -26,12 +26,12 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterNoticesBinding;
-import pl.szczodrzynski.edziennik.datamodels.Notice;
-import pl.szczodrzynski.edziennik.datamodels.NoticeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
+import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull;
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_NOTICE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_NOTICE;
 
 public class RegisterNoticesFragment extends Fragment {
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java
index 9883f7ac..41105860 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/settings/SettingsNewFragment.java
@@ -59,13 +59,13 @@ import pl.szczodrzynski.edziennik.utils.Utils;
 
 import static android.app.Activity.RESULT_OK;
 import static pl.szczodrzynski.edziennik.App.APP_URL;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_AVG;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_ALL_GRADES;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_DISABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_AVG;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_AVG_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_AVG;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_1_SEM_2_SEM;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.YEAR_ALL_GRADES;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 import static pl.szczodrzynski.edziennik.utils.Utils.getRealPathFromURI;
 import static pl.szczodrzynski.edziennik.utils.Utils.getResizedBitmap;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/RegisterTimetableFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/RegisterTimetableFragment.java
index 01efce47..524b9b6d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/RegisterTimetableFragment.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/RegisterTimetableFragment.java
@@ -50,7 +50,7 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.databinding.FragmentRegisterTimetableBinding;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog;
 import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
 import pl.szczodrzynski.edziennik.utils.models.Date;
@@ -62,9 +62,9 @@ import pl.szczodrzynski.edziennik.utils.Utils;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem;
 import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem;
 
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
-import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
-import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
+import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
 import static pl.szczodrzynski.edziennik.utils.Utils.bs;
 import static pl.szczodrzynski.edziennik.utils.Utils.d;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java
index bb29cd46..def0b58f 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/TimetableAdapter.java
@@ -24,16 +24,16 @@ import java.util.List;
 
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
-import pl.szczodrzynski.edziennik.datamodels.EventFull;
-import pl.szczodrzynski.edziennik.datamodels.LessonChange;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 import pl.szczodrzynski.edziennik.ui.dialogs.event.EventListDialog;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.utils.SpannableHtmlTagHandler;
 import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
-import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
+import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
 
 public class TimetableAdapter extends RecyclerView.Adapter<TimetableAdapter.ViewHolder> {
     private static final String TAG = "TimetableAdapter";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java
index 006551c2..dcb652dd 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/webpush/WebPushConfigActivity.java
@@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.utils.Themes;
 import pl.szczodrzynski.edziennik.utils.Utils;
 
 import static pl.szczodrzynski.edziennik.App.APP_URL;
-import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
+import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
 
 public class WebPushConfigActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
     private static final String TAG = "WebPushConfigActivity";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java
index f01da724..ce9cdbcf 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/Colors.java
@@ -10,7 +10,7 @@ import android.graphics.drawable.StateListDrawable;
 import android.graphics.drawable.shapes.RoundRectShape;
 import android.os.Build;
 import androidx.core.graphics.ColorUtils;
-import pl.szczodrzynski.edziennik.datamodels.Grade;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
 
 import java.security.MessageDigest;
 import java.util.Arrays;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java
index 473e8a9e..2aefccf0 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/AppConfig.java
@@ -12,10 +12,10 @@ import pl.szczodrzynski.edziennik.BuildConfig;
 import pl.szczodrzynski.edziennik.MainActivity;
 import pl.szczodrzynski.edziennik.widgets.WidgetConfig;
 
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
-import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
+import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
 
 public class AppConfig {
     private static final String TAG = "AppConfig";
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java
index abcf6f06..2d2bc614 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemGradesSubjectModel.java
@@ -2,9 +2,9 @@ package pl.szczodrzynski.edziennik.utils.models;
 
 import java.util.List;
 
-import pl.szczodrzynski.edziennik.datamodels.GradeFull;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
-import pl.szczodrzynski.edziennik.datamodels.Subject;
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
 
 public class ItemGradesSubjectModel {
     public Profile profile;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java
index 24197cbf..e9527793 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/utils/models/ItemTimetableModel.java
@@ -2,8 +2,8 @@ package pl.szczodrzynski.edziennik.utils.models;
 
 import java.util.List;
 
-import pl.szczodrzynski.edziennik.datamodels.Event;
-import pl.szczodrzynski.edziennik.datamodels.LessonFull;
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
 
 public class ItemTimetableModel {
     public LessonFull lesson;
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java
index 5e466f19..4004109c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/WidgetConfigActivity.java
@@ -22,7 +22,7 @@ import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.WidgetTimetable;
 import pl.szczodrzynski.edziennik.databinding.DialogWidgetConfigBinding;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
 import pl.szczodrzynski.edziennik.widgets.luckynumber.WidgetLuckyNumber;
 import pl.szczodrzynski.edziennik.widgets.notifications.WidgetNotifications;
 
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java
index 02ea44a7..6ce5640c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/widgets/luckynumber/WidgetLuckyNumber.java
@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
 import pl.szczodrzynski.edziennik.App;
 import pl.szczodrzynski.edziennik.R;
 import pl.szczodrzynski.edziennik.MainActivity;
-import pl.szczodrzynski.edziennik.datamodels.Profile;
+import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
 import pl.szczodrzynski.edziennik.utils.models.Date;
 import pl.szczodrzynski.edziennik.sync.SyncJob;
 import pl.szczodrzynski.edziennik.widgets.WidgetConfig;
diff --git a/app/src/main/res/layout/dialog_grade_details.xml b/app/src/main/res/layout/dialog_grade_details.xml
index 691ca1ff..52d8a8d2 100644
--- a/app/src/main/res/layout/dialog_grade_details.xml
+++ b/app/src/main/res/layout/dialog_grade_details.xml
@@ -9,7 +9,7 @@
         <import type="pl.szczodrzynski.edziennik.utils.models.Time"/>
         <variable
             name="grade"
-            type="pl.szczodrzynski.edziennik.datamodels.GradeFull" />
+            type="pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull" />
         <variable
             name="historyVisible"
             type="boolean" />