diff --git a/CHANGELOG.md b/CHANGELOG.md
index da9dbf159f1ad93808db34089cecc5f0248c7282..83e4bd78c45566ab37c191247380bea38c9a7654 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.7
+
+-   Allow "array" parameter type
+
 ## 1.0.6
 
 -   Allow additional content in about page
diff --git a/lib/parameters/application_config_definition.dart b/lib/parameters/application_config_definition.dart
index a70fa0522ceb8a79a7e8ea03e48e93d5906fbb13..4551981288bb7171702704aaae0b24056b7e6073 100644
--- a/lib/parameters/application_config_definition.dart
+++ b/lib/parameters/application_config_definition.dart
@@ -37,6 +37,7 @@ class ApplicationSettingsParameter {
   final String code;
   final bool displayedOnTop;
   final List<ApplicationSettingsParameterItemValue> values;
+  final bool allowMultipleValues;
   final int itemsPerLine;
   final Widget Function({
     required BuildContext context,
@@ -52,6 +53,7 @@ class ApplicationSettingsParameter {
     required this.code,
     this.displayedOnTop = true,
     required this.values,
+    this.allowMultipleValues = false,
     this.itemsPerLine = 0,
     this.builder,
     this.customPainter,
@@ -63,7 +65,15 @@ class ApplicationSettingsParameter {
     return values.map((ApplicationSettingsParameterItemValue item) => item.value).toList();
   }
 
-  String get defaultValue => values.firstWhere((element) => element.isDefault).value;
+  String get defaultValue => allowMultipleValues
+      ? values
+          .where((itemValue) => itemValue.isDefault)
+          .toList()
+          .map((itemDefaultValue) => itemDefaultValue.value)
+          .join(',')
+      : values.firstWhere((itemValue) => itemValue.isDefault).value;
+
+  List<String> get defaultValues => defaultValue.split(',');
 
   factory ApplicationSettingsParameter.empty() {
     return ApplicationSettingsParameter(
@@ -82,8 +92,8 @@ class ApplicationSettingsParameter {
     required double size,
     required VoidCallback? onPressed,
   }) {
-    final Color buttonColorActive = (onPressed != null) ? Colors.blue : Colors.grey;
-    final Color buttonColorInactive = Theme.of(context).colorScheme.surface;
+    final Color colorAvailable = Theme.of(context).colorScheme.surface;
+    final Color colorSelected = (onPressed != null) ? Colors.blue : Colors.grey;
     const double buttonBorderWidth = 4.0;
     const double buttonBorderRadius = 12.0;
 
@@ -91,9 +101,9 @@ class ApplicationSettingsParameter {
         BlocProvider.of<ActivitySettingsCubit>(context);
     final String currentValue = activitySettingsCubit.get(code);
 
-    final bool isSelected = (currentValue == itemValue.value);
+    final bool isSelected = (currentValue.split(',').contains(itemValue.value));
 
-    final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive;
+    final Color color = isSelected ? colorSelected : colorAvailable;
 
     Widget content = SizedBox.shrink();
 
@@ -127,10 +137,10 @@ class ApplicationSettingsParameter {
 
     return Container(
       decoration: BoxDecoration(
-        color: buttonColor,
+        color: color,
         borderRadius: BorderRadius.circular(buttonBorderRadius),
         border: Border.all(
-          color: buttonColor,
+          color: color,
           width: buttonBorderWidth,
         ),
       ),
diff --git a/lib/parameters/models/settings/settings_activity.dart b/lib/parameters/models/settings/settings_activity.dart
index 45b3a12dab7b262f8555358f98a634d5f70d05c7..5d4d7339b94763f09791180cb0bba5b018083343 100644
--- a/lib/parameters/models/settings/settings_activity.dart
+++ b/lib/parameters/models/settings/settings_activity.dart
@@ -26,6 +26,10 @@ class ActivitySettings {
 
   String get(String code) {
     if (values.keys.contains(code)) {
+      if (appConfig.getFromCode(code).allowMultipleValues) {
+        return getAsArray(code).join(',');
+      }
+
       if (appConfig.getFromCode(code).allowedValues.contains(values[code])) {
         return values[code] ?? appConfig.getFromCode(code).defaultValue;
       }
@@ -54,6 +58,19 @@ class ActivitySettings {
     }
   }
 
+  List<String> getAsArray(String code) {
+    final List<String> legitValues = [];
+    if (values[code] != null) {
+      values[code]?.split(',').forEach((candidateValue) {
+        if (appConfig.getFromCode(code).allowedValues.contains(candidateValue)) {
+          legitValues.add(candidateValue);
+        }
+      });
+    }
+
+    return legitValues;
+  }
+
   void dump() {
     printlog('$ActivitySettings:');
     values.forEach((code, value) {
diff --git a/lib/parameters/pages/parameters.dart b/lib/parameters/pages/parameters.dart
index 9015a4921748c85ca28170223841c73333f1986a..eae6c14a6af5d09792e9f3ee9070e0a3580b0af5 100644
--- a/lib/parameters/pages/parameters.dart
+++ b/lib/parameters/pages/parameters.dart
@@ -153,7 +153,11 @@ class PageParameters extends StatelessWidget {
               size: itemWidth,
               onPressed: isEnabled
                   ? () {
-                      activitySettingsCubit.set(parameter.code, item.value);
+                      if (parameter.allowMultipleValues) {
+                        activitySettingsCubit.toggle(parameter.code, item.value);
+                      } else {
+                        activitySettingsCubit.set(parameter.code, item.value);
+                      }
                     }
                   : null,
             ),
diff --git a/lib/parameters/settings/settings_activity_cubit.dart b/lib/parameters/settings/settings_activity_cubit.dart
index 6123055fdb2bf2f685d28f063dc909ef4d2f6817..15d795817a9460f2fb73b4298d2c4c931f3a9308 100644
--- a/lib/parameters/settings/settings_activity_cubit.dart
+++ b/lib/parameters/settings/settings_activity_cubit.dart
@@ -35,7 +35,7 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
   }
 
   void set(String code, String value) {
-    Map<String, String> values = state.settings.values;
+    final Map<String, String> values = state.settings.values;
 
     values[code] = value;
 
@@ -44,6 +44,17 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
     );
   }
 
+  void toggle(String code, String value) {
+    final List<String> currentValues = state.settings.values[code]?.split(',') ?? [];
+    if (currentValues.contains(value) == true) {
+      currentValues.removeWhere((candidate) => value == candidate);
+    } else {
+      currentValues.add(value);
+    }
+
+    set(code, currentValues.join(','));
+  }
+
   @override
   ActivitySettingsState? fromJson(Map<String, dynamic> json) {
     Map<String, String> values = {};
diff --git a/pubspec.yaml b/pubspec.yaml
index e77f7433e534cdd5f74ba4c5b9067c298f56ce99..d86e3c0bef6e469e1c8400d75d2edf5e8c37c398 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects."
 
 publish_to: https://pub.harrault.fr/
 
-version: 1.0.6
+version: 1.0.7
 
 homepage: https://git.harrault.fr/android/flutter-toolbox