diff --git a/cosmogramme/php/integration/domaines.php b/cosmogramme/php/integration/domaines.php
index 3b03814dc04651c9369142290c7fb08a8fd2ad12..ec2cbd6179f52576816301656611f8713be17684 100644
--- a/cosmogramme/php/integration/domaines.php
+++ b/cosmogramme/php/integration/domaines.php
@@ -22,20 +22,20 @@
 setVariable('traitement_phase', 'Indexation des domaines');
 
 if ($phase==16) {
-	$log->ecrire('<h4>Indexation des domaines</h4>');
-	unset($phase_data);
-	$reprise = false;
-	$phase_data['nombre'] = 0;
-	$phase_data['nb_fic'] = 0;
-	$phase_data['timeStart'] = time();
-	$phase_data['pointeur'] = 0;
-	$phase_data['domaine'] = 0;
+  $log->ecrire('<h4>Indexation des domaines</h4>');
+  unset($phase_data);
+  $reprise = false;
+  $phase_data['nombre'] = 0;
+  $phase_data['nb_fic'] = 0;
+  $phase_data['timeStart'] = time();
+  $phase_data['pointeur'] = 0;
+  $phase_data['domaine'] = 0;
 
-	$phase=17;
+  $phase=17;
 }
 
 if ($phase==17) {
-	if ($mode_cron) {
+  if ($mode_cron) {
     $position_domaine = $phase_data['domaine'];
     $catalogues = array_slice(Class_Catalogue::findAllCataloguesAIndexer(),
                               $position_domaine);
@@ -50,15 +50,15 @@ if ($phase==17) {
       $phase_data['pointeur'] = 0;
     }
 
-		$log->ecrire('<h4>Indexation des paniers dans les domaines</h4>');
-		Class_PanierNotice::indexAll();
+    $log->ecrire('<h4>Indexation des paniers dans les domaines</h4>');
+    Class_PanierNotice::indexAll();
 
-		$log->ecrire('<h4>Indexation des articles dans les domaines</h4>');
-		Class_Article::indexAll();
+    $log->ecrire('<h4>Indexation des articles dans les domaines</h4>');
+    Class_Article::indexAll();
 
-		$log->ecrire('<h4>Indexation des sitothèques dans les domaines</h4>');
-		Class_Sitotheque::indexAll();
-	} else {
-		$log->ecrire('<h4>Les indexations des domaines, des paniers, articles et sitothèques dans les domaines ne sont traitées qu\'en mode cron</h4>');
-	}
+    $log->ecrire('<h4>Indexation des sitothèques dans les domaines</h4>');
+    Class_Sitotheque::indexAll();
+  } else {
+    $log->ecrire('<h4>Les indexations des domaines, des paniers, articles et sitothèques dans les domaines ne sont traitées qu\'en mode cron</h4>');
+  }
 }
\ No newline at end of file
diff --git a/library/Class/CodifThesaurus.php b/library/Class/CodifThesaurus.php
index 2e6aa9f83ec5b5c5c6f833687f504ab0e98a8d5a..7ce47599de34610a089b606d58f36dd0197e2a2a 100644
--- a/library/Class/CodifThesaurus.php
+++ b/library/Class/CodifThesaurus.php
@@ -329,15 +329,9 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
   public function newChildEntry() {
     $loader = $this->getLoader();
     $code = $this->getCode();
-
-    $parent_id_length = strlen($this->getIdThesaurus());
-    $id_thesaurus = $loader->findNextThesaurusChildId($code,
-                                                      $this->getIdThesaurus());
-    $child_id_length = strlen($id_thesaurus);
-    return $child_id_length != $parent_id_length+self::ID_KEY_LENGTH
-      ? null
-      : $loader->newInstance(['code' => $code,
-                              'id_thesaurus' => $id_thesaurus]);
+    return $loader->newInstance(['code' => $code,
+                                 'id_thesaurus' => $loader->findNextThesaurusChildId($code,
+                                                                                     $this->getIdThesaurus())]);
   }
 
 
@@ -352,14 +346,12 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
     if ($entry)
       return $entry;
 
-    if (!$entry = $this->newChildEntry())
-      return null;
-
-    $entry->updateAttributes(['id_origine' => $id_origine,
-                              'libelle' => $label]);
-    $entry->assertSave();
+    $entry = $this
+      ->newChildEntry()
+      ->updateAttributes(['id_origine' => $id_origine,
+                          'libelle' => $label]);
 
-    return $entry;
+    return $entry->save() ? $entry : null;
   }
 
 
@@ -377,7 +369,9 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
 
 
   public function validate() {
-    $this->check('' != $this->getLibelle(), $this->_('Vous devez définir le libellé'));
+    $this->_validateIdThesaurus();
+
+    $this->checkAttribute('libelle', '' != $this->getLibelle(), $this->_('Vous devez définir le libellé'));
     if (!$this->getRules())
       return true;
 
@@ -388,6 +382,17 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
   }
 
 
+  protected function _validateIdThesaurus() {
+    $my_key = substr($this->getIdThesaurus(), -self::ID_KEY_LENGTH);
+    $empty_key = str_repeat('0', self::ID_KEY_LENGTH);
+
+    $this->checkAttribute('id_thesaurus',
+                          $my_key != $empty_key,
+                          $this->_('Nombre maximum d\'élément à ce niveau déjà atteint (%s)',
+                                   str_repeat('9', self::ID_KEY_LENGTH)));
+  }
+
+
   public function deleteMeAndMyChildren() {
     $this->cleanRecords();
     $this->getLoader()->deleteAllFrom($this);
diff --git a/tests/library/Class/CodifThesaurusTest.php b/tests/library/Class/CodifThesaurusTest.php
index c3acb92bc7f6a499b28cf73ab459982a688861de..44f32e25bd1065c662ec9a35f11412dbd1e307e8 100644
--- a/tests/library/Class/CodifThesaurusTest.php
+++ b/tests/library/Class/CodifThesaurusTest.php
@@ -180,9 +180,12 @@ class CodifThesaurusTooManyValuesTest extends ModelTestCase {
 
   /** @test */
   public function shouldNotInsertMoreThan9999Child() {
-    Class_CodifThesaurus::find(723)->getOrCreateChild(strtoupper('métiers de la recherche'), 'métiers de la recherche');
+    Class_CodifThesaurus::find(723)
+      ->getOrCreateChild(strtoupper('métiers de la recherche'),
+                         'métiers de la recherche');
 
-    $this
-      ->assertNull(Class_CodifThesaurus::findFirstBy(['id_thesaurus' => 'TEST00010000']));
+    $this->assertEquals(2, Class_CodifThesaurus::count(),
+                        Class_CodifThesaurus::findFirstBy(['order' => 'id desc'])
+                        ->getIdThesaurus());
   }
 }
\ No newline at end of file