diff --git a/fastlane/metadata/android/en-US/changelogs/40.txt b/fastlane/metadata/android/en-US/changelogs/40.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c20ed39173f1690cb6181457fe5d4c6cc0a061ab
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40.txt
@@ -0,0 +1 @@
+Use ActivityParameters widgets from flutter_custom_toolbox.
diff --git a/fastlane/metadata/android/fr-FR/changelogs/40.txt b/fastlane/metadata/android/fr-FR/changelogs/40.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f732ebd3738d66fdff72e28b0cf0bb4b0684e030
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/40.txt
@@ -0,0 +1 @@
+Utilisation des widgets ActivityParameters de flutter_custom_toolbox.
diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart
index 0c205d309a2a079da282c0adc2414e9c3863cc6a..ed5a485bb6743f50beb5fd4efabd6ee7aeb5e6c7 100644
--- a/lib/common/config/activity_page.dart
+++ b/lib/common/config/activity_page.dart
@@ -1,18 +1,20 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:momomotus/common/ui/pages/game.dart';
-import 'package:momomotus/common/ui/pages/parameters.dart';
+import 'package:momomotus/cubit/activity/activity_cubit.dart';
+import 'package:momomotus/config/application_config.dart';
+import 'package:momomotus/models/activity/activity.dart';
+import 'package:momomotus/ui/pages/game.dart';
 
 class ActivityPageItem {
   final String code;
   final Icon icon;
-  final Widget page;
+  final Widget Function({required Activity currentActivity})? builder;
 
   const ActivityPageItem({
     required this.code,
     required this.icon,
-    required this.page,
+    required this.builder,
   });
 }
 
@@ -20,20 +22,27 @@ class ActivityPage {
   static const bool displayBottomNavBar = false;
 
   static const indexHome = 0;
-  static const pageHome = ActivityPageItem(
+  static final ActivityPageItem pageHome = ActivityPageItem(
     code: 'page_home',
     icon: Icon(UniconsLine.home),
-    page: PageParameters(),
+    builder: ({required Activity currentActivity}) {
+      return PageParameters(
+        config: ApplicationConfig.config,
+        canBeResumed: currentActivity.canBeResumed,
+      );
+    },
   );
 
   static const indexGame = 1;
-  static const pageGame = ActivityPageItem(
+  static final pageGame = ActivityPageItem(
     code: 'page_game',
     icon: Icon(UniconsLine.star),
-    page: PageGame(),
+    builder: ({required Activity currentActivity}) {
+      return PageGame();
+    },
   );
 
-  static const Map<int, ActivityPageItem> items = {
+  static final Map<int, ActivityPageItem> items = {
     indexHome: pageHome,
     indexGame: pageGame,
   };
@@ -45,6 +54,16 @@ class ActivityPage {
   }
 
   static Widget getWidget(int pageIndex) {
-    return items[pageIndex]?.page ?? pageHome.page;
+    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/ui/pages/parameters.dart b/lib/common/ui/pages/parameters.dart
deleted file mode 100644
index cb92f50ef7a7d81eb6001a566da0a77474a497da..0000000000000000000000000000000000000000
--- a/lib/common/ui/pages/parameters.dart
+++ /dev/null
@@ -1,171 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/common/cubit/nav/nav_cubit_pages.dart';
-import 'package:momomotus/common/ui/parameters/parameter_widget.dart';
-
-import 'package:momomotus/config/default_activity_settings.dart';
-import 'package:momomotus/config/default_global_settings.dart';
-import 'package:momomotus/cubit/activity/activity_cubit.dart';
-import 'package:momomotus/cubit/settings/settings_activity_cubit.dart';
-import 'package:momomotus/cubit/settings/settings_global_cubit.dart';
-import 'package:momomotus/models/activity/activity.dart';
-
-class PageParameters extends StatelessWidget {
-  const PageParameters({super.key});
-
-  final double separatorHeight = 8.0;
-
-  @override
-  Widget build(BuildContext context) {
-    return BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>(
-      builder: (BuildContext context, ActivitySettingsState activitySettingsState) {
-        return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>(
-          builder: (BuildContext context, GlobalSettingsState globalSettingsState) {
-            return BlocBuilder<ActivityCubit, ActivityState>(
-              builder: (BuildContext context, ActivityState activityState) {
-                final Activity currentActivity = activityState.currentActivity;
-
-                final List<Widget> lines = [];
-
-                // Activity settings
-                for (String code in DefaultActivitySettings.availableParameters) {
-                  lines.add(Row(
-                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                    children: buildParametersLine(
-                      code: code,
-                      isGlobal: false,
-                    ),
-                  ));
-
-                  lines.add(SizedBox(height: separatorHeight));
-                }
-
-                lines.add(Expanded(
-                  child: SizedBox(height: separatorHeight),
-                ));
-
-                if (currentActivity.canBeResumed == false) {
-                  // Start new activity
-                  lines.add(
-                    AspectRatio(
-                      aspectRatio: 3,
-                      child: ActivityButtonStartNew(
-                        onPressed: () {
-                          BlocProvider.of<ActivityCubit>(context).startNewActivity(
-                            activitySettings: activitySettingsState.settings,
-                            globalSettings: globalSettingsState.settings,
-                          );
-                          BlocProvider.of<NavCubitPage>(context).goToPageGame();
-                        },
-                      ),
-                    ),
-                  );
-                } else {
-                  // Resume activity
-                  lines.add(AspectRatio(
-                    aspectRatio: 3,
-                    child: ActivityButtonResumeSaved(
-                      onPressed: () {
-                        BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
-                        BlocProvider.of<NavCubitPage>(context).goToPageGame();
-                      },
-                    ),
-                  ));
-                  // Delete saved activity
-                  lines.add(SizedBox.square(
-                    dimension: MediaQuery.of(context).size.width / 5,
-                    child: ActivityButtonDeleteSaved(
-                      onPressed: () {
-                        BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
-                      },
-                    ),
-                  ));
-                }
-
-                lines.add(SizedBox(height: separatorHeight));
-
-                // Global settings
-                for (String code in DefaultGlobalSettings.availableParameters) {
-                  lines.add(Row(
-                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                    children: buildParametersLine(
-                      code: code,
-                      isGlobal: true,
-                    ),
-                  ));
-
-                  lines.add(SizedBox(height: separatorHeight));
-                }
-
-                return Column(
-                  children: lines,
-                );
-              },
-            );
-          },
-        );
-      },
-    );
-  }
-
-  List<Widget> buildParametersLine({
-    required String code,
-    required bool isGlobal,
-  }) {
-    final List<Widget> parameterButtons = [];
-
-    final List<String> availableValues = isGlobal
-        ? DefaultGlobalSettings.getAvailableValues(code)
-        : DefaultActivitySettings.getAvailableValues(code);
-
-    if (availableValues.length <= 1) {
-      return [];
-    }
-
-    for (String value in availableValues) {
-      final Widget parameterButton = BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>(
-        builder: (BuildContext context, ActivitySettingsState activitySettingsState) {
-          return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>(
-            builder: (BuildContext context, GlobalSettingsState globalSettingsState) {
-              final ActivitySettingsCubit activitySettingsCubit =
-                  BlocProvider.of<ActivitySettingsCubit>(context);
-              final GlobalSettingsCubit globalSettingsCubit =
-                  BlocProvider.of<GlobalSettingsCubit>(context);
-
-              final String currentValue = isGlobal
-                  ? globalSettingsCubit.getParameterValue(code)
-                  : activitySettingsCubit.getParameterValue(code);
-
-              final bool isSelected = (value == currentValue);
-
-              final double displayWidth = MediaQuery.of(context).size.width;
-              final double itemWidth = displayWidth / availableValues.length - 4;
-
-              return SizedBox.square(
-                dimension: itemWidth,
-                child: ParameterWidget(
-                  code: code,
-                  value: value,
-                  isSelected: isSelected,
-                  size: itemWidth,
-                  activitySettings: activitySettingsState.settings,
-                  globalSettings: globalSettingsState.settings,
-                  onPressed: () {
-                    isGlobal
-                        ? globalSettingsCubit.setParameterValue(code, value)
-                        : activitySettingsCubit.setParameterValue(code, value);
-                  },
-                ),
-              );
-            },
-          );
-        },
-      );
-
-      parameterButtons.add(parameterButton);
-    }
-
-    return parameterButtons;
-  }
-}
diff --git a/lib/common/ui/parameters/parameter_painter.dart b/lib/common/ui/parameters/parameter_painter.dart
deleted file mode 100644
index 486bfaad3cfc5bb511125944f0f97034e0efc125..0000000000000000000000000000000000000000
--- a/lib/common/ui/parameters/parameter_painter.dart
+++ /dev/null
@@ -1,217 +0,0 @@
-import 'dart:math';
-
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/config/default_activity_settings.dart';
-import 'package:momomotus/models/settings/settings_activity.dart';
-import 'package:momomotus/models/settings/settings_global.dart';
-
-class ParameterPainter extends CustomPainter {
-  const ParameterPainter({
-    required this.code,
-    required this.value,
-    required this.activitySettings,
-    required this.globalSettings,
-  });
-
-  final String code;
-  final String value;
-  final ActivitySettings activitySettings;
-  final GlobalSettings globalSettings;
-
-  @override
-  void paint(Canvas canvas, Size size) {
-    // force square
-    final double canvasSize = min(size.width, size.height);
-
-    // content
-    switch (code) {
-      case DefaultActivitySettings.parameterCodeLang:
-        paintLangParameterItem(canvas, canvasSize);
-        break;
-      case DefaultActivitySettings.parameterCodeLength:
-        paintLengthParameterItem(canvas, canvasSize);
-        break;
-      case DefaultActivitySettings.parameterCodeLevel:
-        paintLevelParameterItem(canvas, canvasSize);
-        break;
-      default:
-        printlog('Unknown parameter: $code/$value');
-        paintUnknownParameterItem(canvas, canvasSize);
-    }
-  }
-
-  @override
-  bool shouldRepaint(CustomPainter oldDelegate) {
-    return false;
-  }
-
-  // "unknown" parameter -> simple block with text
-  void paintUnknownParameterItem(
-    final Canvas canvas,
-    final double size,
-  ) {
-    final paint = Paint();
-    paint.strokeJoin = StrokeJoin.round;
-    paint.strokeWidth = 3;
-
-    final textSpan = TextSpan(
-      text: '$code\n$value',
-      style: const TextStyle(
-        color: Colors.black,
-        fontSize: 18,
-        fontWeight: FontWeight.bold,
-      ),
-    );
-    final textPainter = TextPainter(
-      text: textSpan,
-      textDirection: TextDirection.ltr,
-      textAlign: TextAlign.center,
-    );
-    textPainter.layout();
-    textPainter.paint(
-      canvas,
-      Offset(
-        (size - textPainter.width) * 0.5,
-        (size - textPainter.height) * 0.5,
-      ),
-    );
-  }
-
-  void paintLangParameterItem(
-    final Canvas canvas,
-    final double size,
-  ) {
-    const itemCountEmoji = '💬\n';
-
-    String text = '';
-
-    switch (value) {
-      case DefaultActivitySettings.lengthValue4:
-        text = '⭐';
-        break;
-      case DefaultActivitySettings.lengthValue5:
-        text = itemCountEmoji + DefaultActivitySettings.lengthValue5.toString();
-        break;
-      case DefaultActivitySettings.lengthValue6:
-        text = itemCountEmoji + DefaultActivitySettings.lengthValue6.toString();
-        break;
-      case DefaultActivitySettings.lengthValue7:
-        text = itemCountEmoji + DefaultActivitySettings.lengthValue7.toString();
-        break;
-      default:
-        printlog('Wrong value for lang parameter value: $value');
-        return;
-    }
-
-    final paint = Paint();
-    paint.strokeJoin = StrokeJoin.round;
-    paint.strokeWidth = 3 / 100 * size;
-
-    // centered text value
-    final textSpan = TextSpan(
-      text: text,
-      style: TextStyle(
-        color: Colors.black,
-        fontSize: size / 2.6,
-        fontWeight: FontWeight.bold,
-      ),
-    );
-    final textPainter = TextPainter(
-      text: textSpan,
-      textDirection: TextDirection.ltr,
-      textAlign: TextAlign.center,
-    );
-    textPainter.layout();
-    textPainter.paint(
-      canvas,
-      Offset(
-        (size - textPainter.width) * 0.5,
-        (size - textPainter.height) * 0.5,
-      ),
-    );
-  }
-
-  void paintLengthParameterItem(
-    final Canvas canvas,
-    final double size,
-  ) {
-    const itemCountEmoji = '💬\n';
-
-    final String text = itemCountEmoji + value.toString();
-
-    final paint = Paint();
-    paint.strokeJoin = StrokeJoin.round;
-    paint.strokeWidth = 3 / 100 * size;
-
-    // centered text value
-    final textSpan = TextSpan(
-      text: text,
-      style: TextStyle(
-        color: Colors.black,
-        fontSize: size / 2.6,
-        fontWeight: FontWeight.bold,
-      ),
-    );
-    final textPainter = TextPainter(
-      text: textSpan,
-      textDirection: TextDirection.ltr,
-      textAlign: TextAlign.center,
-    );
-    textPainter.layout();
-    textPainter.paint(
-      canvas,
-      Offset(
-        (size - textPainter.width) * 0.5,
-        (size - textPainter.height) * 0.5,
-      ),
-    );
-  }
-
-  void paintLevelParameterItem(
-    final Canvas canvas,
-    final double size,
-  ) {
-    String text = '';
-
-    switch (value) {
-      case DefaultActivitySettings.levelValueEasy:
-        text = '🧒';
-        break;
-      case DefaultActivitySettings.levelValueNormal:
-        text = '🤯';
-        break;
-      default:
-        printlog('Wrong value for level parameter value: $value');
-        return;
-    }
-
-    final paint = Paint();
-    paint.strokeJoin = StrokeJoin.round;
-    paint.strokeWidth = 3;
-
-    // centered text value
-    final textSpan = TextSpan(
-      text: text,
-      style: TextStyle(
-        color: Colors.black,
-        fontSize: size / 2.6,
-        fontWeight: FontWeight.bold,
-      ),
-    );
-    final textPainter = TextPainter(
-      text: textSpan,
-      textDirection: TextDirection.ltr,
-      textAlign: TextAlign.center,
-    );
-    textPainter.layout();
-    textPainter.paint(
-      canvas,
-      Offset(
-        (size - textPainter.width) * 0.5,
-        (size - textPainter.height) * 0.5,
-      ),
-    );
-  }
-}
diff --git a/lib/common/ui/parameters/parameter_widget.dart b/lib/common/ui/parameters/parameter_widget.dart
deleted file mode 100644
index 1f743d28b01391da5702d9223c86c2df72081cd6..0000000000000000000000000000000000000000
--- a/lib/common/ui/parameters/parameter_widget.dart
+++ /dev/null
@@ -1,200 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/common/ui/parameters/parameter_painter.dart';
-
-import 'package:momomotus/config/default_activity_settings.dart';
-import 'package:momomotus/config/default_global_settings.dart';
-import 'package:momomotus/models/settings/settings_activity.dart';
-import 'package:momomotus/models/settings/settings_global.dart';
-
-class ParameterWidget extends StatelessWidget {
-  const ParameterWidget({
-    super.key,
-    required this.code,
-    required this.value,
-    required this.isSelected,
-    required this.size,
-    required this.activitySettings,
-    required this.globalSettings,
-    required this.onPressed,
-  });
-
-  final String code;
-  final String value;
-  final bool isSelected;
-  final double size;
-  final ActivitySettings activitySettings;
-  final GlobalSettings globalSettings;
-  final VoidCallback onPressed;
-
-  static const Color buttonColorActive = Colors.blue;
-  static const Color buttonColorInactive = Colors.white;
-  static const double buttonBorderWidth = 4.0;
-  static const double buttonBorderRadius = 12.0;
-
-  @override
-  Widget build(BuildContext context) {
-    Widget content = const SizedBox.shrink();
-
-    switch (code) {
-      case DefaultActivitySettings.parameterCodeLang:
-        content = getLangParameterItem();
-        break;
-      case DefaultActivitySettings.parameterCodeLength:
-        content = getLengthParameterItem();
-        break;
-      case DefaultActivitySettings.parameterCodeLevel:
-        content = getLevelParameterItem();
-        break;
-      case DefaultGlobalSettings.parameterCodeSkin:
-        content = getSkinParameterItem();
-        break;
-      default:
-        printlog('Unknown parameter: $code/$value');
-        content = getUnknownParameterItem();
-    }
-
-    final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive;
-
-    return Container(
-      decoration: BoxDecoration(
-        color: buttonColor,
-        borderRadius: BorderRadius.circular(buttonBorderRadius),
-        border: Border.all(
-          color: buttonColor,
-          width: buttonBorderWidth,
-        ),
-      ),
-      child: content,
-    );
-  }
-
-  // "unknown" parameter -> simple block with text
-  Widget getUnknownParameterItem() {
-    return StyledButton.text(
-      caption: '$code / $value',
-      color: Colors.grey,
-      onPressed: null,
-    );
-  }
-
-  Widget getLangParameterItem() {
-    Color backgroundColor = Colors.grey;
-
-    switch (value) {
-      case DefaultActivitySettings.lengthValue4:
-        backgroundColor = Colors.grey;
-        break;
-      case DefaultActivitySettings.lengthValue5:
-        backgroundColor = Colors.green;
-        break;
-      case DefaultActivitySettings.lengthValue6:
-        backgroundColor = Colors.orange;
-        break;
-      case DefaultActivitySettings.lengthValue7:
-        backgroundColor = Colors.red;
-        break;
-      default:
-        printlog('Wrong value for lang parameter value: $value');
-    }
-
-    return StyledButton(
-      color: backgroundColor,
-      onPressed: onPressed,
-      child: CustomPaint(
-        size: Size(size, size),
-        willChange: false,
-        painter: ParameterPainter(
-          code: code,
-          value: value,
-          activitySettings: activitySettings,
-          globalSettings: globalSettings,
-        ),
-        isComplex: true,
-      ),
-    );
-  }
-
-  Widget getLengthParameterItem() {
-    Color backgroundColor = Colors.grey;
-
-    switch (value) {
-      case DefaultActivitySettings.lengthValue4:
-        backgroundColor = Colors.green;
-        break;
-      case DefaultActivitySettings.lengthValue5:
-        backgroundColor = Colors.yellow;
-        break;
-      case DefaultActivitySettings.lengthValue6:
-        backgroundColor = Colors.orange;
-        break;
-      case DefaultActivitySettings.lengthValue7:
-        backgroundColor = Colors.red;
-        break;
-      case DefaultActivitySettings.lengthValue8:
-        backgroundColor = Colors.purple;
-        break;
-      default:
-        printlog('Wrong value for length parameter value: $value');
-    }
-
-    return StyledButton(
-      color: backgroundColor,
-      onPressed: onPressed,
-      child: CustomPaint(
-        size: Size(size, size),
-        willChange: false,
-        painter: ParameterPainter(
-          code: code,
-          value: value,
-          activitySettings: activitySettings,
-          globalSettings: globalSettings,
-        ),
-        isComplex: true,
-      ),
-    );
-  }
-
-  Widget getLevelParameterItem() {
-    Color backgroundColor = Colors.grey;
-
-    switch (value) {
-      case DefaultActivitySettings.levelValueEasy:
-        backgroundColor = Colors.green;
-        break;
-      case DefaultActivitySettings.levelValueNormal:
-        backgroundColor = Colors.orange;
-        break;
-      default:
-        printlog('Wrong value for level parameter value: $value');
-    }
-
-    return StyledButton(
-      color: backgroundColor,
-      onPressed: onPressed,
-      child: CustomPaint(
-        size: Size(size, size),
-        willChange: false,
-        painter: ParameterPainter(
-          code: code,
-          value: value,
-          activitySettings: activitySettings,
-          globalSettings: globalSettings,
-        ),
-        isComplex: true,
-      ),
-    );
-  }
-
-  Widget getSkinParameterItem() {
-    return StyledButton(
-      color: Colors.green.shade800,
-      onPressed: onPressed,
-      child: Image(
-        image: AssetImage('assets/ui/${DefaultGlobalSettings.parameterCodeSkin}_$value.png'),
-        fit: BoxFit.fill,
-      ),
-    );
-  }
-}
diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart
index 154334c45f6cbc34be6b62f40f138947ee65dee8..c3cc4030d28be8a58ca0ce47df488966bd4e207b 100644
--- a/lib/config/application_config.dart
+++ b/lib/config/application_config.dart
@@ -1,3 +1,120 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:momomotus/common/cubit/nav/nav_cubit_pages.dart';
+
+import 'package:momomotus/cubit/activity/activity_cubit.dart';
+import 'package:momomotus/ui/parameters/parameter_painter_difficulty_level.dart';
+
 class ApplicationConfig {
-  static const String appTitle = 'Momomotus';
+  static const String parameterCodeSkin = 'global.skin';
+  static const String parameterCodeLang = 'activity.lang';
+  static const String parameterCodeWordLength = 'activity.wordLength';
+  static const String parameterCodeDifficultyLevel = 'activity.difficultyLevel';
+
+  static const String skinValueDefault = 'default';
+
+  static const String langValueFr = 'fr';
+
+  static const String wordLengthValue4 = '4';
+  static const String wordLengthValue5 = '5';
+  static const String wordLengthValue6 = '6';
+  static const String wordLengthValue7 = '7';
+  static const String wordLengthValue8 = '8';
+
+  static const String difficultyLevelValueEasy = 'easy';
+  static const String difficultyLevelValueNormal = 'normal';
+
+  static const int maxGuessesCount = 7;
+
+  static final ApplicationConfigDefinition config = ApplicationConfigDefinition(
+    appTitle: 'Momomotus',
+    activitySettings: [
+      // skin
+      ApplicationSettingsParameter(
+        code: parameterCodeSkin,
+        values: [
+          ApplicationSettingsParameterItemValue(
+            value: skinValueDefault,
+            isDefault: true,
+          ),
+        ],
+      ),
+
+      // lang
+      ApplicationSettingsParameter(
+        code: parameterCodeLang,
+        values: [
+          ApplicationSettingsParameterItemValue(
+            value: langValueFr,
+            isDefault: true,
+          ),
+        ],
+      ),
+
+      // word length
+      ApplicationSettingsParameter(
+        code: parameterCodeWordLength,
+        values: [
+          ApplicationSettingsParameterItemValue(
+            value: wordLengthValue4,
+            color: Colors.green,
+            text: '4️⃣',
+          ),
+          ApplicationSettingsParameterItemValue(
+            value: wordLengthValue5,
+            color: Colors.yellow,
+            text: '5️⃣',
+            isDefault: true,
+          ),
+          ApplicationSettingsParameterItemValue(
+            value: wordLengthValue6,
+            color: Colors.orange,
+            text: '6️⃣',
+          ),
+          ApplicationSettingsParameterItemValue(
+            value: wordLengthValue7,
+            color: Colors.red,
+            text: '7️⃣',
+          ),
+          ApplicationSettingsParameterItemValue(
+            value: wordLengthValue8,
+            color: Colors.purple,
+            text: '8️⃣',
+          ),
+        ],
+      ),
+
+      // difficulty level
+      ApplicationSettingsParameter(
+        code: parameterCodeDifficultyLevel,
+        values: [
+          ApplicationSettingsParameterItemValue(
+            value: difficultyLevelValueEasy,
+            color: Colors.green,
+            isDefault: true,
+          ),
+          ApplicationSettingsParameterItemValue(
+            value: difficultyLevelValueNormal,
+            color: Colors.orange,
+          ),
+        ],
+        customPainter: (context, value) => ParameterPainterDifficultyLevel(
+          context: context,
+          value: value,
+        ),
+      ),
+    ],
+    startNewActivity: (BuildContext context) {
+      BlocProvider.of<ActivityCubit>(context).startNewActivity(context);
+      BlocProvider.of<NavCubitPage>(context).goToPageGame();
+    },
+    deleteCurrentActivity: (BuildContext context) {
+      BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
+    },
+    resumeActivity: (BuildContext context) {
+      BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
+      BlocProvider.of<NavCubitPage>(context).goToPageGame();
+    },
+  );
 }
diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart
deleted file mode 100644
index 5aeefcb929e0a2d3f907f6bede58d5c31e0f3db1..0000000000000000000000000000000000000000
--- a/lib/config/default_activity_settings.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-class DefaultActivitySettings {
-  // available game parameters codes
-  static const String parameterCodeLang = 'lang';
-  static const String parameterCodeLength = 'length';
-  static const String parameterCodeLevel = 'level';
-  static const List<String> availableParameters = [
-    parameterCodeLang,
-    parameterCodeLength,
-    parameterCodeLevel,
-  ];
-
-  // lang: available values
-  static const String langValueFr = 'fr';
-  static const List<String> allowedLangValues = [
-    langValueFr,
-  ];
-  // lang: default value
-  static const String defaultLangValue = langValueFr;
-
-  // length: available values
-  static const String lengthValue4 = '4';
-  static const String lengthValue5 = '5';
-  static const String lengthValue6 = '6';
-  static const String lengthValue7 = '7';
-  static const String lengthValue8 = '8';
-  static const List<String> allowedLengthValues = [
-    lengthValue4,
-    lengthValue5,
-    lengthValue6,
-    lengthValue7,
-    lengthValue8,
-  ];
-  // length: default value
-  static const String defaultLengthValue = lengthValue5;
-
-  // level: available values
-  static const String levelValueEasy = 'easy';
-  static const String levelValueNormal = 'normal';
-  static const List<String> allowedLevelValues = [
-    levelValueEasy,
-    levelValueNormal,
-  ];
-  // level: default value
-  static const String defaultLevelValue = levelValueEasy;
-
-  // available values from parameter code
-  static List<String> getAvailableValues(String parameterCode) {
-    switch (parameterCode) {
-      case parameterCodeLang:
-        return DefaultActivitySettings.allowedLangValues;
-      case parameterCodeLength:
-        return DefaultActivitySettings.allowedLengthValues;
-      case parameterCodeLevel:
-        return DefaultActivitySettings.allowedLevelValues;
-    }
-
-    printlog('Did not find any available value for game parameter "$parameterCode".');
-    return [];
-  }
-
-  static const int maxGuessesCount = 7;
-}
diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart
deleted file mode 100644
index d92229c2e02064684ed4a2caeb272ff63325776a..0000000000000000000000000000000000000000
--- a/lib/config/default_global_settings.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-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 [];
-  }
-}
diff --git a/lib/cubit/activity/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart
index 0970da610428431e78dad92dd446583120ff81e4..e2a2e61bb6fb1892483e232928eb1af97154423f 100644
--- a/lib/cubit/activity/activity_cubit.dart
+++ b/lib/cubit/activity/activity_cubit.dart
@@ -1,9 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
+import 'package:momomotus/config/application_config.dart';
 import 'package:momomotus/models/activity/activity.dart';
-import 'package:momomotus/models/settings/settings_activity.dart';
-import 'package:momomotus/models/settings/settings_global.dart';
 
 part 'activity_state.dart';
 
@@ -23,7 +22,6 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
     final Activity activity = Activity(
       // Settings
       activitySettings: state.currentActivity.activitySettings,
-      globalSettings: state.currentActivity.globalSettings,
       // State
       isRunning: state.currentActivity.isRunning,
       isStarted: state.currentActivity.isStarted,
@@ -42,13 +40,13 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
     updateState(activity);
   }
 
-  void startNewActivity({
-    required ActivitySettings activitySettings,
-    required GlobalSettings globalSettings,
-  }) {
+  void startNewActivity(BuildContext context) {
+    final ActivitySettingsCubit activitySettingsCubit =
+        BlocProvider.of<ActivitySettingsCubit>(context);
+
     final Activity newActivity = Activity.createNew(
-      activitySettings: activitySettings,
-      globalSettings: globalSettings,
+      // Settings
+      activitySettings: activitySettingsCubit.state.settings,
     );
 
     newActivity.dump();
@@ -57,6 +55,10 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
     refresh();
   }
 
+  bool canBeResumed() {
+    return state.currentActivity.canBeResumed;
+  }
+
   void quitActivity() {
     state.currentActivity.isRunning = false;
     refresh();
@@ -75,7 +77,8 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
 
   void currentGuessAddLetter(String letter) {
     if (state.currentActivity.currentGuess.length <
-        int.parse(state.currentActivity.activitySettings.length)) {
+        int.parse(state.currentActivity.activitySettings
+            .get(ApplicationConfig.parameterCodeWordLength))) {
       state.currentActivity.currentGuess = state.currentActivity.currentGuess + letter;
       refresh();
     }
@@ -93,7 +96,8 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
     state.currentActivity.isStarted = true;
 
     if (state.currentActivity.currentGuess.length ==
-        int.parse(state.currentActivity.activitySettings.length)) {
+        int.parse(state.currentActivity.activitySettings
+            .get(ApplicationConfig.parameterCodeWordLength))) {
       if (state.currentActivity.currentGuess == state.currentActivity.word) {
         printlog('Word found!');
         state.currentActivity.foundWord = true;
@@ -131,7 +135,8 @@ class ActivityCubit extends HydratedCubit<ActivityState> {
 
   List<String> getTips(String candidate) {
     String word = state.currentActivity.word;
-    final int wordLength = int.parse(state.currentActivity.activitySettings.length);
+    final int wordLength = int.parse(
+        state.currentActivity.activitySettings.get(ApplicationConfig.parameterCodeWordLength));
 
     final List<String> tips = List<String>.filled(wordLength, '', growable: false);
 
diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart
deleted file mode 100644
index e1d05be4acf0666299b0b87437c6e636d524db54..0000000000000000000000000000000000000000
--- a/lib/cubit/settings/settings_activity_cubit.dart
+++ /dev/null
@@ -1,83 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/config/default_activity_settings.dart';
-import 'package:momomotus/models/settings/settings_activity.dart';
-
-part 'settings_activity_state.dart';
-
-class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
-  ActivitySettingsCubit()
-      : super(ActivitySettingsState(settings: ActivitySettings.createDefault()));
-
-  void setValues({
-    String? lang,
-    String? length,
-    String? level,
-  }) {
-    emit(
-      ActivitySettingsState(
-        settings: ActivitySettings(
-          lang: lang ?? state.settings.lang,
-          length: length ?? state.settings.length,
-          level: level ?? state.settings.level,
-        ),
-      ),
-    );
-  }
-
-  String getParameterValue(String code) {
-    switch (code) {
-      case DefaultActivitySettings.parameterCodeLang:
-        return ActivitySettings.getLangValueFromUnsafe(state.settings.lang);
-      case DefaultActivitySettings.parameterCodeLength:
-        return ActivitySettings.getLengthValueFromUnsafe(state.settings.length);
-      case DefaultActivitySettings.parameterCodeLevel:
-        return ActivitySettings.getLevelValueFromUnsafe(state.settings.level);
-    }
-
-    return '';
-  }
-
-  void setParameterValue(String code, String value) {
-    final String lang = code == DefaultActivitySettings.parameterCodeLang
-        ? value
-        : getParameterValue(DefaultActivitySettings.parameterCodeLang);
-    final String length = code == DefaultActivitySettings.parameterCodeLength
-        ? value
-        : getParameterValue(DefaultActivitySettings.parameterCodeLength);
-    final String level = code == DefaultActivitySettings.parameterCodeLevel
-        ? value
-        : getParameterValue(DefaultActivitySettings.parameterCodeLevel);
-
-    setValues(
-      lang: lang,
-      length: length,
-      level: level,
-    );
-  }
-
-  @override
-  ActivitySettingsState? fromJson(Map<String, dynamic> json) {
-    final String lang = json[DefaultActivitySettings.parameterCodeLang] as String;
-    final String length = json[DefaultActivitySettings.parameterCodeLength] as String;
-    final String level = json[DefaultActivitySettings.parameterCodeLevel] as String;
-
-    return ActivitySettingsState(
-      settings: ActivitySettings(
-        lang: lang,
-        length: length,
-        level: level,
-      ),
-    );
-  }
-
-  @override
-  Map<String, dynamic>? toJson(ActivitySettingsState state) {
-    return <String, dynamic>{
-      DefaultActivitySettings.parameterCodeLang: state.settings.lang,
-      DefaultActivitySettings.parameterCodeLength: state.settings.length,
-      DefaultActivitySettings.parameterCodeLevel: state.settings.level,
-    };
-  }
-}
diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart
deleted file mode 100644
index 2b2de42011634e81ae9e6f8bcaa1577f239c778b..0000000000000000000000000000000000000000
--- a/lib/cubit/settings/settings_activity_state.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-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/settings_global_cubit.dart b/lib/cubit/settings/settings_global_cubit.dart
deleted file mode 100644
index 18e1ceb91fa3baa787a2b658fd715ec0d2fdc117..0000000000000000000000000000000000000000
--- a/lib/cubit/settings/settings_global_cubit.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/config/default_global_settings.dart';
-import 'package:momomotus/models/settings/settings_global.dart';
-
-part 'settings_global_state.dart';
-
-class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> {
-  GlobalSettingsCubit() : super(GlobalSettingsState(settings: GlobalSettings.createDefault()));
-
-  void setValues({
-    String? skin,
-  }) {
-    emit(
-      GlobalSettingsState(
-        settings: GlobalSettings(
-          skin: skin ?? state.settings.skin,
-        ),
-      ),
-    );
-  }
-
-  String getParameterValue(String code) {
-    switch (code) {
-      case DefaultGlobalSettings.parameterCodeSkin:
-        return GlobalSettings.getSkinValueFromUnsafe(state.settings.skin);
-    }
-    return '';
-  }
-
-  void setParameterValue(String code, String value) {
-    final String skin = (code == DefaultGlobalSettings.parameterCodeSkin)
-        ? value
-        : getParameterValue(DefaultGlobalSettings.parameterCodeSkin);
-
-    setValues(
-      skin: skin,
-    );
-  }
-
-  @override
-  GlobalSettingsState? fromJson(Map<String, dynamic> json) {
-    final String skin = json[DefaultGlobalSettings.parameterCodeSkin] as String;
-
-    return GlobalSettingsState(
-      settings: GlobalSettings(
-        skin: skin,
-      ),
-    );
-  }
-
-  @override
-  Map<String, dynamic>? toJson(GlobalSettingsState state) {
-    return <String, dynamic>{
-      DefaultGlobalSettings.parameterCodeSkin: state.settings.skin,
-    };
-  }
-}
diff --git a/lib/cubit/settings/settings_global_state.dart b/lib/cubit/settings/settings_global_state.dart
deleted file mode 100644
index ebcddd700f252257223ca8e16c85202b04f3ff24..0000000000000000000000000000000000000000
--- a/lib/cubit/settings/settings_global_state.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-part of 'settings_global_cubit.dart';
-
-@immutable
-class GlobalSettingsState extends Equatable {
-  const GlobalSettingsState({
-    required this.settings,
-  });
-
-  final GlobalSettings settings;
-
-  @override
-  List<dynamic> get props => <dynamic>[
-        settings,
-      ];
-}
diff --git a/lib/main.dart b/lib/main.dart
index 87c318de2199ed4234398198236dbf697f860ecb..6d218d86e527668dfc77a2829a5864193d64db57 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -8,10 +8,7 @@ import 'package:momomotus/common/cubit/nav/nav_cubit_pages.dart';
 import 'package:momomotus/common/cubit/nav/nav_cubit_screens.dart';
 
 import 'package:momomotus/config/application_config.dart';
-import 'package:momomotus/config/default_global_settings.dart';
 import 'package:momomotus/cubit/activity/activity_cubit.dart';
-import 'package:momomotus/cubit/settings/settings_activity_cubit.dart';
-import 'package:momomotus/cubit/settings/settings_global_cubit.dart';
 import 'package:momomotus/ui/skeleton.dart';
 
 void main() async {
@@ -62,17 +59,14 @@ class MyApp extends StatelessWidget {
         BlocProvider<ActivityCubit>(
           create: (context) => ActivityCubit(),
         ),
-        BlocProvider<GlobalSettingsCubit>(
-          create: (context) => GlobalSettingsCubit(),
-        ),
         BlocProvider<ActivitySettingsCubit>(
-          create: (context) => ActivitySettingsCubit(),
+          create: (context) => ActivitySettingsCubit(appConfig: ApplicationConfig.config),
         ),
       ],
       child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
         builder: (BuildContext context, ApplicationThemeModeState state) {
           return MaterialApp(
-            title: ApplicationConfig.appTitle,
+            title: ApplicationConfig.config.appTitle,
             home: const SkeletonScreen(),
 
             // Theme stuff
@@ -112,7 +106,9 @@ class MyApp extends StatelessWidget {
       'wrong',
     ];
 
-    for (String skin in DefaultGlobalSettings.allowedSkinValues) {
+    for (String skin in ApplicationConfig.config
+        .getFromCode(ApplicationConfig.parameterCodeSkin)
+        .allowedValues) {
       for (String image in skinImages) {
         assets.add('assets/skins/${skin}_$image.png');
       }
diff --git a/lib/models/activity/activity.dart b/lib/models/activity/activity.dart
index 51a298747e89e79d01300bdd5857ffdc9e81126b..edc39976d03d96c83204f85b4f6ccc67ecb35d71 100644
--- a/lib/models/activity/activity.dart
+++ b/lib/models/activity/activity.dart
@@ -1,15 +1,12 @@
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:momomotus/config/default_activity_settings.dart';
+import 'package:momomotus/config/application_config.dart';
 import 'package:momomotus/data/fetch_data_helper.dart';
-import 'package:momomotus/models/settings/settings_activity.dart';
-import 'package:momomotus/models/settings/settings_global.dart';
 
 class Activity {
   Activity({
     // Settings
     required this.activitySettings,
-    required this.globalSettings,
 
     // State
     this.isRunning = false,
@@ -29,7 +26,6 @@ class Activity {
 
   // Settings
   final ActivitySettings activitySettings;
-  final GlobalSettings globalSettings;
 
   // State
   bool isRunning;
@@ -49,8 +45,7 @@ class Activity {
   factory Activity.createEmpty() {
     return Activity(
       // Settings
-      activitySettings: ActivitySettings.createDefault(),
-      globalSettings: GlobalSettings.createDefault(),
+      activitySettings: ActivitySettings.createDefault(appConfig: ApplicationConfig.config),
       // Base data
       word: '',
       dictionary: [],
@@ -61,21 +56,19 @@ class Activity {
 
   factory Activity.createNew({
     ActivitySettings? activitySettings,
-    GlobalSettings? globalSettings,
   }) {
-    final ActivitySettings newActivitySettings =
-        activitySettings ?? ActivitySettings.createDefault();
-    final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();
+    final ActivitySettings newActivitySettings = activitySettings ??
+        ActivitySettings.createDefault(appConfig: ApplicationConfig.config);
 
     final String pickedWord = FetchDataHelper().getRandomWord(
-      lang: newActivitySettings.lang,
-      length: newActivitySettings.length,
-      level: newActivitySettings.level,
+      lang: newActivitySettings.get(ApplicationConfig.parameterCodeLang),
+      length: newActivitySettings.get(ApplicationConfig.parameterCodeWordLength),
+      level: newActivitySettings.get(ApplicationConfig.parameterCodeDifficultyLevel),
     );
 
     final List<String> dictionary = FetchDataHelper().getDictionary(
-      lang: newActivitySettings.lang,
-      length: newActivitySettings.length,
+      lang: newActivitySettings.get(ApplicationConfig.parameterCodeLang),
+      length: newActivitySettings.get(ApplicationConfig.parameterCodeWordLength),
     );
 
     // Starts with first letter revealed
@@ -84,7 +77,6 @@ class Activity {
     return Activity(
       // Settings
       activitySettings: newActivitySettings,
-      globalSettings: newGlobalSettings,
       // State
       isRunning: true,
       // Base data
@@ -99,7 +91,7 @@ class Activity {
   bool get canBeResumed => isStarted && !isFinished;
   bool get gameWon => isRunning && isStarted && isFinished;
   bool get isFinished {
-    if (foundWord || (guesses.length >= DefaultActivitySettings.maxGuessesCount)) {
+    if (foundWord || (guesses.length >= ApplicationConfig.maxGuessesCount)) {
       return true;
     }
 
@@ -107,7 +99,8 @@ class Activity {
   }
 
   bool checkWordIsValid(String candidate) {
-    final int length = int.parse(activitySettings.length);
+    final int length =
+        int.parse(activitySettings.get(ApplicationConfig.parameterCodeWordLength));
 
     return (word.length == length) &&
         (candidate.length == length) &&
@@ -121,7 +114,6 @@ class Activity {
     printlog('$Activity:');
     printlog('  Settings');
     activitySettings.dump();
-    globalSettings.dump();
     printlog('  State');
     printlog('    isRunning: $isRunning');
     printlog('    isStarted: $isStarted');
@@ -147,7 +139,6 @@ class Activity {
     return <String, dynamic>{
       // Settings
       'activitySettings': activitySettings.toJson(),
-      'globalSettings': globalSettings.toJson(),
       // State
       'isRunning': isRunning,
       'isStarted': isStarted,
diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart
deleted file mode 100644
index eb9f6a85ba71503e2c9881426854575a54aa8d5c..0000000000000000000000000000000000000000
--- a/lib/models/settings/settings_activity.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/config/default_activity_settings.dart';
-
-class ActivitySettings {
-  final String lang;
-  final String length;
-  final String level;
-
-  ActivitySettings({
-    required this.lang,
-    required this.length,
-    required this.level,
-  });
-
-  static String getLangValueFromUnsafe(String lang) {
-    if (DefaultActivitySettings.allowedLangValues.contains(lang)) {
-      return lang;
-    }
-
-    return DefaultActivitySettings.defaultLangValue;
-  }
-
-  static String getLengthValueFromUnsafe(String length) {
-    if (DefaultActivitySettings.allowedLengthValues.contains(length)) {
-      return length;
-    }
-
-    return DefaultActivitySettings.defaultLengthValue;
-  }
-
-  static String getLevelValueFromUnsafe(String level) {
-    if (DefaultActivitySettings.allowedLevelValues.contains(level)) {
-      return level;
-    }
-
-    return DefaultActivitySettings.defaultLevelValue;
-  }
-
-  factory ActivitySettings.createDefault() {
-    return ActivitySettings(
-      lang: DefaultActivitySettings.defaultLangValue,
-      length: DefaultActivitySettings.defaultLengthValue,
-      level: DefaultActivitySettings.defaultLevelValue,
-    );
-  }
-
-  void dump() {
-    printlog('$ActivitySettings:');
-    printlog('  ${DefaultActivitySettings.parameterCodeLang}: $lang');
-    printlog('  ${DefaultActivitySettings.parameterCodeLength}: $length');
-    printlog('  ${DefaultActivitySettings.parameterCodeLevel}: $level');
-    printlog('');
-  }
-
-  @override
-  String toString() {
-    return '$ActivitySettings(${toJson()})';
-  }
-
-  Map<String, dynamic>? toJson() {
-    return <String, dynamic>{
-      DefaultActivitySettings.parameterCodeLang: lang,
-      DefaultActivitySettings.parameterCodeLength: length,
-      DefaultActivitySettings.parameterCodeLevel: level,
-    };
-  }
-}
diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart
deleted file mode 100644
index 2f2092be906361eae4f0990f63c1e3693cf1eccc..0000000000000000000000000000000000000000
--- a/lib/models/settings/settings_global.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
-
-import 'package:momomotus/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/common/ui/pages/game.dart b/lib/ui/pages/game.dart
similarity index 100%
rename from lib/common/ui/pages/game.dart
rename to lib/ui/pages/game.dart
diff --git a/lib/ui/parameters/parameter_painter_difficulty_level.dart b/lib/ui/parameters/parameter_painter_difficulty_level.dart
new file mode 100644
index 0000000000000000000000000000000000000000..5492b037a157a83a128c1190e3fdd2ecccf417e6
--- /dev/null
+++ b/lib/ui/parameters/parameter_painter_difficulty_level.dart
@@ -0,0 +1,71 @@
+import 'dart:math';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+
+import 'package:momomotus/config/application_config.dart';
+
+class ParameterPainterDifficultyLevel extends CustomPainter {
+  const ParameterPainterDifficultyLevel({
+    required this.context,
+    required this.value,
+  });
+
+  final BuildContext context;
+  final String value;
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    // force square
+    final double canvasSize = min(size.width, size.height);
+
+    final List<dynamic> stars = [];
+
+    switch (value) {
+      case ApplicationConfig.difficultyLevelValueEasy:
+        stars.add([0.5, 0.5]);
+        break;
+      case ApplicationConfig.difficultyLevelValueNormal:
+        stars.add([0.3, 0.5]);
+        stars.add([0.7, 0.5]);
+        break;
+      default:
+        printlog('Wrong value for level parameter value: $value');
+    }
+
+    final paint = Paint();
+    paint.strokeJoin = StrokeJoin.round;
+    paint.strokeWidth = 3 / 100 * canvasSize;
+
+    // Stars
+    final textSpan = TextSpan(
+      text: '⭐',
+      style: TextStyle(
+        color: Colors.black,
+        fontSize: canvasSize / 3,
+        fontWeight: FontWeight.bold,
+      ),
+    );
+    final textPainter = TextPainter(
+      text: textSpan,
+      textDirection: TextDirection.ltr,
+      textAlign: TextAlign.center,
+    );
+    textPainter.layout();
+
+    for (var center in stars) {
+      textPainter.paint(
+        canvas,
+        Offset(
+          canvasSize * center[0] - textPainter.width * 0.5,
+          canvasSize * center[1] - textPainter.height * 0.5,
+        ),
+      );
+    }
+  }
+
+  @override
+  bool shouldRepaint(CustomPainter oldDelegate) {
+    return false;
+  }
+}
diff --git a/lib/ui/widgets/game/game_board.dart b/lib/ui/widgets/game/game_board.dart
index a7317c92f6da969833be07662ffb19beb6409729..b111241e2f63288c90658a99b5bea46e830711fb 100644
--- a/lib/ui/widgets/game/game_board.dart
+++ b/lib/ui/widgets/game/game_board.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
 
-import 'package:momomotus/config/default_activity_settings.dart';
+import 'package:momomotus/config/application_config.dart';
 import 'package:momomotus/cubit/activity/activity_cubit.dart';
 import 'package:momomotus/models/activity/activity.dart';
 import 'package:momomotus/ui/widgets/game/game_cell.dart';
@@ -16,8 +16,9 @@ class GameBoardWidget extends StatelessWidget {
         final Activity currentActivity = activityState.currentActivity;
         final ActivityCubit activityCubit = BlocProvider.of<ActivityCubit>(context);
 
-        const int maxGuessesCount = DefaultActivitySettings.maxGuessesCount;
-        final int wordLength = int.parse(currentActivity.activitySettings.length);
+        const int maxGuessesCount = ApplicationConfig.maxGuessesCount;
+        final int wordLength = int.parse(
+            currentActivity.activitySettings.get(ApplicationConfig.parameterCodeWordLength));
 
         final List<String> guesses = currentActivity.guesses;
 
diff --git a/lib/ui/widgets/game/game_cell.dart b/lib/ui/widgets/game/game_cell.dart
index b9404ada4e63bf25576f35564f68cc34caa64faa..8da1c5bd63d1c16add71adcbc49d20a57fefc5ae 100644
--- a/lib/ui/widgets/game/game_cell.dart
+++ b/lib/ui/widgets/game/game_cell.dart
@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
+import 'package:momomotus/config/application_config.dart';
 
 import 'package:momomotus/cubit/activity/activity_cubit.dart';
 import 'package:momomotus/models/activity/activity.dart';
@@ -24,7 +25,8 @@ class GameCellWidget extends StatelessWidget {
       builder: (BuildContext context, ActivityState activityState) {
         final Activity currentActivity = activityState.currentActivity;
 
-        final String skin = currentActivity.globalSettings.skin;
+        final String skin =
+            currentActivity.activitySettings.get(ApplicationConfig.parameterCodeSkin);
 
         const Color textColor = Colors.white;
         final Color focusBorderColor = Colors.yellow.shade700;
diff --git a/pubspec.lock b/pubspec.lock
index 1896dfc3582bc30a9743cfeb6b5a0e3e3b46fcd3..0d7744cbc920c4c2cb00c639e11ef7197325b30e 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -122,11 +122,11 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "0.4.0"
-      resolved-ref: eb9c090bd00d73324eab8737f74b3339cc24c9e8
+      ref: "0.5.0"
+      resolved-ref: b8164a50489ba981ea57d9f02e2334f09cb8c6a7
       url: "https://git.harrault.fr/android/flutter-toolbox.git"
     source: git
-    version: "0.4.0"
+    version: "0.5.0"
   flutter_lints:
     dependency: "direct dev"
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 5dd67ffbff142098843642f077bb5387ef3dff3d..eebe618b03449d21bd31022f59e266f7fc6c4640 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: A motus-like game application.
 
 publish_to: "none"
 
-version: 0.4.2+39
+version: 0.5.0+40
 
 environment:
   sdk: "^3.0.0"
@@ -16,7 +16,7 @@ dependencies:
   flutter_custom_toolbox:
     git:
       url: https://git.harrault.fr/android/flutter-toolbox.git
-      ref: 0.4.0
+      ref: 0.5.0
 
   # specific
   # (none)