diff --git a/assets/translations/en.json b/assets/translations/en.json
index b060f0b5f2d6850dfffd8766bfb7bbcd8c732db8..e0fb8cfab87c6b4d67da611989068c9e9f13e1d7 100644
--- a/assets/translations/en.json
+++ b/assets/translations/en.json
@@ -10,6 +10,7 @@
   "about_version": "Version: {version}",
 
   "page_home": "Home",
+  "page_player": "Player",
   "page_remote_control": "Control",
 
   "": ""
diff --git a/assets/translations/fr.json b/assets/translations/fr.json
index 718515612759a1034a1813885cba17c5388cbca0..26f3a4e254c5e7e72a81d54d5d895a6e76cd66f9 100644
--- a/assets/translations/fr.json
+++ b/assets/translations/fr.json
@@ -10,6 +10,7 @@
   "about_version": "Version : {version}",
 
   "page_home": "Accueil",
+  "page_player": "Player",
   "page_remote_control": "Télécommande",
 
   "": ""
diff --git a/fastlane/metadata/android/en-US/changelogs/24.txt b/fastlane/metadata/android/en-US/changelogs/24.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ac2c90e221caf3cf01ebba168fb16a8f31c0253a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/24.txt
@@ -0,0 +1 @@
+Normalize Activity application architecture.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/24.txt b/fastlane/metadata/android/fr-FR/changelogs/24.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d6843d89ba84ea4147528bc3d62d9ecf1a4a762
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/24.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 57%
rename from lib/config/activity_page.dart
rename to lib/common/config/activity_page.dart
index 9dbf249db4137bb2a467dd3f3cfc8ea887ae707d..5b8b165065c4e5431274d3a7e55f8ad51167d5b1 100644
--- a/lib/config/activity_page.dart
+++ b/lib/common/config/activity_page.dart
@@ -1,53 +1,59 @@
 import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/ui/pages/remote_control.dart';
-import 'package:plotter/ui/pages/home.dart';
+import 'package:plotter/common/ui/pages/home.dart';
+import 'package:plotter/common/ui/pages/player.dart';
+import 'package:plotter/common/ui/pages/remote_control.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 = true;
+
   static const indexHome = 0;
   static const pageHome = ActivityPageItem(
+    code: 'page_home',
     icon: Icon(UniconsLine.home),
     page: PageHome(),
-    code: 'page_home',
   );
 
-  static const indexRemoteControl = 1;
+  static const indexPlayer = 1;
+  static const pagePlayer = ActivityPageItem(
+    code: 'page_player',
+    icon: Icon(UniconsLine.star),
+    page: PagePlayer(),
+  );
+
+  static const indexRemoteControl = 2;
   static const pageRemoteControl = ActivityPageItem(
-    icon: Icon(UniconsLine.arrow),
-    page: PageRemoteControl(),
     code: 'page_remote_control',
+    icon: Icon(UniconsLine.star),
+    page: PageRemoteControl(),
   );
 
-  static Map<int, ActivityPageItem> items = {
+  static const Map<int, ActivityPageItem> items = {
     indexHome: pageHome,
+    indexPlayer: pagePlayer,
     indexRemoteControl: pageRemoteControl,
   };
 
+  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 5abef98b5cd88ef57df1473043ee43cdd9b615ec..4d563ca47b76da92b08d93f263a3960ea106f3ce 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:plotter/ui/screens/about.dart';
-import 'package:plotter/ui/screens/activity.dart';
-import 'package:plotter/ui/screens/settings.dart';
+import 'package:plotter/common/ui/screens/about.dart';
+import 'package:plotter/common/ui/screens/activity.dart';
+import 'package:plotter/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 72%
rename from lib/cubit/nav_cubit_pages.dart
rename to lib/common/cubit/nav/nav_cubit_pages.dart
index 59a601bed5050ba8076c1c09527d4a8aae1bfd90..c8416f2a1e28c3f3028e304139ae57a74ffc9a42 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:plotter/config/activity_page.dart';
+import 'package:plotter/common/config/activity_page.dart';
 
 class NavCubitPage extends HydratedCubit<int> {
   NavCubitPage() : super(0);
@@ -13,6 +13,10 @@ class NavCubitPage extends HydratedCubit<int> {
     }
   }
 
+  void goToPageHome() {
+    updateIndex(ActivityPage.indexHome);
+  }
+
   @override
   int fromJson(Map<String, dynamic> json) {
     return ActivityPage.indexHome;
@@ -20,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 02e63d92efa7995f713776b261c9c3a719dddbb2..b19b206c61dbc0617bf4f80b783345b1a3691ff1 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:plotter/config/screen.dart';
+import 'package:plotter/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 75%
rename from lib/ui/nav/bottom_nav_bar.dart
rename to lib/common/ui/nav/bottom_nav_bar.dart
index 2fd97208fcaf31b93aef7ea40d5c0885b63ca0fa..9b110346369d7547c6c37ce04e00979bb06bc8f3 100644
--- a/lib/ui/nav/bottom_nav_bar.dart
+++ b/lib/common/ui/nav/bottom_nav_bar.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/config/activity_page.dart';
-import 'package:plotter/cubit/nav_cubit_pages.dart';
+import 'package:plotter/common/config/activity_page.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_pages.dart';
 
 class BottomNavBar extends StatelessWidget {
   const BottomNavBar({super.key});
@@ -21,16 +21,14 @@ class BottomNavBar extends StatelessWidget {
         ),
       ),
       child: BlocBuilder<NavCubitPage, int>(builder: (BuildContext context, int state) {
-        final List<ActivityPageItem> pageItems = [
-          ActivityPage.pageHome,
-          ActivityPage.pageRemoteControl,
-        ];
-        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: state,
diff --git a/lib/common/ui/nav/global_app_bar.dart b/lib/common/ui/nav/global_app_bar.dart
new file mode 100644
index 0000000000000000000000000000000000000000..839a28e6f620d038a64e88414b266ea68104bbe7
--- /dev/null
+++ b/lib/common/ui/nav/global_app_bar.dart
@@ -0,0 +1,86 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:plotter/common/config/screen.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_pages.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_screens.dart';
+
+import 'package:plotter/cubit/activity/activity_cubit.dart';
+import 'package:plotter/models/activity/activity.dart';
+
+class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
+  const GlobalAppBar({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return BlocBuilder<ActivityCubit, ActivityState>(
+      builder: (BuildContext context, ActivityState activityState) {
+        return BlocBuilder<NavCubitScreen, int>(
+          builder: (BuildContext context, int pageIndex) {
+            final Activity currentActivity = activityState.currentActivity;
+
+            final List<Widget> menuActions = [];
+
+            if (currentActivity.isRunning) {
+              menuActions.add(StyledButton(
+                color: Colors.red,
+                onPressed: () {},
+                onLongPress: () {
+                  BlocProvider.of<ActivityCubit>(context).quitActivity();
+                  BlocProvider.of<NavCubitPage>(context).goToPageHome();
+                },
+                child: const Image(
+                  image: AssetImage('assets/ui/button_back.png'),
+                  fit: BoxFit.fill,
+                ),
+              ));
+            } else {
+              if (pageIndex == Screen.indexActivity) {
+                // go to Settings page
+                menuActions.add(ElevatedButton(
+                  onPressed: () {
+                    BlocProvider.of<NavCubitScreen>(context).goToScreenSettings();
+                  },
+                  style: ElevatedButton.styleFrom(
+                    shape: const CircleBorder(),
+                  ),
+                  child: Screen.screenSettings.icon,
+                ));
+
+                // go to About page
+                menuActions.add(ElevatedButton(
+                  onPressed: () {
+                    BlocProvider.of<NavCubitScreen>(context).goToScreenAbout();
+                  },
+                  style: ElevatedButton.styleFrom(
+                    shape: const CircleBorder(),
+                  ),
+                  child: Screen.screenAbout.icon,
+                ));
+              } else {
+                // back to Home page
+                menuActions.add(ElevatedButton(
+                  onPressed: () {
+                    BlocProvider.of<NavCubitScreen>(context).goToScreenActivity();
+                  },
+                  style: ElevatedButton.styleFrom(
+                    shape: const CircleBorder(),
+                  ),
+                  child: Screen.screenActivity.icon,
+                ));
+              }
+            }
+
+            return AppBar(
+              title: const AppHeader(text: 'app_name'),
+              actions: menuActions,
+            );
+          },
+        );
+      },
+    );
+  }
+
+  @override
+  Size get preferredSize => const Size.fromHeight(50);
+}
diff --git a/lib/ui/pages/home.dart b/lib/common/ui/pages/home.dart
similarity index 94%
rename from lib/ui/pages/home.dart
rename to lib/common/ui/pages/home.dart
index 410852b33f4f08650324271442a521f425c744eb..a72ff7fef4cee4ad6e6ae361747fb15d49aa7ac7 100644
--- a/lib/ui/pages/home.dart
+++ b/lib/common/ui/pages/home.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 
 class PageHome extends StatelessWidget {
diff --git a/lib/ui/pages/player.dart b/lib/common/ui/pages/player.dart
similarity index 94%
rename from lib/ui/pages/player.dart
rename to lib/common/ui/pages/player.dart
index 56acd8100da8fcd0747ebbf8333407f2f48e4e47..5a74c8c12a75622ee07d975659e3742d6f1ead52 100644
--- a/lib/ui/pages/player.dart
+++ b/lib/common/ui/pages/player.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 
 class PagePlayer extends StatelessWidget {
diff --git a/lib/ui/pages/remote_control.dart b/lib/common/ui/pages/remote_control.dart
similarity index 94%
rename from lib/ui/pages/remote_control.dart
rename to lib/common/ui/pages/remote_control.dart
index 58ef59d23931081747f09897082449ff8f679ce4..2038d027a50b87389a3e35a34011eb605881212b 100644
--- a/lib/ui/pages/remote_control.dart
+++ b/lib/common/ui/pages/remote_control.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 import 'package:plotter/ui/widgets/keyboard.dart';
 import 'package:plotter/utils/api.dart';
diff --git a/lib/ui/screens/about.dart b/lib/common/ui/screens/about.dart
similarity index 100%
rename from lib/ui/screens/about.dart
rename to lib/common/ui/screens/about.dart
diff --git a/lib/ui/screens/activity.dart b/lib/common/ui/screens/activity.dart
similarity index 67%
rename from lib/ui/screens/activity.dart
rename to lib/common/ui/screens/activity.dart
index 826386388e6727fb88096f8acebb2770fe63256b..56427c1c62eeb1aaa8693938ed46d4d68638912a 100644
--- a/lib/ui/screens/activity.dart
+++ b/lib/common/ui/screens/activity.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/config/activity_page.dart';
-import 'package:plotter/cubit/nav_cubit_pages.dart';
+import 'package:plotter/common/config/activity_page.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_pages.dart';
 
 class ScreenActivity extends StatelessWidget {
   const ScreenActivity({super.key});
@@ -11,7 +11,7 @@ class ScreenActivity extends StatelessWidget {
   Widget build(BuildContext context) {
     return BlocBuilder<NavCubitPage, int>(
       builder: (BuildContext context, int pageIndex) {
-        return ActivityPage.getPageWidget(pageIndex);
+        return ActivityPage.getWidget(pageIndex);
       },
     );
   }
diff --git a/lib/ui/screens/settings.dart b/lib/common/ui/screens/settings.dart
similarity index 100%
rename from lib/ui/screens/settings.dart
rename to lib/common/ui/screens/settings.dart
diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart
new file mode 100644
index 0000000000000000000000000000000000000000..81de9d30816005868891f0cc51c06b5c3becc30d
--- /dev/null
+++ b/lib/config/application_config.dart
@@ -0,0 +1,3 @@
+class ApplicationConfig {
+  static const String appTitle = 'Stepper plotter assistant';
+}
diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart
new file mode 100644
index 0000000000000000000000000000000000000000..3f4d85283b99d78103ce73ba9e9b1b1945e50869
--- /dev/null
+++ b/lib/config/default_activity_settings.dart
@@ -0,0 +1,32 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+class DefaultActivitySettings {
+  // available game parameters codes
+  static const String parameterCodePlotterType = 'plotterType';
+  static const List<String> availableParameters = [
+    parameterCodePlotterType,
+  ];
+
+  // plotter type: available values
+  static const String plotterTypeNone = 'none';
+  static const String plotterTypeRadial = 'radial';
+  static const String plotterTypeAxial = 'axial';
+  static const List<String> allowedPlotterTypeValues = [
+    plotterTypeNone,
+    plotterTypeRadial,
+    plotterTypeAxial,
+  ];
+  // items count: default value
+  static const String defaultPlotterTypeValue = plotterTypeNone;
+
+  // available values from parameter code
+  static List<String> getAvailableValues(String parameterCode) {
+    switch (parameterCode) {
+      case parameterCodePlotterType:
+        return DefaultActivitySettings.allowedPlotterTypeValues;
+    }
+
+    printlog('Did not find any available value for game parameter "$parameterCode".');
+    return [];
+  }
+}
diff --git a/lib/cubit/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart
similarity index 100%
rename from lib/cubit/activity_cubit.dart
rename to lib/cubit/activity/activity_cubit.dart
diff --git a/lib/cubit/activity_state.dart b/lib/cubit/activity/activity_state.dart
similarity index 100%
rename from lib/cubit/activity_state.dart
rename to lib/cubit/activity/activity_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..a3d1c722f255ee13b5fe5eca50dd252e7665fbdb
--- /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:plotter/config/default_activity_settings.dart';
+import 'package:plotter/models/settings/settings_activity.dart';
+
+part 'settings_activity_state.dart';
+
+class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
+  ActivitySettingsCubit()
+      : super(ActivitySettingsState(settings: ActivitySettings.createDefault()));
+
+  void setValues({
+    String? plotterType,
+  }) {
+    emit(
+      ActivitySettingsState(
+        settings: ActivitySettings(
+          plotterType: plotterType ?? state.settings.plotterType,
+        ),
+      ),
+    );
+  }
+
+  String getParameterValue(String code) {
+    switch (code) {
+      case DefaultActivitySettings.parameterCodePlotterType:
+        return ActivitySettings.getPlotterTypeValueFromUnsafe(state.settings.plotterType);
+    }
+
+    return '';
+  }
+
+  void setParameterValue(String code, String value) {
+    final String plotterType = code == DefaultActivitySettings.parameterCodePlotterType
+        ? value
+        : getParameterValue(DefaultActivitySettings.parameterCodePlotterType);
+
+    setValues(
+      plotterType: plotterType,
+    );
+  }
+
+  @override
+  ActivitySettingsState? fromJson(Map<String, dynamic> json) {
+    final String plotterType =
+        json[DefaultActivitySettings.parameterCodePlotterType] as String;
+
+    return ActivitySettingsState(
+      settings: ActivitySettings(
+        plotterType: plotterType,
+      ),
+    );
+  }
+
+  @override
+  Map<String, dynamic>? toJson(ActivitySettingsState state) {
+    return <String, dynamic>{
+      DefaultActivitySettings.parameterCodePlotterType: state.settings.plotterType,
+    };
+  }
+}
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 4a18a15d9cb90d7ee02432492f445dcd82442d3b..3fb2dddfed977da8d55e1e0c843d6476e273caee 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -4,10 +4,13 @@ import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
-import 'package:plotter/cubit/nav_cubit_pages.dart';
-import 'package:plotter/cubit/nav_cubit_screens.dart';
-import 'package:plotter/cubit/settings_global_cubit.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_pages.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_screens.dart';
+
+import 'package:plotter/config/application_config.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
+import 'package:plotter/cubit/settings/settings_activity_cubit.dart';
+import 'package:plotter/cubit/settings/settings_global_cubit.dart';
 import 'package:plotter/ui/skeleton.dart';
 
 void main() async {
@@ -40,17 +43,30 @@ 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<ActivityCubit>(create: (context) => ActivityCubit()),
-        BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()),
+          create: (context) => ApplicationThemeModeCubit(),
+        ),
+        BlocProvider<ActivityCubit>(
+          create: (context) => ActivityCubit(),
+        ),
+        BlocProvider<GlobalSettingsCubit>(
+          create: (context) => GlobalSettingsCubit(),
+        ),
+        BlocProvider<ActivitySettingsCubit>(
+          create: (context) => ActivitySettingsCubit(),
+        ),
       ],
       child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
         builder: (BuildContext context, ApplicationThemeModeState state) {
           return MaterialApp(
-            title: 'Stepper plotter assistant',
+            title: ApplicationConfig.appTitle,
             home: const SkeletonScreen(),
 
             // Theme stuff
diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart
new file mode 100644
index 0000000000000000000000000000000000000000..4b85637476872a00369f22f8b4d666a3ce9bec38
--- /dev/null
+++ b/lib/models/settings/settings_activity.dart
@@ -0,0 +1,42 @@
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:plotter/config/default_activity_settings.dart';
+
+class ActivitySettings {
+  final String plotterType;
+
+  ActivitySettings({
+    required this.plotterType,
+  });
+
+  static String getPlotterTypeValueFromUnsafe(String plotterType) {
+    if (DefaultActivitySettings.allowedPlotterTypeValues.contains(plotterType)) {
+      return plotterType;
+    }
+
+    return DefaultActivitySettings.defaultPlotterTypeValue;
+  }
+
+  factory ActivitySettings.createDefault() {
+    return ActivitySettings(
+      plotterType: DefaultActivitySettings.defaultPlotterTypeValue,
+    );
+  }
+
+  void dump() {
+    printlog('$ActivitySettings:');
+    printlog('  ${DefaultActivitySettings.parameterCodePlotterType}: $plotterType');
+    printlog('');
+  }
+
+  @override
+  String toString() {
+    return '$ActivitySettings(${toJson()})';
+  }
+
+  Map<String, dynamic>? toJson() {
+    return <String, dynamic>{
+      DefaultActivitySettings.parameterCodePlotterType: plotterType,
+    };
+  }
+}
diff --git a/lib/ui/nav/global_app_bar.dart b/lib/ui/nav/global_app_bar.dart
deleted file mode 100644
index 7b988c0467032cc1a0eed892e6ff40d3855afec1..0000000000000000000000000000000000000000
--- a/lib/ui/nav/global_app_bar.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:plotter/config/screen.dart';
-import 'package:plotter/cubit/activity_cubit.dart';
-import 'package:plotter/cubit/nav_cubit_screens.dart';
-
-class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
-  const GlobalAppBar({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return BlocBuilder<ActivityCubit, ActivityState>(
-      builder: (BuildContext context, ActivityState activityState) {
-        return BlocBuilder<NavCubitScreen, int>(
-          builder: (BuildContext context, int screenIndex) {
-            final List<Widget> menuActions = [];
-
-            if (screenIndex == Screen.indexActivity) {
-              // go to Settings page
-              menuActions.add(ElevatedButton(
-                onPressed: () {
-                  BlocProvider.of<NavCubitScreen>(context).goToSettingsPage();
-                },
-                style: ElevatedButton.styleFrom(
-                  shape: const CircleBorder(),
-                ),
-                child: Screen.screenSettings.icon,
-              ));
-
-              // go to About page
-              menuActions.add(ElevatedButton(
-                onPressed: () {
-                  BlocProvider.of<NavCubitScreen>(context).goToAboutPage();
-                },
-                style: ElevatedButton.styleFrom(
-                  shape: const CircleBorder(),
-                ),
-                child: Screen.screenAbout.icon,
-              ));
-            } else {
-              // back to Home page
-              menuActions.add(ElevatedButton(
-                onPressed: () {
-                  BlocProvider.of<NavCubitScreen>(context).goToActivityPage();
-                },
-                style: ElevatedButton.styleFrom(
-                  shape: const CircleBorder(),
-                ),
-                child: Screen.screenActivity.icon,
-              ));
-            }
-
-            return AppBar(
-              title: const AppHeader(text: 'app_name'),
-              actions: menuActions,
-            );
-          },
-        );
-      },
-    );
-  }
-
-  @override
-  Size get preferredSize => const Size.fromHeight(50);
-}
diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart
index 105be41f88e1e846f49b96ab87bd20097c304ba8..04631215734f64606b6e605981d1abebec8b32ca 100644
--- a/lib/ui/skeleton.dart
+++ b/lib/ui/skeleton.dart
@@ -1,10 +1,11 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/config/screen.dart';
-import 'package:plotter/cubit/nav_cubit_screens.dart';
-import 'package:plotter/ui/nav/bottom_nav_bar.dart';
-import 'package:plotter/ui/nav/global_app_bar.dart';
+import 'package:plotter/common/config/activity_page.dart';
+import 'package:plotter/common/config/screen.dart';
+import 'package:plotter/common/cubit/nav/nav_cubit_screens.dart';
+import 'package:plotter/common/ui/nav/global_app_bar.dart';
+import 'package:plotter/common/ui/nav/bottom_nav_bar.dart';
 
 class SkeletonScreen extends StatelessWidget {
   const SkeletonScreen({super.key});
@@ -28,8 +29,7 @@ class SkeletonScreen extends StatelessWidget {
             ),
           ),
           backgroundColor: Theme.of(context).colorScheme.surface,
-          bottomNavigationBar:
-              Screen.displayBottomNavBar(screenIndex) ? const BottomNavBar() : null,
+          bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
         );
       },
     );
diff --git a/lib/ui/widgets/activity/activity_bottom.dart b/lib/ui/widgets/activity/activity_bottom.dart
index e5c7f817f8d931a48c0950205ebfcc57cee12fc5..5c5c0bb27b5c2449e4d0d5acbeeaddada19eeb91 100644
--- a/lib/ui/widgets/activity/activity_bottom.dart
+++ b/lib/ui/widgets/activity/activity_bottom.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 
 class ActivityBottomWidget extends StatelessWidget {
diff --git a/lib/ui/widgets/activity/activity_content.dart b/lib/ui/widgets/activity/activity_content.dart
index 998a4d0c82e81c84f9c8da7e45df20ce1eecad3b..ca7268bb9fd1a0ebbdee682df16a326cd354d7ff 100644
--- a/lib/ui/widgets/activity/activity_content.dart
+++ b/lib/ui/widgets/activity/activity_content.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 
 class ActivityContentWidget extends StatelessWidget {
diff --git a/lib/ui/widgets/keyboard.dart b/lib/ui/widgets/keyboard.dart
index a7dcef15ea5992cdc2601b5b7461859fb81c9b27..c9981f2a225e381fc786d6939c981669fc3fd062 100644
--- a/lib/ui/widgets/keyboard.dart
+++ b/lib/ui/widgets/keyboard.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/utils/api.dart';
 
 class Keyboard extends StatelessWidget {
diff --git a/lib/utils/api.dart b/lib/utils/api.dart
index 3767284f504adbc28346bfc76cca818585a5d6dd..7c4ca6c8fc82b61271224fd936bd5ff69bf636cf 100644
--- a/lib/utils/api.dart
+++ b/lib/utils/api.dart
@@ -1,6 +1,6 @@
 import 'dart:convert';
 import 'package:http/http.dart' as http;
-import 'package:plotter/cubit/activity_cubit.dart';
+import 'package:plotter/cubit/activity/activity_cubit.dart';
 import 'package:plotter/models/activity/activity.dart';
 
 class Api {
diff --git a/pubspec.lock b/pubspec.lock
index 1ec777c6e784a3a794efde27a31bf135ef379ab6..8ca95092bb289f0969f8344f49bc92e4e8dc4df6 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -245,10 +245,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:
@@ -442,10 +442,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 bb9ac3368f15e5231eb74bfd4250e358986a638e..4a041552ba5e421a80aab4ba48a4ce4718c7b49d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: A plotter helper application.
 
 publish_to: "none"
 
-version: 0.2.1+23
+version: 0.3.0+24
 
 environment:
   sdk: "^3.0.0"