diff --git a/VERSIONS_HOTLINE/81938 b/VERSIONS_HOTLINE/81938
new file mode 100644
index 0000000000000000000000000000000000000000..9aec972842018e8a5b0a8f0f5bb3eb16cef68053
--- /dev/null
+++ b/VERSIONS_HOTLINE/81938
@@ -0,0 +1 @@
+ - ticket #81938 : correction de la sauvegarde du paramétrage des boîtes qui pouvait échouer dans certaines conditions
\ No newline at end of file
diff --git a/application/modules/admin/controllers/WidgetController.php b/application/modules/admin/controllers/WidgetController.php
index 0a9c04a448831efa0389abae51eaed4bfbe5fb29..80b10fd72d86901fbb2d4870509e245644f2f34d 100644
--- a/application/modules/admin/controllers/WidgetController.php
+++ b/application/modules/admin/controllers/WidgetController.php
@@ -301,6 +301,4 @@ class Admin_WidgetController extends ZendAfi_Controller_Action {
   public function formProvider($widget) {
     return call_user_func_array([$widget->getForm(), 'newWith'], [$widget->forForm()]);
   }
-
-
 }
\ No newline at end of file
diff --git a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php
index a52e8129bc35fcf93e66e4b8199a24386e510707..206b9ea4df6da90c64aa0d4a77a314dd454ef277 100644
--- a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php
+++ b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php
@@ -42,7 +42,7 @@ class Class_Systeme_ModulesAccueil_ConteneurDeuxColonnes extends Class_Systeme_M
   public function updateHook($datas) {
     foreach(['gauche', 'droite'] as $column) {
       $key = 'col_' . $column .'_module_id';
-      $datas [$key] = $datas['preferences'][$key] = static::createModuleForCol($column, $datas, $datas['id_module'], $datas['profile_id']);
+      $datas [$key] = $datas['preferences'][$key] = static::createModuleForCol($column, $datas['preferences'], $datas['id_module'], $datas['profile_id']);
     }
 
     return $datas;
diff --git a/library/Class/Systeme/ModulesAccueil/Library.php b/library/Class/Systeme/ModulesAccueil/Library.php
index 7837bc98d32534be125fdb46edaebf3ddfaff4a9..3e21bc8a629ed9b9d22375842dfe37ea6a407638 100644
--- a/library/Class/Systeme/ModulesAccueil/Library.php
+++ b/library/Class/Systeme/ModulesAccueil/Library.php
@@ -145,9 +145,9 @@ class Class_Systeme_ModulesAccueil_Library extends Class_Systeme_ModulesAccueil_
 
 
   public function updateHook($datas) {
-    if(array_key_exists('default_filters', $datas)
-       && (!is_array($datas['default_filters'])))
-      $datas['default_filters'] = [];
+    if (array_key_exists('default_filters', $datas['preferences'])
+       && (!is_array($datas['preferences']['default_filters'])))
+      $datas['preferences']['default_filters'] = [];
 
     return $datas;
   }
diff --git a/library/Class/Systeme/ModulesAccueil/MenuVertical.php b/library/Class/Systeme/ModulesAccueil/MenuVertical.php
index 28ea39b9f5edcc309dd1d79060a422c283bbcdd2..4b1b0b8e7bfda1531ad8cf972b4eeb84203c503c 100644
--- a/library/Class/Systeme/ModulesAccueil/MenuVertical.php
+++ b/library/Class/Systeme/ModulesAccueil/MenuVertical.php
@@ -61,13 +61,13 @@ class Class_Systeme_ModulesAccueil_MenuVertical extends Class_Systeme_ModulesAcc
 
 
   public function updateHook($datas) {
-    if(!isset($datas['menu']))
+    if(!isset($datas['preferences']['menu']))
       return $datas;
 
-    if(static::NEW_MENU != $datas['menu'])
+    if(static::NEW_MENU != $datas['preferences']['menu'])
       return $datas;
 
-    $datas['menu'] = $this->_prefixMenu($this->addMenu());
+    $datas['preferences']['menu'] = $this->_prefixMenu($this->addMenu());
     return $datas;
   }
 
diff --git a/library/Class/Systeme/ModulesAccueil/Sitotheque.php b/library/Class/Systeme/ModulesAccueil/Sitotheque.php
index 3f41408f033249788b7753ac6e5cafd98f9dafbb..b5d39244ed0f5953842a72579431118b7f35efd6 100644
--- a/library/Class/Systeme/ModulesAccueil/Sitotheque.php
+++ b/library/Class/Systeme/ModulesAccueil/Sitotheque.php
@@ -52,11 +52,11 @@ class Class_Systeme_ModulesAccueil_Sitotheque extends Class_Systeme_ModulesAccue
 
 
   public function updateHook($datas) {
-    if(static::DISPLAY_HIERARCHY != $datas['type_aff'])
+    if(static::DISPLAY_HIERARCHY != $datas['preferences']['type_aff'])
       return $datas;
 
-    if ($categories = explode('-', $datas['id_categorie']))
-      $datas['preferences']['id_categorie'] = $datas['id_categorie'] = $categories[0];
+    if ($categories = explode('-', $datas['preferences']['id_categorie']))
+      $datas['preferences']['id_categorie'] = $categories[0];
 
     return $datas;
   }
diff --git a/library/Class/Systeme/ModulesAccueil/Tags.php b/library/Class/Systeme/ModulesAccueil/Tags.php
index 930af4938f96ce7dcba498dbb862cf8b3ba50a7c..f9938870661acaa2f2d5196c9a7ccd0a223691a8 100644
--- a/library/Class/Systeme/ModulesAccueil/Tags.php
+++ b/library/Class/Systeme/ModulesAccueil/Tags.php
@@ -41,4 +41,13 @@ class Class_Systeme_ModulesAccueil_Tags extends Class_Systeme_ModulesAccueil_Nul
                              'id_panier' => 0,
                              'id_catalogue' => 0];
   }
+
+
+  public function updateHook($datas) {
+    if (isset($datas['preferences']['type_tags_codes'])) {
+      $datas['preferences']['type_tags'] = str_replace(';', '', $datas['preferences']['type_tags_codes']);
+      unset($datas['preferences']['type_tags_codes']);
+    }
+    return $datas;
+  }
 }
\ No newline at end of file
diff --git a/library/Class/Systeme/Widget/Abstract.php b/library/Class/Systeme/Widget/Abstract.php
index 61f19d4081d3ab7ee39eafa6457b7177474330c3..676850e689d3a66565ca99ae1c0e7c2ee1c06bcc 100644
--- a/library/Class/Systeme/Widget/Abstract.php
+++ b/library/Class/Systeme/Widget/Abstract.php
@@ -89,10 +89,10 @@ abstract class Class_Systeme_Widget_Abstract extends Class_Entity {
 
   protected function _getValues($attributes) {
     return $this->_getWidgetResources()
-                ->getValues(array_merge(isset($attributes['preferences'])
+                ->getValues(array_merge($attributes,
+                                        isset($attributes['preferences'])
                                         ? $attributes['preferences']
-                                        : [],
-                                        $attributes));
+                                        : []));
   }
 
 
diff --git a/library/Class/Systeme/Widget/Widget.php b/library/Class/Systeme/Widget/Widget.php
index 6a9fafd25d0367d27994dfefc9359fa30d18b6a5..7b8e5861773edfaeb6469d159c4f669ca4969a31 100644
--- a/library/Class/Systeme/Widget/Widget.php
+++ b/library/Class/Systeme/Widget/Widget.php
@@ -36,16 +36,34 @@ class Class_Systeme_Widget_Widget extends Class_Systeme_Widget_Abstract {
   }
 
 
+  protected function _cleanRootAndPreferences($datas) {
+    $root_properties = ['type_module' => '',
+                        'division' => '',
+                        'id_module' => '',
+                        'preferences' => '',
+                        'parent_id' => '',
+                        'type_menu' => '',
+                        'libelle' => '',
+                        'picto' => '',
+                        'sous_menus' => []];
+
+
+    $cleaned_datas = array_intersect_key($datas, $root_properties);
+    $cleaned_datas['preferences'] = array_diff_key($datas,
+                                                   $root_properties);
+    return $cleaned_datas;
+  }
+
+
   protected function _update() {
-    $datas = array_merge($this->getLocalSettings(),
-                         $this->getNewDatas());
+    $cleaned_datas = $this->_cleanRootAndPreferences(
+                                                     array_merge($this->getLocalSettings(),
+                                                                 $this->getNewDatas()));
+
 
-    if(isset($datas['preferences']))
-      unset($datas['preferences']);
+    $cleaned_datas['profile_id'] = $this->getProfileId();
+    $datas = $this->_getWidgetResources()->updateHook($cleaned_datas);
 
-    $datas['preferences'] = $datas;
-    $datas['profile_id'] = $this->getProfileId();
-    $datas = $this->_getWidgetResources()->updateHook($datas);
     $sub_menus = null;
     if(isset($datas['children']))
       $sub_menus = $this->_convertChildren($datas['children']);
diff --git a/tests/application/modules/admin/controllers/WidgetControllerTest.php b/tests/application/modules/admin/controllers/WidgetControllerTest.php
index 5452e33a311418df119771ab3dad01ccb90fd959..7dd268c2008a76ccf81c0d9c3d60f35a5113fdf9 100644
--- a/tests/application/modules/admin/controllers/WidgetControllerTest.php
+++ b/tests/application/modules/admin/controllers/WidgetControllerTest.php
@@ -233,13 +233,13 @@ class WidgetControllerKioquePostTest extends WidgetControllerPostDispatchWidgetC
 
   /** @test */
   public function titleShouldBeTitreDuKiosque() {
-    $this->assertEquals('titre du /kiosque', $this->_saved_settings['titre']);
+    $this->assertEquals('titre du /kiosque', $this->_saved_settings['preferences']['titre']);
   }
 
 
   /** @test */
   public function profilRedirectShouldBeTwelve() {
-    $this->assertEquals('12', $this->_saved_settings['profil_redirect']);
+    $this->assertEquals('12', $this->_saved_settings['preferences']['profil_redirect']);
   }
 }
 
@@ -759,21 +759,6 @@ class WidgetControllerVerticalNavDispatchWithMenuFromOtherTest extends WidgetCon
 
 
 
-class WidgetControllerTagsDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase {
-  public function setUp() {
-    $this->_type_module = 'TAGS';
-    parent::setUp();
-  }
-
-
-  /** @test */
-  public function tagSelectionChampsShouldBePresent() {
-    $this->assertXPathContentContains('//h2', 'Facettes disponibles');
-  }
-}
-
-
-
 
 class WidgetControllerLoginDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase {
   public function setUp() {
@@ -959,6 +944,85 @@ class WidgetControllerActivitiesPostDispatchTest extends WidgetControllerPostDis
 
 
 
+class WidgetControllerTagsDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase {
+  public function _stormHook() {
+    $tags = ['modules' => ['6' => ['division' => 3,
+                                   'id_module' => '6',
+                                   'type_module' => 'TAGS',
+                                   'type_tags' => 'AMDPZ',
+                                   'nombre' => 40,
+                                   'preferences' => ['type_tags' => 'AM',
+                                                     'titre' => 'Des tags',
+                                                     'nombre' => 10]]]];
+    $this
+      ->_profil
+      ->setCfgAccueil($tags)
+      ->assertSave();
+  }
+
+
+  /** @test */
+  public function tagSelectionChampsShouldBePresent() {
+    $this->assertXPathContentContains('//h2', 'Facettes disponibles');
+  }
+
+
+  /** @test */
+  public function inputTitreShouldContainsDesTags() {
+    $this->assertXPath('//input[@name="titre"][@value="Des tags"]');
+  }
+
+
+  /** @test */
+  public function inputTypeTagsCodesShouldContainsAandM() {
+    $this->assertXPath('//input[@name="type_tags_codes"][@value="A;M"]');
+  }
+
+
+  /** @test */
+  public function inputNombreShouldHaveValueTen() {
+    $this->assertXPath('//input[@name="nombre"][@value="10"]');
+  }
+}
+
+
+
+
+class WidgetControllerTagsPostDispatchTest extends WidgetControllerPostDispatchWidgetConfigurationTestCase {
+  public function setUp() {
+    $this->_type_module = 'TAGS';
+    $this->_params = ['type_tags_codes' => 'A;M;S'];
+    parent::setUp();
+  }
+
+
+  /** @test */
+  public function typeTagsAMSShouldHaveBeenSaved() {
+    $this->assertEquals('AMS', $this->_saved_settings['preferences']['type_tags']);
+  }
+
+
+  /** @test */
+  public function typeTagsCodesAMSShouldHaveBeenRemovedFromPreferences() {
+    $this->assertFalse(isset($this->_saved_settings['preferences']['type_tags_codes']));
+  }
+
+
+  /** @test */
+  public function typeTagsCodesAMSShouldHaveBeenRemovedFromParams() {
+    $this->assertFalse(isset($this->_saved_settings['type_tags']));
+  }
+
+
+  /** @test */
+  public function preferencesShouldNotContainsDivision() {
+    $this->assertFalse(isset($this->_saved_settings['preferences']['division']));
+  }
+}
+
+
+
+
 abstract class WidgetControllerTwoWidgetsTestCase extends WidgetControllerWidgetConfigurationTestCase {
 
   public function setUp() {
@@ -1552,13 +1616,13 @@ class WidgetControllerLoginPostDispatchTest extends WidgetControllerPostDispatch
 
   /** @test */
   public function profilRedirectShouldBe678() {
-    $this->assertEquals(678, $this->_saved_settings['profil_redirect']);
+    $this->assertEquals(678, $this->_saved_settings['preferences']['profil_redirect']);
   }
 
 
   /** @test */
   public function profilLogoutRedirectShouldBe345() {
-    $this->assertEquals(345, $this->_saved_settings['profil_logout_redirect']);
+    $this->assertEquals(345, $this->_saved_settings['preferences']['profil_logout_redirect']);
   }
 
 
@@ -1881,23 +1945,18 @@ class WidgetControllerDomainBrowserPostDispatchTest extends WidgetControllerPost
 
   /** @test */
   public function paramsShouldHaveBeenSaved() {
-    $this->assertEquals(array_merge($this->_params,
-                                    ['boite' => '',
-                                     'division' => '3',
-                                     'id_module' => '6',
-                                     'type_module' => 'DOMAIN_BROWSER',
-                                     'preferences' => ['titre' => 'Mes Domaines',
-                                                       'allow_breadcrumb' => '0',
-                                                       'root_domain_id' => '10',
-                                                       'display_mode' => '4',
-                                                       'boite' => '',
-                                                       'division' => '3',
-                                                       'id_module' => '6',
-                                                       'type_module' => 'DOMAIN_BROWSER',
-                                                       'profile_id' => '5',
-                                                       'tri' => 'annee desc'],
-                                     'profile_id' => '5',
-                                     'tri' => 'annee desc']),
+    $this->assertEquals(['division' => '3',
+                         'id_module' => '6',
+                         'type_module' => 'DOMAIN_BROWSER',
+                         'preferences' => ['titre' => 'Mes Domaines',
+                                           'allow_breadcrumb' => '0',
+                                           'root_domain_id' => '10',
+                                           'display_mode' => '4',
+                                           'profile_id' => '5',
+                                           'tri' => 'annee desc',
+                                           'boite' => '',
+                         ],
+                         'profile_id' => '5'],
                         $this->_saved_settings);
   }
 }
@@ -2318,7 +2377,7 @@ class WidgetControllerWidgetAddWidgetFromTemplateTest extends WidgetControllerWi
   /** @test */
   public function opTimeoutShouldBeSix() {
     $this->assertEquals(6,
-                        $this->_module_config['op_timeout']);
+                        $this->_module_config['preferences']['op_timeout']);
   }
 }
 
diff --git a/tests/scenarios/Widgets/WidgetsTest.php b/tests/scenarios/Widgets/WidgetsTest.php
index 89e8cb11ad9fa2c8bca0a36dd15af02a072cf9e6..01b776a4ec7d4a12e23eb81cd9c506e038edd1f6 100644
--- a/tests/scenarios/Widgets/WidgetsTest.php
+++ b/tests/scenarios/Widgets/WidgetsTest.php
@@ -483,8 +483,8 @@ class WidgetsPostEditVerticalMenuTest extends WidgetsSimpleTestCase {
 
 
   /** @test */
-  public function newMenuIdShouldHaveBeenSetInMenuVerticalSettongs() {
-    $this->assertEquals('2-0', Class_Profil::getCurrentProfil()->getCfgAccueilAsArray()['modules'][6]['menu']);
+  public function newMenuIdShouldHaveBeenSetInMenuVerticalSettings() {
+    $this->assertEquals('2-0', Class_Profil::getCurrentProfil()->getCfgAccueilAsArray()['modules'][6]['preferences']['menu']);
   }