diff --git a/library/Class/DigitalResource/Batch.php b/library/Class/DigitalResource/Batch.php
index 0293ea57131135fffc4e45f4f81ac86b01500c00..9bb71cb82bb27b8a1a41a5c0eae3482df5e7533e 100644
--- a/library/Class/DigitalResource/Batch.php
+++ b/library/Class/DigitalResource/Batch.php
@@ -29,8 +29,7 @@ class Class_DigitalResource_Batch extends Class_Batch_RessourceNumerique {
 
 
   protected function _getService() {
-    $service = $this->_config->getService();
-    return new $service($this->_config);
+    return $this->_config->getServiceInstance();
   }
 
 
diff --git a/library/Class/DigitalResource/Config.php b/library/Class/DigitalResource/Config.php
index 0b2139bc2fc24ef6329c1026ec821335f2f807e0..4cd3a4df17cd5f0d8c229f67a1dbbb887a9cc6eb 100644
--- a/library/Class/DigitalResource/Config.php
+++ b/library/Class/DigitalResource/Config.php
@@ -30,7 +30,12 @@ class Class_DigitalResource_Config extends Class_Entity {
 
 
   public static function getName() {
-    return (new Class_DigitalResource_Name())->getName(static::class);
+    return static::getNameFor(static::class);
+  }
+
+
+  public static function getNameFor($class_name) {
+    return (new Class_DigitalResource_Name())->getName($class_name);
   }
 
 
@@ -39,6 +44,12 @@ class Class_DigitalResource_Config extends Class_Entity {
   }
 
 
+  public static function getInstanceFor($class_name) {
+    return Class_DigitalResource::getInstance()->configFor(static::getNameFor($class_name));
+  }
+
+
+
   public static function getInstanceFromController($controller) {
     return Class_DigitalResource::getInstance()->configFor((new Class_DigitalResource_Name())->getNameFromController($controller));
   }
@@ -228,4 +239,10 @@ class Class_DigitalResource_Config extends Class_Entity {
   public function getRecordSsoUrl($user, $record) {
     return $this->getAlbumSsoUrl($suer, $record->getAlbum());
   }
+
+
+  public function getServiceInstance() {
+    $service = $this->getService();
+    return new $service($this);
+  }
 }
\ No newline at end of file
diff --git a/library/Class/DigitalResource/Name.php b/library/Class/DigitalResource/Name.php
index 0268721d61b3a9a1d2b7405f637c7ed587a2fc53..fdc589a83ffb1a70118f52135a89f7867eb32a23 100644
--- a/library/Class/DigitalResource/Name.php
+++ b/library/Class/DigitalResource/Name.php
@@ -37,5 +37,4 @@ class Class_DigitalResource_Name {
     $path = array_reverse(explode('/', dirname(static::getPath($class))));
     return array_shift($path);
   }
-}
-?>
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/library/Class/DigitalResource/Service.php b/library/Class/DigitalResource/Service.php
index 6c620c786d649febb211f71be05ba45959222145..9d92f8e9ea08e04a6e13a3c964cc665f02b0aa1c 100644
--- a/library/Class/DigitalResource/Service.php
+++ b/library/Class/DigitalResource/Service.php
@@ -23,10 +23,17 @@
 class Class_DigitalResource_Service extends Class_WebService_BibNumerique_Abstract {
   protected $_config;
 
+
+  public static function getInstance() {
+    return Class_DigitalResource_Config::getInstanceFor(static::class)->getServiceInstance();
+  }
+
+
   public function __construct($config) {
     $this->_config = $config;
   }
 
+
   protected function getDocType() {
     return $this->_config->getDocType();
   }
@@ -41,4 +48,3 @@ class Class_DigitalResource_Service extends Class_WebService_BibNumerique_Abstra
     return $this->_config->getName();
   }
 }
-?>
\ No newline at end of file
diff --git a/library/digital_resources/Assimil/tests/AssimilTest.php b/library/digital_resources/Assimil/tests/AssimilTest.php
index 5ede329fdab5365025ca0d5fb1c7d98990bdbdf3..7f36790d030a3013c4f05b1790165ba1c08d4011 100644
--- a/library/digital_resources/Assimil/tests/AssimilTest.php
+++ b/library/digital_resources/Assimil/tests/AssimilTest.php
@@ -288,7 +288,7 @@ abstract class AssimilServiceTestCase extends ModelTestCase {
       ->whenCalled('open_url')
       ->answers(true);
 
-    $this->_service = new Assimil_Service(new Assimil_Config(new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(), 'Assimil')));
+    $this->_service = Assimil_Service::getInstance();
     Assimil_Service::setDefaultHttpClient($this->_http_client);
     $this->_service->harvest();
     Class_Album::clearCache();
@@ -410,7 +410,7 @@ class AssimilServiceSecondHarvestTest extends AssimilServiceTestCase {
       ->whenCalled('open_url')
       ->answers(true);
 
-    $service = new Assimil_Service(new Assimil_Config(new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(), 'Assimil')));
+    $service = Assimil_Service::getInstance();
     Assimil_Service::setDefaultHttpClient($http_client);
     $service->harvest();
     Class_Album::clearCache();
diff --git a/library/digital_resources/LaSourisQuiRaconte/tests/LaSourisQuiRaconteTest.php b/library/digital_resources/LaSourisQuiRaconte/tests/LaSourisQuiRaconteTest.php
index 6cebb813c9b96fd0be1e729d079892c59b79bdca..2c66afcfb442bf4b8d44891e96d657c4eb4e5c14 100644
--- a/library/digital_resources/LaSourisQuiRaconte/tests/LaSourisQuiRaconteTest.php
+++ b/library/digital_resources/LaSourisQuiRaconte/tests/LaSourisQuiRaconteTest.php
@@ -36,10 +36,7 @@ class LaSourisQuiRaconteFixtures {
                         ->answers('a picture');
     LaSourisQuiRaconte_Service::setDefaultHttpClient($http_client);
 
-    return new LaSourisQuiRaconte_Service(
-                    new LaSourisQuiRaconte_Config(
-                                new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(),
-                                                                  'LaSourisQuiRaconte')));
+    return LaSourisQuiRaconte_Service::getInstance();
   }
 
 
diff --git a/library/digital_resources/Lekiosk/tests/LeKioskTest.php b/library/digital_resources/Lekiosk/tests/LeKioskTest.php
index bd14d04f72c2ff164c4c7743519a1196c3924239..34db4bb958a764747c18f4ab1de0f006c70b3947 100644
--- a/library/digital_resources/Lekiosk/tests/LeKioskTest.php
+++ b/library/digital_resources/Lekiosk/tests/LeKioskTest.php
@@ -41,8 +41,7 @@ class LekioskAdminVars {
 
 abstract class LeKioskLinkModeLinkTestCase extends ModelTestCase {
   protected
-    $_storm_default_to_volatile = true,
-    $_lekiosk_config;
+    $_storm_default_to_volatile = true;
 
 
   public function setUp() {
@@ -53,10 +52,6 @@ abstract class LeKioskLinkModeLinkTestCase extends ModelTestCase {
                                     'mail_site' => '']);
 
     LekioskAdminVars::activate();
-
-    $this->_lekiosk_config =
-      new Assimil_Config(new Class_DigitalResource_Wrapper (Class_DigitalResource::getInstance(), 'LeKiosk'));
-    $this->_module_menu = new Class_DigitalResource_ModuleMenu($this->_lekiosk_config);
   }
 }
 
diff --git a/library/digital_resources/Musicme/tests/MusicmeTest.php b/library/digital_resources/Musicme/tests/MusicmeTest.php
index e1ef355e6846b5247aa0f84f416125e43204613f..087c824b9b720c9a02d32e0eff42450b7f85f138 100644
--- a/library/digital_resources/Musicme/tests/MusicmeTest.php
+++ b/library/digital_resources/Musicme/tests/MusicmeTest.php
@@ -58,13 +58,11 @@ class MusicmeFixtures {
 
 
     Musicme_Service::setDefaultHttpClient($http_client);
-    return new Musicme_Service(
-                    new Musicme_Config(
-                                       new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(),
-                                                                  'Musicme')));
 
+    return Musicme_Service::getInstance();
   }
 
+
   public function logValidUser() {
     $group = $this->fixture('Class_UserGroup', ['id' => 1]);
 
diff --git a/library/digital_resources/Omeka/Service.php b/library/digital_resources/Omeka/Service.php
index e187862f535c700cb5b8fd7043df988a4cfef096..bdad451fb34904e936e3d57cc422c80d4c57eee1 100644
--- a/library/digital_resources/Omeka/Service.php
+++ b/library/digital_resources/Omeka/Service.php
@@ -23,6 +23,11 @@
 class Omeka_Service extends Class_WebService_BibNumerique_AbstractOAI {
   protected $_config;
 
+  public static function getInstance() {
+    return Class_DigitalResource_Config::getInstanceFor(static::class)->getServiceInstance();
+  }
+
+
   public function __construct($config) {
     $this->_config = $config;
     $this->_oaiws = $config->newOAIClient();
diff --git a/library/digital_resources/Omeka/tests/OmekaTest.php b/library/digital_resources/Omeka/tests/OmekaTest.php
index 64d00ef81210739e4af806922be30f80e4087fef..0e32554defc59287bb7905b1bf697d0536043e83 100644
--- a/library/digital_resources/Omeka/tests/OmekaTest.php
+++ b/library/digital_resources/Omeka/tests/OmekaTest.php
@@ -36,10 +36,7 @@ class OmekaFixtures {
                         ->answers(file_get_contents(__DIR__ . '/omeka_oai_page_1.xml'));
     Omeka_Service::setDefaultHttpClient($http_client);
 
-    return new Omeka_Service(
-             new Omeka_Config(
-               new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(),
-                                                 'Omeka')));
+    return Omeka_Service::getInstance();
   }
 }
 
@@ -148,7 +145,7 @@ class OmekaHarvestedTest extends AbstractControllerTestCase {
   /** @test */
   public function withoutRootURLShouldBeDisabled() {
     Class_AdminVar::set('Omeka_ROOT_URL', '');
-    $this->assertFalse((new Class_DigitalResource())->configFor('Omeka')->isEnabled());
+    $this->assertFalse(Omeka_Config::getInstance()->isEnabled());
   }
 }
 ?>
\ No newline at end of file
diff --git a/library/digital_resources/Skilleos/tests/SkilleosTest.php b/library/digital_resources/Skilleos/tests/SkilleosTest.php
index 634a8a92d754f789188439b45c75374bce2a33cc..e58a6dd042c642b4b8909e9aa65d8801c3ab884e 100644
--- a/library/digital_resources/Skilleos/tests/SkilleosTest.php
+++ b/library/digital_resources/Skilleos/tests/SkilleosTest.php
@@ -39,30 +39,6 @@ class SkilleosAdminVars {
 
 
 
-
-abstract class SkilleosLinkModeLinkTestCase extends ModelTestCase {
-  protected
-    $_storm_default_to_volatile = true,
-    $_skilleos_config;
-
-
-  public function setUp() {
-    parent::setUp();
-    $this->fixture('Class_Profil', [
-                                    'id' => 1,
-                                    'libelle' => 'portail',
-                                    'mail_site' => '']);
-
-    SkilleosAdminVars::activate();
-
-    $this->_skilleos_config =
-      new Skilleos_Config(new Class_DigitalResource_Wrapper (Class_DigitalResource::getInstance(), 'Skilleos'));
-    $this->_module_menu = new Class_DigitalResource_ModuleMenu($this->_skilleos_config);
-  }
-}
-
-
-
 class SkilleosModulesControllerUserWithGroupWithRightTest
   extends AbstractControllerTestCase {
 
@@ -229,7 +205,7 @@ abstract class SkilleosServiceTestCase extends AbstractControllerTestCase {
 
                         ->beStrict();
 
-    $this->_service = new Skilleos_Service(new Skilleos_Config(new Class_DigitalResource_Wrapper(Class_DigitalResource::getInstance(), 'Skilleos')));
+    $this->_service = Skilleos_Service::getInstance();
 
     Skilleos_Service::setDefaultHttpClient($http_client);