diff --git a/fastlane/metadata/android/en-US/changelogs/66.txt b/fastlane/metadata/android/en-US/changelogs/66.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ac2c90e221caf3cf01ebba168fb16a8f31c0253a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/66.txt
@@ -0,0 +1 @@
+Normalize Activity application architecture.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/66.txt b/fastlane/metadata/android/fr-FR/changelogs/66.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d6843d89ba84ea4147528bc3d62d9ecf1a4a762
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/66.txt
@@ -0,0 +1 @@
+Harmonisation des applications en Activity.
diff --git a/lib/config/activity_page.dart b/lib/common/config/activity_page.dart
similarity index 76%
rename from lib/config/activity_page.dart
rename to lib/common/config/activity_page.dart
index b58d29592d6890feae59b01b48e977be20bdd758..79141ebc05312d6e2087f208daaf5bc66954dbe8 100644
--- a/lib/config/activity_page.dart
+++ b/lib/common/config/activity_page.dart
@@ -1,42 +1,44 @@
 import 'package:flutter/material.dart';
 import 'package:ionicons/ionicons.dart';
 
-import 'package:scrobbles/ui/pages/discoveries.dart';
-import 'package:scrobbles/ui/pages/home.dart';
-import 'package:scrobbles/ui/pages/statistics.dart';
+import 'package:scrobbles/common/ui/pages/discoveries.dart';
+import 'package:scrobbles/common/ui/pages/home.dart';
+import 'package:scrobbles/common/ui/pages/statistics.dart';
 
 class ActivityPageItem {
+  final String code;
   final Icon icon;
   final Widget page;
-  final String code;
 
   const ActivityPageItem({
+    required this.code,
     required this.icon,
     required this.page,
-    required this.code,
   });
 }
 
 class ActivityPage {
+  static const bool displayBottomNavBar = false;
+
   static const indexHome = 0;
   static const pageHome = ActivityPageItem(
+    code: 'page_home',
     icon: Icon(Ionicons.home_outline),
     page: PageHome(),
-    code: 'page_home',
   );
 
   static const indexDiscoveries = 1;
   static const pageDiscoveries = ActivityPageItem(
+    code: 'page_discoveries',
     icon: Icon(Ionicons.star_outline),
     page: PageDiscoveries(),
-    code: 'page_discoveries',
   );
 
   static const indexStatistics = 2;
   static const pageStatistics = ActivityPageItem(
+    code: 'page_statistics',
     icon: Icon(Ionicons.bar_chart_outline),
     page: PageStatistics(),
-    code: 'page_statistics',
   );
 
   static Map<int, ActivityPageItem> items = {
@@ -45,17 +47,13 @@ class ActivityPage {
     indexStatistics: pageStatistics,
   };
 
+  static int defaultPageIndex = indexHome;
+
   static bool isIndexAllowed(int pageIndex) {
     return items.keys.contains(pageIndex);
   }
 
-  static ActivityPageItem getPageItem(int pageIndex) {
-    return items[pageIndex] ?? pageHome;
-  }
-
-  static Widget getPageWidget(int pageIndex) {
+  static Widget getWidget(int pageIndex) {
     return items[pageIndex]?.page ?? pageHome.page;
   }
-
-  static int itemsCount = ActivityPage.items.length;
 }
diff --git a/lib/config/screen.dart b/lib/common/config/screen.dart
similarity index 67%
rename from lib/config/screen.dart
rename to lib/common/config/screen.dart
index da777c0b3b9a371acb1b59986dbce42b72d9c192..f73facee0bc8adf5dae59d23a016b9cc5bb98b50 100644
--- a/lib/config/screen.dart
+++ b/lib/common/config/screen.dart
@@ -1,42 +1,42 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/ui/screens/about.dart';
-import 'package:scrobbles/ui/screens/activity.dart';
-import 'package:scrobbles/ui/screens/settings.dart';
+import 'package:scrobbles/common/ui/screens/about.dart';
+import 'package:scrobbles/common/ui/screens/activity.dart';
+import 'package:scrobbles/common/ui/screens/settings.dart';
 
 class ScreenItem {
+  final String code;
   final Icon icon;
   final Widget screen;
-  final bool displayBottomNavBar;
 
   const ScreenItem({
+    required this.code,
     required this.icon,
     required this.screen,
-    required this.displayBottomNavBar,
   });
 }
 
 class Screen {
   static const indexActivity = 0;
   static const screenActivity = ScreenItem(
+    code: 'screen_activity',
     icon: Icon(UniconsLine.home),
     screen: ScreenActivity(),
-    displayBottomNavBar: true,
   );
 
   static const indexSettings = 1;
   static const screenSettings = ScreenItem(
+    code: 'screen_settings',
     icon: Icon(UniconsLine.setting),
     screen: ScreenSettings(),
-    displayBottomNavBar: false,
   );
 
   static const indexAbout = 2;
   static const screenAbout = ScreenItem(
+    code: 'screen_about',
     icon: Icon(UniconsLine.info_circle),
     screen: ScreenAbout(),
-    displayBottomNavBar: false,
   );
 
   static Map<int, ScreenItem> items = {
@@ -52,10 +52,4 @@ class Screen {
   static Widget getWidget(int screenIndex) {
     return items[screenIndex]?.screen ?? screenActivity.screen;
   }
-
-  static bool displayBottomNavBar(int screenIndex) {
-    return items[screenIndex]?.displayBottomNavBar ?? screenActivity.displayBottomNavBar;
-  }
-
-  static int itemsCount = Screen.items.length;
 }
diff --git a/lib/cubit/nav_cubit_pages.dart b/lib/common/cubit/nav/nav_cubit_pages.dart
similarity index 73%
rename from lib/cubit/nav_cubit_pages.dart
rename to lib/common/cubit/nav/nav_cubit_pages.dart
index 10d729d75d43608c790aa608706bfb86e56d09a7..9ad7c65d866afaba35f0bfe6ad0521488d58e90c 100644
--- a/lib/cubit/nav_cubit_pages.dart
+++ b/lib/common/cubit/nav/nav_cubit_pages.dart
@@ -1,6 +1,6 @@
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/config/activity_page.dart';
+import 'package:scrobbles/common/config/activity_page.dart';
 
 class NavCubitPage extends HydratedCubit<int> {
   NavCubitPage() : super(0);
@@ -13,8 +13,8 @@ class NavCubitPage extends HydratedCubit<int> {
     }
   }
 
-  void goToHomePage() {
-    emit(ActivityPage.indexHome);
+  void goToPageHome() {
+    updateIndex(ActivityPage.indexHome);
   }
 
   @override
@@ -24,6 +24,6 @@ class NavCubitPage extends HydratedCubit<int> {
 
   @override
   Map<String, dynamic>? toJson(int state) {
-    return <String, int>{'pageIndex': state};
+    return <String, int>{'index': state};
   }
 }
diff --git a/lib/cubit/nav_cubit_screens.dart b/lib/common/cubit/nav/nav_cubit_screens.dart
similarity index 71%
rename from lib/cubit/nav_cubit_screens.dart
rename to lib/common/cubit/nav/nav_cubit_screens.dart
index 4376701ab49c280e30ae387c2980aa4414792080..77f3b613f72ab3cf724835b96f755abd8d411538 100644
--- a/lib/cubit/nav_cubit_screens.dart
+++ b/lib/common/cubit/nav/nav_cubit_screens.dart
@@ -1,6 +1,6 @@
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/config/screen.dart';
+import 'package:scrobbles/common/config/screen.dart';
 
 class NavCubitScreen extends HydratedCubit<int> {
   NavCubitScreen() : super(0);
@@ -9,19 +9,19 @@ class NavCubitScreen extends HydratedCubit<int> {
     if (Screen.isIndexAllowed(index)) {
       emit(index);
     } else {
-      goToActivityPage();
+      goToScreenActivity();
     }
   }
 
-  void goToActivityPage() {
+  void goToScreenActivity() {
     emit(Screen.indexActivity);
   }
 
-  void goToSettingsPage() {
+  void goToScreenSettings() {
     emit(Screen.indexSettings);
   }
 
-  void goToAboutPage() {
+  void goToScreenAbout() {
     emit(Screen.indexAbout);
   }
 
@@ -32,6 +32,6 @@ class NavCubitScreen extends HydratedCubit<int> {
 
   @override
   Map<String, dynamic>? toJson(int state) {
-    return <String, int>{'screenIndex': state};
+    return <String, int>{'index': state};
   }
 }
diff --git a/lib/ui/nav/bottom_nav_bar.dart b/lib/common/ui/nav/bottom_nav_bar.dart
similarity index 66%
rename from lib/ui/nav/bottom_nav_bar.dart
rename to lib/common/ui/nav/bottom_nav_bar.dart
index f6d47390df3c30316cb974fe7727b1392149dd40..9449caf4ca9dda4cd4386968cde0456d607c82fe 100644
--- a/lib/ui/nav/bottom_nav_bar.dart
+++ b/lib/common/ui/nav/bottom_nav_bar.dart
@@ -2,13 +2,16 @@ import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 import 'package:flutter_swipe/flutter_swipe.dart';
 
-import 'package:scrobbles/config/activity_page.dart';
-import 'package:scrobbles/cubit/nav_cubit_pages.dart';
+import 'package:scrobbles/common/config/activity_page.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
 
 class BottomNavBar extends StatelessWidget {
-  const BottomNavBar({super.key, required this.swipeController});
+  const BottomNavBar({
+    super.key,
+    this.swipeController,
+  });
 
-  final SwiperController swipeController;
+  final SwiperController? swipeController;
 
   @override
   Widget build(BuildContext context) {
@@ -20,23 +23,20 @@ class BottomNavBar extends StatelessWidget {
       shape: const ContinuousRectangleBorder(),
       child: BlocBuilder<NavCubitPage, int>(
         builder: (BuildContext context, int pageIndex) {
-          final List<ActivityPageItem> pageItems = [
-            ActivityPage.pageHome,
-            ActivityPage.pageDiscoveries,
-            ActivityPage.pageStatistics,
-          ];
-          final List<BottomNavigationBarItem> items = pageItems.map((ActivityPageItem item) {
-            return BottomNavigationBarItem(
+          final List<BottomNavigationBarItem> items = [];
+
+          ActivityPage.items.forEach((int pageIndex, ActivityPageItem item) {
+            items.add(BottomNavigationBarItem(
               icon: item.icon,
               label: tr(item.code),
-            );
-          }).toList();
+            ));
+          });
 
           return BottomNavigationBar(
             currentIndex: pageIndex,
             onTap: (int index) {
               BlocProvider.of<NavCubitPage>(context).updateIndex(index);
-              swipeController.move(index);
+              swipeController?.move(index);
             },
             type: BottomNavigationBarType.fixed,
             elevation: 0,
diff --git a/lib/ui/nav/global_app_bar.dart b/lib/common/ui/nav/global_app_bar.dart
similarity index 64%
rename from lib/ui/nav/global_app_bar.dart
rename to lib/common/ui/nav/global_app_bar.dart
index 542643f38953271db04ac004db203d2859cd85b1..9fc602b870f9a12d2fb2fc29eb2e707e9ce510c3 100644
--- a/lib/ui/nav/global_app_bar.dart
+++ b/lib/common/ui/nav/global_app_bar.dart
@@ -1,19 +1,20 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
-import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
-import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
-import 'package:scrobbles/cubit/data_heatmap_cubit.dart';
-import 'package:scrobbles/cubit/data_new_artists_cubit.dart';
-import 'package:scrobbles/cubit/data_new_tracks_cubit.dart';
-import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
-import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
-import 'package:scrobbles/cubit/data_timeline_cubit.dart';
-import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
-import 'package:scrobbles/cubit/nav_cubit_pages.dart';
-import 'package:scrobbles/config/screen.dart';
-import 'package:scrobbles/cubit/nav_cubit_screens.dart';
+import 'package:scrobbles/common/config/screen.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_screens.dart';
+
+import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
 
 class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
   const GlobalAppBar({super.key});
@@ -28,7 +29,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
           // go to Settings page
           menuActions.add(IconButton(
             onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToSettingsPage();
+              BlocProvider.of<NavCubitScreen>(context).goToScreenSettings();
             },
             icon: Screen.screenSettings.icon,
           ));
@@ -36,7 +37,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
           // go to About page
           menuActions.add(IconButton(
             onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToAboutPage();
+              BlocProvider.of<NavCubitScreen>(context).goToScreenAbout();
             },
             icon: Screen.screenAbout.icon,
           ));
@@ -61,8 +62,8 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
           // back to Home page
           menuActions.add(IconButton(
             onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToActivityPage();
-              BlocProvider.of<NavCubitPage>(context).goToHomePage();
+              BlocProvider.of<NavCubitScreen>(context).goToScreenActivity();
+              BlocProvider.of<NavCubitPage>(context).goToPageHome();
             },
             icon: Screen.screenActivity.icon,
           ));
diff --git a/lib/ui/pages/discoveries.dart b/lib/common/ui/pages/discoveries.dart
similarity index 84%
rename from lib/ui/pages/discoveries.dart
rename to lib/common/ui/pages/discoveries.dart
index 1df3ff94af915292e9b44ff4c9da94c7b5adb4d8..a4cc4c71aa6e63c4b6c222533b9199ba030f6708 100644
--- a/lib/ui/pages/discoveries.dart
+++ b/lib/common/ui/pages/discoveries.dart
@@ -1,9 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
-import 'package:scrobbles/cubit/data_new_artists_cubit.dart';
-import 'package:scrobbles/cubit/data_new_tracks_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
 import 'package:scrobbles/ui/widgets/cards/discoveries.dart';
 import 'package:scrobbles/ui/widgets/cards/new_artists.dart';
 import 'package:scrobbles/ui/widgets/cards/new_tracks.dart';
diff --git a/lib/ui/pages/home.dart b/lib/common/ui/pages/home.dart
similarity index 82%
rename from lib/ui/pages/home.dart
rename to lib/common/ui/pages/home.dart
index c28f4a0346cf3505c9edbdf80a75aa9aa64fe36b..dce7eeb9b9e7136a638667b01d681befa0bf4390 100644
--- a/lib/ui/pages/home.dart
+++ b/lib/common/ui/pages/home.dart
@@ -1,10 +1,10 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
-import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
-import 'package:scrobbles/cubit/data_timeline_cubit.dart';
-import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
 import 'package:scrobbles/ui/widgets/cards/statistics_global.dart';
 import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart';
 import 'package:scrobbles/ui/widgets/cards/timeline.dart';
diff --git a/lib/ui/pages/statistics.dart b/lib/common/ui/pages/statistics.dart
similarity index 83%
rename from lib/ui/pages/statistics.dart
rename to lib/common/ui/pages/statistics.dart
index f96aba468101c1b967353e2d5823028e639aaa3e..9c07d8fa9d90dd9ad01e924cce9a4c2fe0d4093f 100644
--- a/lib/ui/pages/statistics.dart
+++ b/lib/common/ui/pages/statistics.dart
@@ -1,9 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
-import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
-import 'package:scrobbles/cubit/data_heatmap_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
 import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart';
 import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart';
 import 'package:scrobbles/ui/widgets/cards/heatmap.dart';
diff --git a/lib/ui/screens/about.dart b/lib/common/ui/screens/about.dart
similarity index 96%
rename from lib/ui/screens/about.dart
rename to lib/common/ui/screens/about.dart
index 85c38c32d997fc8be43bca5514a2dbd5831bf7d7..f7a14a9a7e574a7b6f9ed181f38d08ba8c2285fe 100644
--- a/lib/ui/screens/about.dart
+++ b/lib/common/ui/screens/about.dart
@@ -14,7 +14,7 @@ class ScreenAbout extends StatelessWidget {
         mainAxisSize: MainAxisSize.max,
         children: <Widget>[
           const SizedBox(height: 8),
-          AppTitle(text: tr('about_title')),
+          const AppTitle(text: 'about_title'),
           const Text('about_content').tr(),
           FutureBuilder<PackageInfo>(
             future: PackageInfo.fromPlatform(),
diff --git a/lib/ui/screens/activity.dart b/lib/common/ui/screens/activity.dart
similarity index 75%
rename from lib/ui/screens/activity.dart
rename to lib/common/ui/screens/activity.dart
index c8db336bcfcd67330b657bb825c31e9c48ffa058..7eeb5faac7eda65d7a38b1abc0f4b0085c8c4e5f 100644
--- a/lib/ui/screens/activity.dart
+++ b/lib/common/ui/screens/activity.dart
@@ -2,10 +2,10 @@ import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 import 'package:flutter_swipe/flutter_swipe.dart';
 
-import 'package:scrobbles/config/activity_page.dart';
-import 'package:scrobbles/config/screen.dart';
-import 'package:scrobbles/cubit/nav_cubit_pages.dart';
-import 'package:scrobbles/ui/nav/bottom_nav_bar.dart';
+import 'package:scrobbles/common/config/activity_page.dart';
+import 'package:scrobbles/common/config/screen.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
+import 'package:scrobbles/common/ui/nav/bottom_nav_bar.dart';
 
 class ScreenActivity extends StatelessWidget {
   const ScreenActivity({super.key});
@@ -15,9 +15,9 @@ class ScreenActivity extends StatelessWidget {
     return BlocBuilder<NavCubitPage, int>(
       builder: (BuildContext context, int pageIndex) {
         return Swiper(
-          itemCount: Screen.itemsCount,
+          itemCount: Screen.items.length,
           itemBuilder: (BuildContext context, int pageIndex) {
-            return ActivityPage.getPageWidget(pageIndex);
+            return ActivityPage.getWidget(pageIndex);
           },
           pagination: SwiperPagination(
             margin: const EdgeInsets.all(0),
diff --git a/lib/ui/screens/settings.dart b/lib/common/ui/screens/settings.dart
similarity index 88%
rename from lib/ui/screens/settings.dart
rename to lib/common/ui/screens/settings.dart
index 678e2901cfbdd06df0bb0ecd088b98f0198d1776..bd02cded6845db72d9f4ff6659ea5b426d1a5ac0 100644
--- a/lib/ui/screens/settings.dart
+++ b/lib/common/ui/screens/settings.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/ui/settings/settings_form.dart';
+import 'package:scrobbles/common/ui/settings/settings_form.dart';
 
 class ScreenSettings extends StatelessWidget {
   const ScreenSettings({super.key});
diff --git a/lib/ui/settings/settings_form.dart b/lib/common/ui/settings/settings_form.dart
similarity index 99%
rename from lib/ui/settings/settings_form.dart
rename to lib/common/ui/settings/settings_form.dart
index 97372a095871a07f26baa2b570c337e5b60152fc..40dca8d17c389784e7456499bd781897544e6501 100644
--- a/lib/ui/settings/settings_form.dart
+++ b/lib/common/ui/settings/settings_form.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
 import 'package:scrobbles/config/default_global_settings.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 
 class SettingsForm extends StatefulWidget {
   const SettingsForm({super.key});
diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart
new file mode 100644
index 0000000000000000000000000000000000000000..68335d6afcdc1d5a84936100ea1acae81c05619d
--- /dev/null
+++ b/lib/config/application_config.dart
@@ -0,0 +1,3 @@
+class ApplicationConfig {
+  static const String appTitle = 'Scrobbles';
+}
diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart
new file mode 100644
index 0000000000000000000000000000000000000000..1f33c908216cca222d576d89d07ce05de4a661ec
--- /dev/null
+++ b/lib/config/default_activity_settings.dart
@@ -0,0 +1,28 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class DefaultActivitySettings {
+  // available game parameters codes
+  static const String parameterCodeDashboardType = 'dashboardType';
+  static const List<String> availableParameters = [
+    parameterCodeDashboardType,
+  ];
+
+  // dashboard type: available values
+  static const String dashboardTypeDefault = 'default';
+  static const List<String> allowedDashboardTypeValues = [
+    dashboardTypeDefault,
+  ];
+  // dashboard type: default value
+  static const String defaultDashboardTypeValue = dashboardTypeDefault;
+
+  // available values from parameter code
+  static List<String> getAvailableValues(String parameterCode) {
+    switch (parameterCode) {
+      case parameterCodeDashboardType:
+        return DefaultActivitySettings.allowedDashboardTypeValues;
+    }
+
+    printlog('Did not find any available value for game parameter "$parameterCode".');
+    return [];
+  }
+}
diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart
index 0565d15a1afbf20693e921b52dab4327e96c70ca..f64cb1ff1c153c5f6e4bd6b7607bc60943cd982f 100644
--- a/lib/config/default_global_settings.dart
+++ b/lib/config/default_global_settings.dart
@@ -1,4 +1,32 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
 class DefaultGlobalSettings {
+  // available global parameters codes
+  static const String parameterCodeSkin = 'skin';
+  static const List<String> availableParameters = [
+    parameterCodeSkin,
+  ];
+
+  // skin: available values
+  static const String skinValueDefault = 'default';
+  static const List<String> allowedSkinValues = [
+    skinValueDefault,
+  ];
+  // skin: default value
+  static const String defaultSkinValue = skinValueDefault;
+
+  // available values from parameter code
+  static List<String> getAvailableValues(String parameterCode) {
+    switch (parameterCode) {
+      case parameterCodeSkin:
+        return DefaultGlobalSettings.allowedSkinValues;
+    }
+
+    printlog('Did not find any available value for global parameter "$parameterCode".');
+    return [];
+  }
+
+  @Deprecated("Should be removed / normalized")
   static const List<int> allowedDaysCountValues = [
     7,
     14,
@@ -7,17 +35,26 @@ class DefaultGlobalSettings {
     60,
     90,
   ];
+
+  @Deprecated("Should be removed / normalized")
   static const List<int> allowedCountValues = [
     5,
     10,
     20,
   ];
 
+  @Deprecated("Should be removed / normalized")
   static const int defaultDiscoveriesDaysCount = 14;
+  @Deprecated("Should be removed / normalized")
   static const int defaultDistributionDaysCount = 21;
+  @Deprecated("Should be removed / normalized")
   static const int defaultStatisticsRecentDaysCount = 21;
+  @Deprecated("Should be removed / normalized")
   static const int defaultTimelineDaysCount = 14;
+  @Deprecated("Should be removed / normalized")
   static const int defaultTopArtistsDaysCount = 14;
+  @Deprecated("Should be removed / normalized")
   static const int defaultNewArtistsCount = 5;
+  @Deprecated("Should be removed / normalized")
   static const int defaultNewTracksCount = 5;
 }
diff --git a/lib/cubit/activity/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart
new file mode 100644
index 0000000000000000000000000000000000000000..7a0b36cf548a0e254052443c9f749f95e07d1894
--- /dev/null
+++ b/lib/cubit/activity/activity_cubit.dart
@@ -0,0 +1,65 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:scrobbles/models/activity/activity.dart';
+import 'package:scrobbles/models/settings/settings_activity.dart';
+import 'package:scrobbles/models/settings/settings_global.dart';
+
+part 'activity_state.dart';
+
+class ActivityCubit extends HydratedCubit<ActivityState> {
+  ActivityCubit()
+      : super(ActivityState(
+          currentActivity: Activity.createNull(),
+        ));
+
+  void updateState(Activity activity) {
+    emit(ActivityState(
+      currentActivity: activity,
+    ));
+  }
+
+  void refresh() {
+    final Activity activity = Activity(
+      // Settings
+      activitySettings: state.currentActivity.activitySettings,
+      globalSettings: state.currentActivity.globalSettings,
+      // State
+      isRunning: state.currentActivity.isRunning,
+    );
+
+    updateState(activity);
+  }
+
+  void startNewActivity({
+    required ActivitySettings activitySettings,
+    required GlobalSettings globalSettings,
+  }) {
+    final Activity newActivity = Activity.createNew(
+      // Settings
+      activitySettings: activitySettings,
+      globalSettings: globalSettings,
+    );
+
+    newActivity.dump();
+
+    updateState(newActivity);
+    refresh();
+  }
+
+  @override
+  ActivityState? fromJson(Map<String, dynamic> json) {
+    final Activity currentActivity = json['currentActivity'] as Activity;
+
+    return ActivityState(
+      currentActivity: currentActivity,
+    );
+  }
+
+  @override
+  Map<String, dynamic>? toJson(ActivityState state) {
+    return <String, dynamic>{
+      'currentActivity': state.currentActivity.toJson(),
+    };
+  }
+}
diff --git a/lib/cubit/activity/activity_state.dart b/lib/cubit/activity/activity_state.dart
new file mode 100644
index 0000000000000000000000000000000000000000..887b45e4255fd7de1cc7744569d82a38a66602f2
--- /dev/null
+++ b/lib/cubit/activity/activity_state.dart
@@ -0,0 +1,15 @@
+part of 'activity_cubit.dart';
+
+@immutable
+class ActivityState extends Equatable {
+  const ActivityState({
+    required this.currentActivity,
+  });
+
+  final Activity currentActivity;
+
+  @override
+  List<dynamic> get props => <dynamic>[
+        currentActivity,
+      ];
+}
diff --git a/lib/cubit/data_counts_by_day_cubit.dart b/lib/cubit/activity/data_counts_by_day_cubit.dart
similarity index 96%
rename from lib/cubit/data_counts_by_day_cubit.dart
rename to lib/cubit/activity/data_counts_by_day_cubit.dart
index a676e4bc3ab1a6acd1815f977586f1f268e502ed..59c7482fa99de7b9ed59ef7cee49c5bb3b81fff1 100644
--- a/lib/cubit/data_counts_by_day_cubit.dart
+++ b/lib/cubit/activity/data_counts_by_day_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/counts_by_day.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_counts_by_day_state.dart b/lib/cubit/activity/data_counts_by_day_state.dart
similarity index 100%
rename from lib/cubit/data_counts_by_day_state.dart
rename to lib/cubit/activity/data_counts_by_day_state.dart
diff --git a/lib/cubit/data_counts_by_hour_cubit.dart b/lib/cubit/activity/data_counts_by_hour_cubit.dart
similarity index 96%
rename from lib/cubit/data_counts_by_hour_cubit.dart
rename to lib/cubit/activity/data_counts_by_hour_cubit.dart
index 7d817829580c0d1e1887dbebb649b5ff10c9e756..6d07f45dbb43937e29c451164d4a990216c7a23f 100644
--- a/lib/cubit/data_counts_by_hour_cubit.dart
+++ b/lib/cubit/activity/data_counts_by_hour_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/counts_by_hour.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_counts_by_hour_state.dart b/lib/cubit/activity/data_counts_by_hour_state.dart
similarity index 100%
rename from lib/cubit/data_counts_by_hour_state.dart
rename to lib/cubit/activity/data_counts_by_hour_state.dart
diff --git a/lib/cubit/data_discoveries_cubit.dart b/lib/cubit/activity/data_discoveries_cubit.dart
similarity index 96%
rename from lib/cubit/data_discoveries_cubit.dart
rename to lib/cubit/activity/data_discoveries_cubit.dart
index 561f32d9efff848f83fb0e7ed9e4aadb8bca0ca3..4ea5c57b84f881b8dc86c0dd3929cad99b7f0549 100644
--- a/lib/cubit/data_discoveries_cubit.dart
+++ b/lib/cubit/activity/data_discoveries_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/discoveries.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_discoveries_state.dart b/lib/cubit/activity/data_discoveries_state.dart
similarity index 100%
rename from lib/cubit/data_discoveries_state.dart
rename to lib/cubit/activity/data_discoveries_state.dart
diff --git a/lib/cubit/data_heatmap_cubit.dart b/lib/cubit/activity/data_heatmap_cubit.dart
similarity index 96%
rename from lib/cubit/data_heatmap_cubit.dart
rename to lib/cubit/activity/data_heatmap_cubit.dart
index 3fe1d99c82a3be45db9140e0ce04a5eedcff31c9..3d386c324f81b63b521f50382e1f1ab90db6026a 100644
--- a/lib/cubit/data_heatmap_cubit.dart
+++ b/lib/cubit/activity/data_heatmap_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/heatmap.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_heatmap_state.dart b/lib/cubit/activity/data_heatmap_state.dart
similarity index 100%
rename from lib/cubit/data_heatmap_state.dart
rename to lib/cubit/activity/data_heatmap_state.dart
diff --git a/lib/cubit/data_new_artists_cubit.dart b/lib/cubit/activity/data_new_artists_cubit.dart
similarity index 96%
rename from lib/cubit/data_new_artists_cubit.dart
rename to lib/cubit/activity/data_new_artists_cubit.dart
index c01f2f7b12d1f774830e598fd50f444d7fb7237b..c5ae1c94c8ef575d0eb7f549488fa199ba27bd4f 100644
--- a/lib/cubit/data_new_artists_cubit.dart
+++ b/lib/cubit/activity/data_new_artists_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/new_artists.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_new_artists_state.dart b/lib/cubit/activity/data_new_artists_state.dart
similarity index 100%
rename from lib/cubit/data_new_artists_state.dart
rename to lib/cubit/activity/data_new_artists_state.dart
diff --git a/lib/cubit/data_new_tracks_cubit.dart b/lib/cubit/activity/data_new_tracks_cubit.dart
similarity index 96%
rename from lib/cubit/data_new_tracks_cubit.dart
rename to lib/cubit/activity/data_new_tracks_cubit.dart
index f786af4641c2efc8ade9f3ab58b61891b50c804b..849ae75b769df053d1f381c9e86815a47db18970 100644
--- a/lib/cubit/data_new_tracks_cubit.dart
+++ b/lib/cubit/activity/data_new_tracks_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/new_tracks.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_new_tracks_state.dart b/lib/cubit/activity/data_new_tracks_state.dart
similarity index 100%
rename from lib/cubit/data_new_tracks_state.dart
rename to lib/cubit/activity/data_new_tracks_state.dart
diff --git a/lib/cubit/data_statistics_global_cubit.dart b/lib/cubit/activity/data_statistics_global_cubit.dart
similarity index 100%
rename from lib/cubit/data_statistics_global_cubit.dart
rename to lib/cubit/activity/data_statistics_global_cubit.dart
diff --git a/lib/cubit/data_statistics_global_state.dart b/lib/cubit/activity/data_statistics_global_state.dart
similarity index 100%
rename from lib/cubit/data_statistics_global_state.dart
rename to lib/cubit/activity/data_statistics_global_state.dart
diff --git a/lib/cubit/data_statistics_recent_cubit.dart b/lib/cubit/activity/data_statistics_recent_cubit.dart
similarity index 96%
rename from lib/cubit/data_statistics_recent_cubit.dart
rename to lib/cubit/activity/data_statistics_recent_cubit.dart
index 86a5def9774d26123670886e22ba13c55a20c918..0b19c0a2c5cd210944b61e2e5a1fcd292e74e5bb 100644
--- a/lib/cubit/data_statistics_recent_cubit.dart
+++ b/lib/cubit/activity/data_statistics_recent_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/statistics_recent.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_statistics_recent_state.dart b/lib/cubit/activity/data_statistics_recent_state.dart
similarity index 100%
rename from lib/cubit/data_statistics_recent_state.dart
rename to lib/cubit/activity/data_statistics_recent_state.dart
diff --git a/lib/cubit/data_timeline_cubit.dart b/lib/cubit/activity/data_timeline_cubit.dart
similarity index 96%
rename from lib/cubit/data_timeline_cubit.dart
rename to lib/cubit/activity/data_timeline_cubit.dart
index 45a1bbb0c80997ad0336d8747173b451d31e97d7..724240140ba31ae466b542805dc7972d2ccf3ea4 100644
--- a/lib/cubit/data_timeline_cubit.dart
+++ b/lib/cubit/activity/data_timeline_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/timeline.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_timeline_state.dart b/lib/cubit/activity/data_timeline_state.dart
similarity index 100%
rename from lib/cubit/data_timeline_state.dart
rename to lib/cubit/activity/data_timeline_state.dart
diff --git a/lib/cubit/data_top_artists_cubit.dart b/lib/cubit/activity/data_top_artists_cubit.dart
similarity index 96%
rename from lib/cubit/data_top_artists_cubit.dart
rename to lib/cubit/activity/data_top_artists_cubit.dart
index b67fade4a6d9a5570be30850982dde7ba3a9e3ed..4692b8c1145796796853694ee55ce094c51df94c 100644
--- a/lib/cubit/data_top_artists_cubit.dart
+++ b/lib/cubit/activity/data_top_artists_cubit.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/topartists.dart';
 import 'package:scrobbles/network/scrobbles.dart';
 
diff --git a/lib/cubit/data_top_artists_state.dart b/lib/cubit/activity/data_top_artists_state.dart
similarity index 100%
rename from lib/cubit/data_top_artists_state.dart
rename to lib/cubit/activity/data_top_artists_state.dart
diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart
new file mode 100644
index 0000000000000000000000000000000000000000..e5364926e7e64ebedcafb91f33256ff65392d020
--- /dev/null
+++ b/lib/cubit/settings/settings_activity_cubit.dart
@@ -0,0 +1,62 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:scrobbles/config/default_activity_settings.dart';
+import 'package:scrobbles/models/settings/settings_activity.dart';
+
+part 'settings_activity_state.dart';
+
+class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
+  ActivitySettingsCubit()
+      : super(ActivitySettingsState(settings: ActivitySettings.createDefault()));
+
+  void setValues({
+    String? dashboardType,
+  }) {
+    emit(
+      ActivitySettingsState(
+        settings: ActivitySettings(
+          dashboardType: dashboardType ?? state.settings.dashboardType,
+        ),
+      ),
+    );
+  }
+
+  String getParameterValue(String code) {
+    switch (code) {
+      case DefaultActivitySettings.parameterCodeDashboardType:
+        return ActivitySettings.getDashboardTypeValueFromUnsafe(state.settings.dashboardType);
+    }
+
+    return '';
+  }
+
+  void setParameterValue(String code, String value) {
+    final String dashboardType = code == DefaultActivitySettings.parameterCodeDashboardType
+        ? value
+        : getParameterValue(DefaultActivitySettings.parameterCodeDashboardType);
+
+    setValues(
+      dashboardType: dashboardType,
+    );
+  }
+
+  @override
+  ActivitySettingsState? fromJson(Map<String, dynamic> json) {
+    final String dashboardType =
+        json[DefaultActivitySettings.parameterCodeDashboardType] as String;
+
+    return ActivitySettingsState(
+      settings: ActivitySettings(
+        dashboardType: dashboardType,
+      ),
+    );
+  }
+
+  @override
+  Map<String, dynamic>? toJson(ActivitySettingsState state) {
+    return <String, dynamic>{
+      DefaultActivitySettings.parameterCodeDashboardType: state.settings.dashboardType,
+    };
+  }
+}
diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart
new file mode 100644
index 0000000000000000000000000000000000000000..2b2de42011634e81ae9e6f8bcaa1577f239c778b
--- /dev/null
+++ b/lib/cubit/settings/settings_activity_state.dart
@@ -0,0 +1,15 @@
+part of 'settings_activity_cubit.dart';
+
+@immutable
+class ActivitySettingsState extends Equatable {
+  const ActivitySettingsState({
+    required this.settings,
+  });
+
+  final ActivitySettings settings;
+
+  @override
+  List<dynamic> get props => <dynamic>[
+        settings,
+      ];
+}
diff --git a/lib/cubit/settings_global_cubit.dart b/lib/cubit/settings/settings_global_cubit.dart
similarity index 100%
rename from lib/cubit/settings_global_cubit.dart
rename to lib/cubit/settings/settings_global_cubit.dart
diff --git a/lib/cubit/settings_global_state.dart b/lib/cubit/settings/settings_global_state.dart
similarity index 100%
rename from lib/cubit/settings_global_state.dart
rename to lib/cubit/settings/settings_global_state.dart
diff --git a/lib/main.dart b/lib/main.dart
index 3dbb8d6dde3d31a12430ba9aa7d2764fb97fd369..02ce7f1b14dbd7d377cc20a0138093204ff0893c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -4,19 +4,23 @@ import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/nav_cubit_pages.dart';
-import 'package:scrobbles/cubit/nav_cubit_screens.dart';
-import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
-import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
-import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
-import 'package:scrobbles/cubit/data_heatmap_cubit.dart';
-import 'package:scrobbles/cubit/data_new_artists_cubit.dart';
-import 'package:scrobbles/cubit/data_new_tracks_cubit.dart';
-import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
-import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
-import 'package:scrobbles/cubit/data_timeline_cubit.dart';
-import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_screens.dart';
+
+import 'package:scrobbles/config/application_config.dart';
+import 'package:scrobbles/cubit/activity/activity_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_activity_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/ui/skeleton.dart';
 
 void main() async {
@@ -49,28 +53,62 @@ class MyApp extends StatelessWidget {
   Widget build(BuildContext context) {
     return MultiBlocProvider(
       providers: [
-        BlocProvider<NavCubitPage>(create: (context) => NavCubitPage()),
-        BlocProvider<NavCubitScreen>(create: (context) => NavCubitScreen()),
+        // default providers
+        BlocProvider<NavCubitPage>(
+          create: (context) => NavCubitPage(),
+        ),
+        BlocProvider<NavCubitScreen>(
+          create: (context) => NavCubitScreen(),
+        ),
         BlocProvider<ApplicationThemeModeCubit>(
-            create: (context) => ApplicationThemeModeCubit()),
-        BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()),
-        BlocProvider<DataCountsByDayCubit>(create: (context) => DataCountsByDayCubit()),
-        BlocProvider<DataCountsByHourCubit>(create: (context) => DataCountsByHourCubit()),
-        BlocProvider<DataDiscoveriesCubit>(create: (context) => DataDiscoveriesCubit()),
-        BlocProvider<DataHeatmapCubit>(create: (context) => DataHeatmapCubit()),
-        BlocProvider<DataNewArtistsCubit>(create: (context) => DataNewArtistsCubit()),
-        BlocProvider<DataNewTracksCubit>(create: (context) => DataNewTracksCubit()),
+          create: (context) => ApplicationThemeModeCubit(),
+        ),
+        BlocProvider<ActivityCubit>(
+          create: (context) => ActivityCubit(),
+        ),
+        BlocProvider<GlobalSettingsCubit>(
+          create: (context) => GlobalSettingsCubit(),
+        ),
+        BlocProvider<ActivitySettingsCubit>(
+          create: (context) => ActivitySettingsCubit(),
+        ),
+
+        // custom providers
+        BlocProvider<DataCountsByDayCubit>(
+          create: (context) => DataCountsByDayCubit(),
+        ),
+        BlocProvider<DataCountsByHourCubit>(
+          create: (context) => DataCountsByHourCubit(),
+        ),
+        BlocProvider<DataDiscoveriesCubit>(
+          create: (context) => DataDiscoveriesCubit(),
+        ),
+        BlocProvider<DataHeatmapCubit>(
+          create: (context) => DataHeatmapCubit(),
+        ),
+        BlocProvider<DataNewArtistsCubit>(
+          create: (context) => DataNewArtistsCubit(),
+        ),
+        BlocProvider<DataNewTracksCubit>(
+          create: (context) => DataNewTracksCubit(),
+        ),
         BlocProvider<DataStatisticsGlobalCubit>(
-            create: (context) => DataStatisticsGlobalCubit()),
+          create: (context) => DataStatisticsGlobalCubit(),
+        ),
         BlocProvider<DataStatisticsRecentCubit>(
-            create: (context) => DataStatisticsRecentCubit()),
-        BlocProvider<DataTimelineCubit>(create: (context) => DataTimelineCubit()),
-        BlocProvider<DataTopArtistsCubit>(create: (context) => DataTopArtistsCubit()),
+          create: (context) => DataStatisticsRecentCubit(),
+        ),
+        BlocProvider<DataTimelineCubit>(
+          create: (context) => DataTimelineCubit(),
+        ),
+        BlocProvider<DataTopArtistsCubit>(
+          create: (context) => DataTopArtistsCubit(),
+        ),
       ],
       child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
         builder: (BuildContext context, ApplicationThemeModeState state) {
           return MaterialApp(
-            title: 'Scrobbles',
+            title: ApplicationConfig.appTitle,
             home: const SkeletonScreen(),
 
             // Theme stuff
diff --git a/lib/models/activity/activity.dart b/lib/models/activity/activity.dart
new file mode 100644
index 0000000000000000000000000000000000000000..973cd0343e4160aa421ce8723efbded94c4e60c0
--- /dev/null
+++ b/lib/models/activity/activity.dart
@@ -0,0 +1,77 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:scrobbles/models/settings/settings_activity.dart';
+import 'package:scrobbles/models/settings/settings_global.dart';
+
+class Activity {
+  Activity({
+    // Settings
+    required this.activitySettings,
+    required this.globalSettings,
+
+    // State
+    this.isRunning = false,
+  });
+
+  // Settings
+  final ActivitySettings activitySettings;
+  final GlobalSettings globalSettings;
+
+  // State
+  bool isRunning;
+
+  factory Activity.createNull() {
+    return Activity(
+      // Settings
+      activitySettings: ActivitySettings.createDefault(),
+      globalSettings: GlobalSettings.createDefault(),
+    );
+  }
+
+  factory Activity.createNew({
+    ActivitySettings? activitySettings,
+    GlobalSettings? globalSettings,
+  }) {
+    final ActivitySettings newActivitySettings =
+        activitySettings ?? ActivitySettings.createDefault();
+    final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();
+
+    return Activity(
+      // Settings
+      activitySettings: newActivitySettings,
+      globalSettings: newGlobalSettings,
+      // State
+      isRunning: true,
+    );
+  }
+
+  bool get canBeResumed => true;
+
+  void dump() {
+    printlog('');
+    printlog('## Current game dump:');
+    printlog('');
+    printlog('$Activity:');
+    printlog('  Settings');
+    activitySettings.dump();
+    globalSettings.dump();
+    printlog('  State');
+    printlog('    isRunning: $isRunning');
+    printlog('');
+  }
+
+  @override
+  String toString() {
+    return '$Activity(${toJson()})';
+  }
+
+  Map<String, dynamic>? toJson() {
+    return <String, dynamic>{
+      // Settings
+      'activitySettings': activitySettings.toJson(),
+      'globalSettings': globalSettings.toJson(),
+      // State
+      'isRunning': isRunning,
+    };
+  }
+}
diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart
new file mode 100644
index 0000000000000000000000000000000000000000..c270607eecb196a8d32b5ee71cc6bc020107323f
--- /dev/null
+++ b/lib/models/settings/settings_activity.dart
@@ -0,0 +1,42 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:scrobbles/config/default_activity_settings.dart';
+
+class ActivitySettings {
+  final String dashboardType;
+
+  ActivitySettings({
+    required this.dashboardType,
+  });
+
+  factory ActivitySettings.createDefault() {
+    return ActivitySettings(
+      dashboardType: DefaultActivitySettings.defaultDashboardTypeValue,
+    );
+  }
+
+  static String getDashboardTypeValueFromUnsafe(String dashboardType) {
+    if (DefaultActivitySettings.allowedDashboardTypeValues.contains(dashboardType)) {
+      return dashboardType;
+    }
+
+    return DefaultActivitySettings.defaultDashboardTypeValue;
+  }
+
+  void dump() {
+    printlog('$ActivitySettings:');
+    printlog('  ${DefaultActivitySettings.parameterCodeDashboardType}: $dashboardType');
+    printlog('');
+  }
+
+  @override
+  String toString() {
+    return '$ActivitySettings(${toJson()})';
+  }
+
+  Map<String, dynamic>? toJson() {
+    return <String, dynamic>{
+      DefaultActivitySettings.parameterCodeDashboardType: dashboardType,
+    };
+  }
+}
diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart
new file mode 100644
index 0000000000000000000000000000000000000000..666f87e2ef64e655da1bc7fc94b7b29a70b93ecc
--- /dev/null
+++ b/lib/models/settings/settings_global.dart
@@ -0,0 +1,42 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:scrobbles/config/default_global_settings.dart';
+
+class GlobalSettings {
+  String skin;
+
+  GlobalSettings({
+    required this.skin,
+  });
+
+  static String getSkinValueFromUnsafe(String skin) {
+    if (DefaultGlobalSettings.allowedSkinValues.contains(skin)) {
+      return skin;
+    }
+
+    return DefaultGlobalSettings.defaultSkinValue;
+  }
+
+  factory GlobalSettings.createDefault() {
+    return GlobalSettings(
+      skin: DefaultGlobalSettings.defaultSkinValue,
+    );
+  }
+
+  void dump() {
+    printlog('$GlobalSettings:');
+    printlog('  ${DefaultGlobalSettings.parameterCodeSkin}: $skin');
+    printlog('');
+  }
+
+  @override
+  String toString() {
+    return '$GlobalSettings(${toJson()})';
+  }
+
+  Map<String, dynamic>? toJson() {
+    return <String, dynamic>{
+      DefaultGlobalSettings.parameterCodeSkin: skin,
+    };
+  }
+}
diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart
index 3bb0c805400db0c2745159d523977bd55ccdfd05..74f49653d2f8a50ab818a102be51d66f2129aff9 100644
--- a/lib/ui/skeleton.dart
+++ b/lib/ui/skeleton.dart
@@ -1,9 +1,11 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/config/screen.dart';
-import 'package:scrobbles/cubit/nav_cubit_screens.dart';
-import 'package:scrobbles/ui/nav/global_app_bar.dart';
+import 'package:scrobbles/common/config/activity_page.dart';
+import 'package:scrobbles/common/config/screen.dart';
+import 'package:scrobbles/common/cubit/nav/nav_cubit_screens.dart';
+import 'package:scrobbles/common/ui/nav/global_app_bar.dart';
+import 'package:scrobbles/common/ui/nav/bottom_nav_bar.dart';
 
 class SkeletonScreen extends StatelessWidget {
   const SkeletonScreen({super.key});
@@ -27,6 +29,7 @@ class SkeletonScreen extends StatelessWidget {
             ),
           ),
           backgroundColor: Theme.of(context).colorScheme.surface,
+          bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
         );
       },
     );
diff --git a/lib/ui/widgets/cards/counts_by_day.dart b/lib/ui/widgets/cards/counts_by_day.dart
index 259fd29804c8316d577c1b511f0f83c24b01a8e6..672a873e77099b0defc82f4652d650a03b48b615 100644
--- a/lib/ui/widgets/cards/counts_by_day.dart
+++ b/lib/ui/widgets/cards/counts_by_day.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/counts_by_day.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/counts_by_day.dart';
diff --git a/lib/ui/widgets/cards/counts_by_hour.dart b/lib/ui/widgets/cards/counts_by_hour.dart
index dee7584d05e1c2b12bf44a810f791a42502b89f5..d7d296a2a4f46b0266aa4f22fc25d8aebbd58ab0 100644
--- a/lib/ui/widgets/cards/counts_by_hour.dart
+++ b/lib/ui/widgets/cards/counts_by_hour.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/counts_by_hour.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/counts_by_hour.dart';
diff --git a/lib/ui/widgets/cards/discoveries.dart b/lib/ui/widgets/cards/discoveries.dart
index d1e4baf4734e153eaac9297b05abd040499fadad..3937a509f012ac7d86236b8f96bc003f7511a3e3 100644
--- a/lib/ui/widgets/cards/discoveries.dart
+++ b/lib/ui/widgets/cards/discoveries.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/discoveries.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/discoveries_artists.dart';
diff --git a/lib/ui/widgets/cards/heatmap.dart b/lib/ui/widgets/cards/heatmap.dart
index e51a6670af44c02bf2b3cbe44e0a180884bb4a8a..ffc40ff31e836ea8165ec59650f4e9ac11a3e8ad 100644
--- a/lib/ui/widgets/cards/heatmap.dart
+++ b/lib/ui/widgets/cards/heatmap.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_heatmap_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/heatmap.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/heatmap.dart';
diff --git a/lib/ui/widgets/cards/new_artists.dart b/lib/ui/widgets/cards/new_artists.dart
index 365d5d6ef23381af434dc4e40d6eec4053469015..0ca1c6924babf166e0624065f0343f36707a5a12 100644
--- a/lib/ui/widgets/cards/new_artists.dart
+++ b/lib/ui/widgets/cards/new_artists.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_new_artists_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 
 class CardNewArtists extends StatelessWidget {
diff --git a/lib/ui/widgets/cards/new_tracks.dart b/lib/ui/widgets/cards/new_tracks.dart
index 0a73fd3b0e76d50cff3ff3c5a42e25a46fb701f6..cbcd99f3933b4becdb2639c7f63d003cfce9d8cf 100644
--- a/lib/ui/widgets/cards/new_tracks.dart
+++ b/lib/ui/widgets/cards/new_tracks.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_new_tracks_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 
 class CardNewTracks extends StatelessWidget {
diff --git a/lib/ui/widgets/cards/statistics_global.dart b/lib/ui/widgets/cards/statistics_global.dart
index a1480cd44a9464791e8fa5e224d02d8ac5379613..2eeadf8f5a4d54fa30f634e4f7e0b0a50c226aa8 100644
--- a/lib/ui/widgets/cards/statistics_global.dart
+++ b/lib/ui/widgets/cards/statistics_global.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
 import 'package:scrobbles/models/data/statistics_global.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/content/statistics_global.dart';
diff --git a/lib/ui/widgets/cards/statistics_recent.dart b/lib/ui/widgets/cards/statistics_recent.dart
index e3312da69f12f203ac0271e348f1d909cb7ae8f2..219063ce237e6140fc5ca6188affb6eb326cb210 100644
--- a/lib/ui/widgets/cards/statistics_recent.dart
+++ b/lib/ui/widgets/cards/statistics_recent.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/statistics_recent.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/content/statistics_recent.dart';
diff --git a/lib/ui/widgets/cards/timeline.dart b/lib/ui/widgets/cards/timeline.dart
index cf9d6888559c6dd94cb424dc6d360c3e9509d99f..941281706da59f4d13bdba402155a47261564387 100644
--- a/lib/ui/widgets/cards/timeline.dart
+++ b/lib/ui/widgets/cards/timeline.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_timeline_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/timeline.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/timeline_counts.dart';
diff --git a/lib/ui/widgets/cards/top_artists.dart b/lib/ui/widgets/cards/top_artists.dart
index a58127c4be74aac2474ff98c0256c228b7deae11..87f7a49493e0b1d008aa841f0128847bacae2b4f 100644
--- a/lib/ui/widgets/cards/top_artists.dart
+++ b/lib/ui/widgets/cards/top_artists.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
-import 'package:scrobbles/cubit/settings_global_cubit.dart';
+import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
+import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
 import 'package:scrobbles/models/data/topartists.dart';
 import 'package:scrobbles/ui/widgets/card_content.dart';
 import 'package:scrobbles/ui/widgets/charts/top_artists.dart';
diff --git a/pubspec.lock b/pubspec.lock
index abad950f9c2c4719e55bdf3aa796d3e77fa1b54c..03f2aab0ca024f0632a36ccb4e889a2e2883709f 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -269,10 +269,10 @@ packages:
     dependency: transitive
     description:
       name: path_provider
-      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+      sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.4"
+    version: "2.1.5"
   path_provider_android:
     dependency: transitive
     description:
@@ -466,10 +466,10 @@ packages:
     dependency: transitive
     description:
       name: win32
-      sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
+      sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
       url: "https://pub.dev"
     source: hosted
-    version: "5.7.0"
+    version: "5.7.2"
   xdg_directories:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 715fc230a2eca45710f208b1b393c8538e6de98c..5939c74230ea0feda7fe06cb18a336bcc24ecc0d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: Display scrobbles data and charts
 
 publish_to: "none"
 
-version: 0.3.1+65
+version: 0.4.0+66
 
 environment:
   sdk: "^3.0.0"