diff --git a/fastlane/metadata/android/en-US/changelogs/70.txt b/fastlane/metadata/android/en-US/changelogs/70.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e7ec941dfd19e8147652ea0534891d2d08eb9ad
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/70.txt
@@ -0,0 +1 @@
+Use navigation tools from flutter_custom_toolbox.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/70.txt b/fastlane/metadata/android/fr-FR/changelogs/70.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ab67504d93c0b1747466f9e3366d8db90fe96cb3
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/70.txt
@@ -0,0 +1 @@
+Utilisation des outils de navigation entre pages depuis flutter_custom_toolbox.
diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart
deleted file mode 100644
index 7af76c4f550a132b7fa9e364d4b2f7fa2d0c5fe7..0000000000000000000000000000000000000000
--- a/lib/common/config/activity_page.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-import 'package:ionicons/ionicons.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';
-import 'package:scrobbles/cubit/activity/activity_cubit.dart';
-import 'package:scrobbles/models/activity/activity.dart';
-
-class ActivityPageItem {
-  final String code;
-  final Icon icon;
-  final Widget Function({required Activity currentActivity})? builder;
-
-  const ActivityPageItem({
-    required this.code,
-    required this.icon,
-    required this.builder,
-  });
-}
-
-class ActivityPage {
-  static const bool displayBottomNavBar = false;
-
-  static const indexHome = 0;
-  static final ActivityPageItem pageHome = ActivityPageItem(
-    code: 'page_home',
-    icon: Icon(Ionicons.home_outline),
-    builder: ({required Activity currentActivity}) {
-      return PageHome();
-    },
-  );
-
-  static const indexDiscoveries = 1;
-  static final ActivityPageItem pageDiscoveries = ActivityPageItem(
-    code: 'page_discoveries',
-    icon: Icon(Ionicons.star_outline),
-    builder: ({required Activity currentActivity}) {
-      return PageDiscoveries();
-    },
-  );
-
-  static const indexStatistics = 2;
-  static final ActivityPageItem pageStatistics = ActivityPageItem(
-    code: 'page_statistics',
-    icon: Icon(Ionicons.bar_chart_outline),
-    builder: ({required Activity currentActivity}) {
-      return PageStatistics();
-    },
-  );
-
-  static Map<int, ActivityPageItem> items = {
-    indexHome: pageHome,
-    indexDiscoveries: pageDiscoveries,
-    indexStatistics: pageStatistics,
-  };
-
-  static int defaultPageIndex = indexHome;
-
-  static bool isIndexAllowed(int pageIndex) {
-    return items.keys.contains(pageIndex);
-  }
-
-  static Widget getWidget(int pageIndex) {
-    return BlocBuilder<ActivityCubit, ActivityState>(
-      builder: (BuildContext context, ActivityState activityState) {
-        final Activity currentActivity = activityState.currentActivity;
-
-        if (items.keys.contains(pageIndex)) {
-          return items[pageIndex]?.builder!(currentActivity: currentActivity) ?? Text('oups');
-        } else {
-          return getWidget(defaultPageIndex);
-        }
-      },
-    );
-  }
-}
diff --git a/lib/common/config/screen.dart b/lib/common/config/screen.dart
deleted file mode 100644
index f73facee0bc8adf5dae59d23a016b9cc5bb98b50..0000000000000000000000000000000000000000
--- a/lib/common/config/screen.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.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;
-
-  const ScreenItem({
-    required this.code,
-    required this.icon,
-    required this.screen,
-  });
-}
-
-class Screen {
-  static const indexActivity = 0;
-  static const screenActivity = ScreenItem(
-    code: 'screen_activity',
-    icon: Icon(UniconsLine.home),
-    screen: ScreenActivity(),
-  );
-
-  static const indexSettings = 1;
-  static const screenSettings = ScreenItem(
-    code: 'screen_settings',
-    icon: Icon(UniconsLine.setting),
-    screen: ScreenSettings(),
-  );
-
-  static const indexAbout = 2;
-  static const screenAbout = ScreenItem(
-    code: 'screen_about',
-    icon: Icon(UniconsLine.info_circle),
-    screen: ScreenAbout(),
-  );
-
-  static Map<int, ScreenItem> items = {
-    indexActivity: screenActivity,
-    indexSettings: screenSettings,
-    indexAbout: screenAbout,
-  };
-
-  static bool isIndexAllowed(int screenIndex) {
-    return items.keys.contains(screenIndex);
-  }
-
-  static Widget getWidget(int screenIndex) {
-    return items[screenIndex]?.screen ?? screenActivity.screen;
-  }
-}
diff --git a/lib/common/cubit/nav/nav_cubit_pages.dart b/lib/common/cubit/nav/nav_cubit_pages.dart
deleted file mode 100644
index 9ad7c65d866afaba35f0bfe6ad0521488d58e90c..0000000000000000000000000000000000000000
--- a/lib/common/cubit/nav/nav_cubit_pages.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:scrobbles/common/config/activity_page.dart';
-
-class NavCubitPage extends HydratedCubit<int> {
-  NavCubitPage() : super(0);
-
-  void updateIndex(int index) {
-    if (ActivityPage.isIndexAllowed(index)) {
-      emit(index);
-    } else {
-      emit(ActivityPage.indexHome);
-    }
-  }
-
-  void goToPageHome() {
-    updateIndex(ActivityPage.indexHome);
-  }
-
-  @override
-  int fromJson(Map<String, dynamic> json) {
-    return ActivityPage.indexHome;
-  }
-
-  @override
-  Map<String, dynamic>? toJson(int state) {
-    return <String, int>{'index': state};
-  }
-}
diff --git a/lib/common/cubit/nav/nav_cubit_screens.dart b/lib/common/cubit/nav/nav_cubit_screens.dart
deleted file mode 100644
index 77f3b613f72ab3cf724835b96f755abd8d411538..0000000000000000000000000000000000000000
--- a/lib/common/cubit/nav/nav_cubit_screens.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:scrobbles/common/config/screen.dart';
-
-class NavCubitScreen extends HydratedCubit<int> {
-  NavCubitScreen() : super(0);
-
-  void updateIndex(int index) {
-    if (Screen.isIndexAllowed(index)) {
-      emit(index);
-    } else {
-      goToScreenActivity();
-    }
-  }
-
-  void goToScreenActivity() {
-    emit(Screen.indexActivity);
-  }
-
-  void goToScreenSettings() {
-    emit(Screen.indexSettings);
-  }
-
-  void goToScreenAbout() {
-    emit(Screen.indexAbout);
-  }
-
-  @override
-  int fromJson(Map<String, dynamic> json) {
-    return Screen.indexActivity;
-  }
-
-  @override
-  Map<String, dynamic>? toJson(int state) {
-    return <String, int>{'index': state};
-  }
-}
diff --git a/lib/common/ui/nav/bottom_nav_bar.dart b/lib/common/ui/nav/bottom_nav_bar.dart
deleted file mode 100644
index 9449caf4ca9dda4cd4386968cde0456d607c82fe..0000000000000000000000000000000000000000
--- a/lib/common/ui/nav/bottom_nav_bar.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-import 'package:flutter_swipe/flutter_swipe.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,
-    this.swipeController,
-  });
-
-  final SwiperController? swipeController;
-
-  @override
-  Widget build(BuildContext context) {
-    return Card(
-      margin: const EdgeInsets.all(0),
-      elevation: 4,
-      shadowColor: Theme.of(context).colorScheme.shadow,
-      color: Theme.of(context).colorScheme.surfaceContainerHighest,
-      shape: const ContinuousRectangleBorder(),
-      child: BlocBuilder<NavCubitPage, int>(
-        builder: (BuildContext context, int pageIndex) {
-          final List<BottomNavigationBarItem> items = [];
-
-          ActivityPage.items.forEach((int pageIndex, ActivityPageItem item) {
-            items.add(BottomNavigationBarItem(
-              icon: item.icon,
-              label: tr(item.code),
-            ));
-          });
-
-          return BottomNavigationBar(
-            currentIndex: pageIndex,
-            onTap: (int index) {
-              BlocProvider.of<NavCubitPage>(context).updateIndex(index);
-              swipeController?.move(index);
-            },
-            type: BottomNavigationBarType.fixed,
-            elevation: 0,
-            backgroundColor: Colors.transparent,
-            selectedItemColor: Theme.of(context).colorScheme.primary,
-            unselectedItemColor: Theme.of(context).textTheme.bodySmall!.color,
-            items: items,
-          );
-        },
-      ),
-    );
-  }
-}
diff --git a/lib/common/ui/nav/global_app_bar.dart b/lib/common/ui/nav/global_app_bar.dart
deleted file mode 100644
index 9fc602b870f9a12d2fb2fc29eb2e707e9ce510c3..0000000000000000000000000000000000000000
--- a/lib/common/ui/nav/global_app_bar.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.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});
-
-  @override
-  Widget build(BuildContext context) {
-    return BlocBuilder<NavCubitScreen, int>(
-      builder: (BuildContext context, int screenIndex) {
-        final List<Widget> menuActions = [];
-
-        if (screenIndex == Screen.indexActivity) {
-          // go to Settings page
-          menuActions.add(IconButton(
-            onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToScreenSettings();
-            },
-            icon: Screen.screenSettings.icon,
-          ));
-
-          // go to About page
-          menuActions.add(IconButton(
-            onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToScreenAbout();
-            },
-            icon: Screen.screenAbout.icon,
-          ));
-
-          // refresh data
-          menuActions.add(IconButton(
-            onPressed: () {
-              BlocProvider.of<DataCountsByDayCubit>(context).refresh(context);
-              BlocProvider.of<DataCountsByHourCubit>(context).refresh(context);
-              BlocProvider.of<DataDiscoveriesCubit>(context).refresh(context);
-              BlocProvider.of<DataHeatmapCubit>(context).refresh(context);
-              BlocProvider.of<DataNewArtistsCubit>(context).refresh(context);
-              BlocProvider.of<DataNewTracksCubit>(context).refresh(context);
-              BlocProvider.of<DataStatisticsGlobalCubit>(context).refresh(context);
-              BlocProvider.of<DataStatisticsRecentCubit>(context).refresh(context);
-              BlocProvider.of<DataTimelineCubit>(context).refresh(context);
-              BlocProvider.of<DataTopArtistsCubit>(context).refresh(context);
-            },
-            icon: const Icon(UniconsSolid.refresh),
-          ));
-        } else {
-          // back to Home page
-          menuActions.add(IconButton(
-            onPressed: () {
-              BlocProvider.of<NavCubitScreen>(context).goToScreenActivity();
-              BlocProvider.of<NavCubitPage>(context).goToPageHome();
-            },
-            icon: 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/common/ui/screens/about.dart b/lib/common/ui/screens/about.dart
deleted file mode 100644
index f7a14a9a7e574a7b6f9ed181f38d08ba8c2285fe..0000000000000000000000000000000000000000
--- a/lib/common/ui/screens/about.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-class ScreenAbout extends StatelessWidget {
-  const ScreenAbout({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return Padding(
-      padding: const EdgeInsets.symmetric(horizontal: 8),
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.start,
-        crossAxisAlignment: CrossAxisAlignment.start,
-        mainAxisSize: MainAxisSize.max,
-        children: <Widget>[
-          const SizedBox(height: 8),
-          const AppTitle(text: 'about_title'),
-          const Text('about_content').tr(),
-          FutureBuilder<PackageInfo>(
-            future: PackageInfo.fromPlatform(),
-            builder: (context, snapshot) {
-              switch (snapshot.connectionState) {
-                case ConnectionState.done:
-                  return const Text('about_version').tr(
-                    namedArgs: {
-                      'version': snapshot.data!.version,
-                    },
-                  );
-                default:
-                  return const SizedBox();
-              }
-            },
-          ),
-        ],
-      ),
-    );
-  }
-}
diff --git a/lib/common/ui/screens/activity.dart b/lib/common/ui/screens/activity.dart
deleted file mode 100644
index 7eeb5faac7eda65d7a38b1abc0f4b0085c8c4e5f..0000000000000000000000000000000000000000
--- a/lib/common/ui/screens/activity.dart
+++ /dev/null
@@ -1,39 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-import 'package:flutter_swipe/flutter_swipe.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});
-
-  @override
-  Widget build(BuildContext context) {
-    return BlocBuilder<NavCubitPage, int>(
-      builder: (BuildContext context, int pageIndex) {
-        return Swiper(
-          itemCount: Screen.items.length,
-          itemBuilder: (BuildContext context, int pageIndex) {
-            return ActivityPage.getWidget(pageIndex);
-          },
-          pagination: SwiperPagination(
-            margin: const EdgeInsets.all(0),
-            builder: SwiperCustomPagination(
-              builder: (BuildContext context, SwiperPluginConfig config) {
-                return BottomNavBar(swipeController: config.controller);
-              },
-            ),
-          ),
-          onIndexChanged: (newPageIndex) {
-            BlocProvider.of<NavCubitPage>(context).updateIndex(newPageIndex);
-          },
-          outer: true,
-          loop: false,
-        );
-      },
-    );
-  }
-}
diff --git a/lib/common/ui/screens/settings.dart b/lib/common/ui/screens/settings.dart
deleted file mode 100644
index bd02cded6845db72d9f4ff6659ea5b426d1a5ac0..0000000000000000000000000000000000000000
--- a/lib/common/ui/screens/settings.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:scrobbles/common/ui/settings/settings_form.dart';
-
-class ScreenSettings extends StatelessWidget {
-  const ScreenSettings({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return ListView(
-      padding: const EdgeInsets.symmetric(horizontal: 4),
-      physics: const BouncingScrollPhysics(),
-      children: <Widget>[
-        const SizedBox(height: 8),
-        AppTitle(text: tr('settings_title')),
-        const SettingsForm(),
-      ],
-    );
-  }
-}
diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart
index f1f6704d1f41c526f3146fc5de51f3ad86a92045..7cfbb9106d2913196a0154b4fc51eeeac73b3907 100644
--- a/lib/config/application_config.dart
+++ b/lib/config/application_config.dart
@@ -1,9 +1,22 @@
 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/cubit/nav/nav_cubit_pages.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/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';
 
 class ApplicationConfig {
   static const String parameterCodeDistributionDaysCount = 'distribution-days-count';
@@ -49,6 +62,11 @@ class ApplicationConfig {
     ),
   ];
 
+  // activity pages
+  static const int activityPageIndexHome = 0;
+  static const int activityPageIndexDiscoveries = 1;
+  static const int activityPageIndexStatistics = 2;
+
   static final ApplicationConfigDefinition config = ApplicationConfigDefinition(
     appTitle: 'Scrobbles',
     activitySettings: [
@@ -94,11 +112,102 @@ class ApplicationConfig {
         values: allowedDaysCountValues,
       ),
     ],
+    autoStartActivity: true,
     startNewActivity: (BuildContext context) {
       BlocProvider.of<ActivityCubit>(context).startNewActivity(context);
-      BlocProvider.of<NavCubitPage>(context).goToPageHome();
+      BlocProvider.of<NavCubitPage>(context).updateIndex(activityPageIndexHome);
     },
+    quitCurrentActivity: (BuildContext context) {},
     deleteCurrentActivity: (BuildContext context) {},
     resumeActivity: (BuildContext context) {},
+    navigation: ApplicationNavigation(
+      screenActivity: ScreenItem(
+        code: 'screen_activity',
+        icon: Icon(UniconsLine.home),
+        screen: ({required ApplicationConfigDefinition appConfig}) =>
+            ScreenActivity(appConfig: appConfig),
+      ),
+      screenSettings: ScreenItem(
+        code: 'screen_settings',
+        icon: Icon(UniconsLine.setting),
+        screen: ({required ApplicationConfigDefinition appConfig}) => SettingsForm(),
+      ),
+      screenAbout: ScreenItem(
+        code: 'screen_about',
+        icon: Icon(UniconsLine.info_circle),
+        screen: ({required ApplicationConfigDefinition appConfig}) => ScreenAbout(),
+      ),
+      appBarConfiguration: AppBarConfiguration(
+        hideQuitActivityButton: true,
+        topBarButtonsBuilder: (context) => [
+          // Go to Settings page
+          AppBarButton(
+            onPressed: (BuildContext context) =>
+                BlocProvider.of<NavCubitScreen>(context).goToScreenSettings(),
+            icon: ApplicationConfig.config.navigation.screenSettings.icon,
+          ),
+
+          // Back to Home page
+          AppBarButton(
+            onPressed: (BuildContext context) =>
+                BlocProvider.of<NavCubitScreen>(context).goToScreenActivity(),
+            icon: ApplicationConfig.config.navigation.screenActivity.icon,
+          ),
+
+          // Refresh data
+          AppBarButton(
+            onPressed: (BuildContext context) {
+              BlocProvider.of<DataCountsByDayCubit>(context).refresh(context);
+              BlocProvider.of<DataCountsByHourCubit>(context).refresh(context);
+              BlocProvider.of<DataDiscoveriesCubit>(context).refresh(context);
+              BlocProvider.of<DataHeatmapCubit>(context).refresh(context);
+              BlocProvider.of<DataNewArtistsCubit>(context).refresh(context);
+              BlocProvider.of<DataNewTracksCubit>(context).refresh(context);
+              BlocProvider.of<DataStatisticsGlobalCubit>(context).refresh(context);
+              BlocProvider.of<DataStatisticsRecentCubit>(context).refresh(context);
+              BlocProvider.of<DataTimelineCubit>(context).refresh(context);
+              BlocProvider.of<DataTopArtistsCubit>(context).refresh(context);
+            },
+            icon: const Icon(UniconsSolid.refresh),
+          ),
+        ],
+      ),
+      displayBottomNavBar: true,
+      activityPages: {
+        activityPageIndexHome: ActivityPageItem(
+          code: 'page_home',
+          icon: Icon(UniconsLine.home),
+          builder: ({required ApplicationConfigDefinition appConfig}) {
+            return BlocBuilder<ActivityCubit, ActivityState>(
+              builder: (BuildContext context, ActivityState activityState) {
+                return PageHome();
+              },
+            );
+          },
+        ),
+        activityPageIndexDiscoveries: ActivityPageItem(
+          code: 'page_discoveries',
+          icon: Icon(UniconsLine.star),
+          builder: ({required ApplicationConfigDefinition appConfig}) {
+            return BlocBuilder<ActivityCubit, ActivityState>(
+              builder: (BuildContext context, ActivityState activityState) {
+                return PageDiscoveries();
+              },
+            );
+          },
+        ),
+        activityPageIndexStatistics: ActivityPageItem(
+          code: 'page_statistics',
+          icon: Icon(UniconsLine.star),
+          builder: ({required ApplicationConfigDefinition appConfig}) {
+            return BlocBuilder<ActivityCubit, ActivityState>(
+              builder: (BuildContext context, ActivityState activityState) {
+                return PageStatistics();
+              },
+            );
+          },
+        ),
+      },
+    ),
   );
 }
diff --git a/lib/main.dart b/lib/main.dart
index 06168fd7a9b34b8866fb100f7d343a6b9d0fb639..35984999ed72ecc7a344c472952215503582546d 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -4,9 +4,6 @@ import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.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';
@@ -55,7 +52,7 @@ class MyApp extends StatelessWidget {
       providers: [
         // default providers
         BlocProvider<NavCubitPage>(
-          create: (context) => NavCubitPage(),
+          create: (context) => NavCubitPage(appConfig: ApplicationConfig.config),
         ),
         BlocProvider<NavCubitScreen>(
           create: (context) => NavCubitScreen(),
diff --git a/lib/common/ui/pages/discoveries.dart b/lib/ui/pages/discoveries.dart
similarity index 100%
rename from lib/common/ui/pages/discoveries.dart
rename to lib/ui/pages/discoveries.dart
diff --git a/lib/common/ui/pages/home.dart b/lib/ui/pages/home.dart
similarity index 100%
rename from lib/common/ui/pages/home.dart
rename to lib/ui/pages/home.dart
diff --git a/lib/common/ui/pages/statistics.dart b/lib/ui/pages/statistics.dart
similarity index 100%
rename from lib/common/ui/pages/statistics.dart
rename to lib/ui/pages/statistics.dart
diff --git a/lib/common/ui/settings/settings_form.dart b/lib/ui/settings/settings_form.dart
similarity index 91%
rename from lib/common/ui/settings/settings_form.dart
rename to lib/ui/settings/settings_form.dart
index 83acf816003928609c51c688a29168c06c135b88..e1d2639f15877db3d5a7a4d49030dc89a9868c9f 100644
--- a/lib/common/ui/settings/settings_form.dart
+++ b/lib/ui/settings/settings_form.dart
@@ -1,5 +1,14 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.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_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/config/application_config.dart';
 
@@ -161,6 +170,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataStatisticsRecentCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -188,6 +198,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataTimelineCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -215,6 +226,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataTopArtistsCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -242,6 +254,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataDiscoveriesCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -270,6 +283,9 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataCountsByDayCubit>(context).refresh(context);
+                BlocProvider.of<DataCountsByHourCubit>(context).refresh(context);
+                BlocProvider.of<DataHeatmapCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -300,6 +316,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataNewArtistsCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
@@ -327,6 +344,7 @@ class _SettingsFormState extends State<SettingsForm> {
                   }
                 });
                 saveSettings();
+                BlocProvider.of<DataNewTracksCubit>(context).refresh(context);
               },
               borderRadius: const BorderRadius.all(Radius.circular(8)),
               constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart
index 74f49653d2f8a50ab818a102be51d66f2129aff9..2ed7c6d75c7eca742f405842d723a893931c1345 100644
--- a/lib/ui/skeleton.dart
+++ b/lib/ui/skeleton.dart
@@ -1,11 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.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';
+import 'package:scrobbles/config/application_config.dart';
+import 'package:scrobbles/cubit/activity/activity_cubit.dart';
+import 'package:scrobbles/models/activity/activity.dart';
 
 class SkeletonScreen extends StatelessWidget {
   const SkeletonScreen({super.key});
@@ -14,22 +12,47 @@ class SkeletonScreen extends StatelessWidget {
   Widget build(BuildContext context) {
     return BlocBuilder<NavCubitScreen, int>(
       builder: (BuildContext context, int screenIndex) {
-        return Scaffold(
-          appBar: const GlobalAppBar(),
-          extendBodyBehindAppBar: false,
-          body: Material(
-            color: Theme.of(context).colorScheme.surface,
-            child: Padding(
-              padding: const EdgeInsets.only(
-                top: 8,
-                left: 2,
-                right: 2,
-              ),
-              child: Screen.getWidget(screenIndex),
-            ),
-          ),
-          backgroundColor: Theme.of(context).colorScheme.surface,
-          bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
+        return BlocBuilder<ActivityCubit, ActivityState>(
+          builder: (BuildContext context, ActivityState activityState) {
+            return BlocBuilder<NavCubitPage, int>(
+              builder: (BuildContext context, int pageIndex) {
+                final Activity currentActivity = activityState.currentActivity;
+
+                // autostart activity
+                if (ApplicationConfig.config.autoStartActivity &&
+                    (!currentActivity.isRunning)) {
+                  ApplicationConfig.config.startNewActivity(context);
+                }
+
+                return Scaffold(
+                  appBar: GlobalAppBar(
+                    appConfig: ApplicationConfig.config,
+                    pageIndex: pageIndex,
+                    isActivityRunning: currentActivity.isRunning,
+                  ),
+                  extendBodyBehindAppBar: false,
+                  body: Material(
+                    color: Theme.of(context).colorScheme.surface,
+                    child: Padding(
+                      padding: const EdgeInsets.only(
+                        top: 8,
+                        left: 2,
+                        right: 2,
+                      ),
+                      child: ApplicationConfig.config.navigation.getScreenWidget(
+                        appConfig: ApplicationConfig.config,
+                        screenIndex: screenIndex,
+                      ),
+                    ),
+                  ),
+                  backgroundColor: Theme.of(context).colorScheme.surface,
+                  bottomNavigationBar: ApplicationConfig.config.navigation.displayBottomNavBar
+                      ? BottomNavBar(appConfig: ApplicationConfig.config)
+                      : null,
+                );
+              },
+            );
+          },
         );
       },
     );
diff --git a/pubspec.lock b/pubspec.lock
index 91a1880b3b585fe144fe60ea4a1b0c5846eee77f..21a3edd49e1d4f684ae2b6019ad16046bee33244 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -130,11 +130,11 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "0.5.0"
-      resolved-ref: b8164a50489ba981ea57d9f02e2334f09cb8c6a7
+      ref: "0.6.0"
+      resolved-ref: dfe0f6b7b49f9aa32f085e4a5d3ea320b3611eed
       url: "https://git.harrault.fr/android/flutter-toolbox.git"
     source: git
-    version: "0.5.0"
+    version: "0.6.0"
   flutter_lints:
     dependency: "direct dev"
     description:
@@ -148,14 +148,6 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
-  flutter_swipe:
-    dependency: "direct main"
-    description:
-      name: flutter_swipe
-      sha256: dc6541bac3a0545ce15a3fa15913f6250532062960bf6b0ad4562d02f14a8545
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.1"
   flutter_web_plugins:
     dependency: transitive
     description: flutter
diff --git a/pubspec.yaml b/pubspec.yaml
index 9a265b5b1fc0dec12034468de4302f117a4b6995..abd616587dd94dccaadc4c972c6568f4c31c79a6 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: Display scrobbles data and charts
 
 publish_to: "none"
 
-version: 0.5.0+69
+version: 0.6.0+70
 
 environment:
   sdk: "^3.0.0"
@@ -16,11 +16,10 @@ dependencies:
   flutter_custom_toolbox:
     git:
       url: https://git.harrault.fr/android/flutter-toolbox.git
-      ref: 0.5.0
+      ref: 0.6.0
 
   # specific
   fl_chart: ^0.69.0
-  flutter_swipe: ^1.0.1
   http: ^1.1.0
   ionicons: ^0.2.2