diff --git a/library/Class/CodifThesaurus.php b/library/Class/CodifThesaurus.php
index 62f47cbe199208800c8087f0a8e27e1f3db8f8dd..d0dcb9fed4854d6fc3824fafe28fd856a3e06700 100644
--- a/library/Class/CodifThesaurus.php
+++ b/library/Class/CodifThesaurus.php
@@ -225,12 +225,13 @@ class CodifThesaurusLoader extends Storm_Model_Loader {
 
 
   public function findParent($id_thesaurus) {
-    $parent_str = substr($id_thesaurus, 0, strlen($id_thesaurus) - (4 - strlen($id_thesaurus) % 4));
+    $parent_str = substr($id_thesaurus,
+                         0,
+                         strlen($id_thesaurus) - Class_CodifThesaurus::ID_KEY_LENGTH);
     if (!$parent_str)
       return null;
 
-    $parent = Class_CodifThesaurus::findFirstBy(['where' => 'id_thesaurus like "'.$parent_str.'%" and LENGTH(id_thesaurus)<'.strlen($id_thesaurus),
-                                                 'order' => 'id_thesaurus desc']);
+    $parent = Class_CodifThesaurus::findFirstBy(['id_thesaurus' => $parent_str]);
     if (!$parent)
       return $this->findParent($parent_str);
 
@@ -887,8 +888,8 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
 
 
   public function getParentId() {
-    return $this->getParent()
-      ? $this->getParent()->getId()
+    return ($parent = $this->getParent())
+      ? $parent->getId()
       : null;
   }
 
diff --git a/tests/library/Class/CodifThesaurusTest.php b/tests/library/Class/CodifThesaurusTest.php
index 41bb52071ffb6c30cba64a3681e4fb1005820831..94c67c3e83d16dfb9f45775d58fdab6aca44f2fa 100644
--- a/tests/library/Class/CodifThesaurusTest.php
+++ b/tests/library/Class/CodifThesaurusTest.php
@@ -87,19 +87,25 @@ class CodifThesaurusCommonTest extends ModelTestCase {
 
   /** @test */
   public function libelleHierarchiqueForCultureShouldBeConfGesticulee() {
-    $this->onLoaderOfModel('Class_CodifThesaurus')
-         ->whenCalled('findParent')
-         ->with('THEM000100503000')
-         ->answers(Class_CodifThesaurus::newInstanceWithId(70,['id_thesaurus'=>'THEM00010050'])->setLibelle('Spectacles'))
+    $this->fixture(Class_CodifThesaurus::class,
+                   ['id' => 20,
+                    'id_thesaurus'=>'THEM0001',
+                    'libelle' => 'Culture']);
+
+    $this->fixture(Class_CodifThesaurus::class,
+                   ['id' => 70,
+                    'id_thesaurus'=>'THEM00010050',
+                    'libelle' => 'Spectacles']);
 
-         ->whenCalled('findParent')
-         ->with('THEM00010050')
-         ->answers(Class_CodifThesaurus::newInstanceWithId(20,['id_thesaurus'=>'THEM0001'])->setLibelle('Culture'));
 
+    $gesticule = $this->fixture(Class_CodifThesaurus::class,
+                                ['id' => 10,
+                                 'id_thesaurus'=>'THEM0001005066663000',
+                                 'libelle' => 'Conférences Gesticulées']);
 
 
     $this->assertEquals('Culture : Spectacles : Conférences Gesticulées',
-                        Class_CodifThesaurus::getLibelleHierarchique(Class_CodifThesaurus::newInstanceWithId(10,['id_thesaurus'=>'THEM000100503000'])->setLibelle('Conférences Gesticulées')));
+                        Class_CodifThesaurus::getLibelleHierarchique($gesticule));
   }