From ab83d0dd27e46e733ecb49f25789bfb318852ac7 Mon Sep 17 00:00:00 2001
From: Philipp <admin@philipp.info>
Date: Sat, 23 Oct 2021 11:29:16 +0200
Subject: [PATCH] Restructure (P)Config to follow new paradigm

---
 src/App.php                                   |   5 +-
 src/App/Mode.php                              |   2 +-
 src/Console/AutomaticInstallation.php         |   4 +-
 src/Console/DatabaseStructure.php             |   2 +-
 src/Core/Config/{ => Cache}/Cache.php         |   2 +-
 .../Config/Cache}/ConfigFileLoader.php        |   4 +-
 .../Config}/Factory/ConfigFactory.php         |  41 ++-----
 src/Core/Config/IConfig.php                   |   2 +
 .../Config => Core/Config/Model}/Config.php   |  32 +++++-
 src/Core/Config/Model/DbaUtils.php            |  59 ++++++++++
 src/Core/{ => Config/Type}/BaseConfig.php     |  14 +--
 src/Core/Config/{ => Type}/JitConfig.php      |  12 +-
 src/Core/Config/{ => Type}/PreloadConfig.php  |  12 +-
 src/Core/Installer.php                        |   8 +-
 src/Core/PConfig/{ => Cache}/Cache.php        |   2 +-
 src/Core/PConfig/Factory/PConfigFactory.php   |  48 ++++++++
 src/Core/PConfig/IPConfig.php                 |   4 +-
 .../Config => Core/PConfig/Model}/PConfig.php |  33 +++++-
 src/Core/{ => PConfig/Type}/BasePConfig.php   |  16 +--
 src/Core/PConfig/{ => Type}/JitPConfig.php    |  10 +-
 .../PConfig/{ => Type}/PreloadPConfig.php     |  10 +-
 src/Database/Database.php                     |   2 +-
 src/Model/Config/DbaConfig.php                | 105 ------------------
 src/Module/Admin/Summary.php                  |   6 +-
 src/Module/Install.php                        |   2 +-
 src/Util/Profiler.php                         |   4 +-
 static/dependencies.config.php                |  17 +--
 tests/FixtureTest.php                         |   2 +-
 tests/Util/AppMockTrait.php                   |   8 +-
 tests/functional/DependencyCheckTest.php      |   4 +-
 tests/src/App/ModeTest.php                    |   2 +-
 .../AutomaticInstallationConsoleTest.php      |   4 +-
 tests/src/Core/Cache/DatabaseCacheTest.php    |   3 +-
 .../src/Core/Config/{ => Cache}/CacheTest.php |  54 ++++-----
 .../Config/Cache}/ConfigFileLoaderTest.php    |  34 +++---
 tests/src/Core/Config/ConfigTest.php          |  40 +++----
 tests/src/Core/Config/JitConfigTest.php       |   2 +-
 tests/src/Core/Config/PreloadConfigTest.php   |   2 +-
 tests/src/Core/InstallerTest.php              |   2 +-
 .../src/Core/Lock/DatabaseLockDriverTest.php  |   3 +-
 tests/src/Core/Lock/SemaphoreLockTest.php     |   2 +-
 .../Core/PConfig/{ => Cache}/CacheTest.php    |  28 ++---
 tests/src/Core/PConfig/JitPConfigTest.php     |   2 +-
 tests/src/Core/PConfig/PConfigTest.php        |  30 ++---
 tests/src/Core/PConfig/PreloadPConfigTest.php |   4 +-
 tests/src/Core/StorageManagerTest.php         |   8 +-
 tests/src/Model/ProcessTest.php               |   3 +-
 .../src/Model/Storage/DatabaseStorageTest.php |   2 +-
 tests/src/Util/ProfilerTest.php               |   2 +-
 49 files changed, 368 insertions(+), 331 deletions(-)
 rename src/Core/Config/{ => Cache}/Cache.php (99%)
 rename src/{Util => Core/Config/Cache}/ConfigFileLoader.php (99%)
 rename src/{ => Core/Config}/Factory/ConfigFactory.php (61%)
 rename src/{Model/Config => Core/Config/Model}/Config.php (87%)
 create mode 100644 src/Core/Config/Model/DbaUtils.php
 rename src/Core/{ => Config/Type}/BaseConfig.php (73%)
 rename src/Core/Config/{ => Type}/JitConfig.php (90%)
 rename src/Core/Config/{ => Type}/PreloadConfig.php (90%)
 rename src/Core/PConfig/{ => Cache}/Cache.php (99%)
 create mode 100644 src/Core/PConfig/Factory/PConfigFactory.php
 rename src/{Model/Config => Core/PConfig/Model}/PConfig.php (87%)
 rename src/Core/{ => PConfig/Type}/BasePConfig.php (75%)
 rename src/Core/PConfig/{ => Type}/JitPConfig.php (90%)
 rename src/Core/PConfig/{ => Type}/PreloadPConfig.php (90%)
 delete mode 100644 src/Model/Config/DbaConfig.php
 rename tests/src/Core/Config/{ => Cache}/CacheTest.php (87%)
 rename tests/src/{Util/Config => Core/Config/Cache}/ConfigFileLoaderTest.php (94%)
 rename tests/src/Core/PConfig/{ => Cache}/CacheTest.php (91%)

diff --git a/src/App.php b/src/App.php
index 3ef9bdb4ed..cd217c34e7 100644
--- a/src/App.php
+++ b/src/App.php
@@ -25,10 +25,10 @@ use Exception;
 use Friendica\App\Arguments;
 use Friendica\App\BaseURL;
 use Friendica\App\Module;
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Module\Maintenance;
 use Friendica\Security\Authentication;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Core\PConfig\IPConfig;
 use Friendica\Core\L10n;
@@ -39,7 +39,6 @@ use Friendica\Model\Contact;
 use Friendica\Model\Profile;
 use Friendica\Module\Special\HTTPException as ModuleHTTPException;
 use Friendica\Network\HTTPException;
-use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\HTTPSignature;
 use Friendica\Util\Profiler;
diff --git a/src/App/Mode.php b/src/App/Mode.php
index 7210184a0d..9f7a34a53e 100644
--- a/src/App/Mode.php
+++ b/src/App/Mode.php
@@ -22,7 +22,7 @@
 namespace Friendica\App;
 
 use Detection\MobileDetect;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Database\Database;
 use Friendica\Util\BasePath;
 
diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php
index 5d608b00d5..9ef82524aa 100644
--- a/src/Console/AutomaticInstallation.php
+++ b/src/Console/AutomaticInstallation.php
@@ -25,7 +25,7 @@ use Asika\SimpleConsole\Console;
 use Friendica\App;
 use Friendica\App\BaseURL;
 use Friendica\Core\Config\IConfig;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Installer;
 use Friendica\Core\Theme;
 use Friendica\Database\Database;
@@ -36,7 +36,7 @@ class AutomaticInstallation extends Console
 {
 	/** @var App\Mode */
 	private $appMode;
-	/** @var Cache */
+	/** @var \Friendica\Core\Config\Cache\Cache */
 	private $configCache;
 	/** @var IConfig */
 	private $config;
diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php
index b44400c01a..1083a512d4 100644
--- a/src/Console/DatabaseStructure.php
+++ b/src/Console/DatabaseStructure.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Console;
 
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Update;
 use Friendica\Database\Database;
 use Friendica\Database\DBStructure;
diff --git a/src/Core/Config/Cache.php b/src/Core/Config/Cache/Cache.php
similarity index 99%
rename from src/Core/Config/Cache.php
rename to src/Core/Config/Cache/Cache.php
index 8d2eb1a97e..77e6562ca6 100644
--- a/src/Core/Config/Cache.php
+++ b/src/Core/Config/Cache/Cache.php
@@ -19,7 +19,7 @@
  *
  */
 
-namespace Friendica\Core\Config;
+namespace Friendica\Core\Config\Cache;
 
 use ParagonIE\HiddenString\HiddenString;
 
diff --git a/src/Util/ConfigFileLoader.php b/src/Core/Config/Cache/ConfigFileLoader.php
similarity index 99%
rename from src/Util/ConfigFileLoader.php
rename to src/Core/Config/Cache/ConfigFileLoader.php
index aabefc18bb..4b1a09c1dc 100644
--- a/src/Util/ConfigFileLoader.php
+++ b/src/Core/Config/Cache/ConfigFileLoader.php
@@ -19,11 +19,11 @@
  *
  */
 
-namespace Friendica\Util;
+namespace Friendica\Core\Config\Cache;
 
 use Exception;
 use Friendica\Core\Addon;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 
 /**
  * The ConfigFileLoader loads config-files and stores them in a ConfigCache ( @see Cache )
diff --git a/src/Factory/ConfigFactory.php b/src/Core/Config/Factory/ConfigFactory.php
similarity index 61%
rename from src/Factory/ConfigFactory.php
rename to src/Core/Config/Factory/ConfigFactory.php
index cf55640960..9546a0248f 100644
--- a/src/Factory/ConfigFactory.php
+++ b/src/Core/Config/Factory/ConfigFactory.php
@@ -19,14 +19,13 @@
  *
  */
 
-namespace Friendica\Factory;
+namespace Friendica\Core\Config\Factory;
 
 use Exception;
 use Friendica\Core\Config;
-use Friendica\Core\Config\Cache;
-use Friendica\Model\Config\Config as ConfigModel;
-use Friendica\Model\Config\PConfig as PConfigModel;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Cache\Cache;
+use Friendica\Core\Config\Model\Config as ConfigModel;
+use Friendica\Core\Config\Cache\ConfigFileLoader;
 
 class ConfigFactory
 {
@@ -55,7 +54,7 @@ class ConfigFactory
 	 * @param string $basePath The basepath of FRIENDICA
 	 * @param array $serer the $_SERVER array
 	 *
-	 * @return ConfigFileLoader
+	 * @return \Friendica\Core\Config\Cache\ConfigFileLoader
 	 */
 	public function createConfigFileLoader(string $basePath, array $server = [])
 	{
@@ -70,7 +69,7 @@ class ConfigFactory
 	}
 
 	/**
-	 * @param ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig)
+	 * @param \Friendica\Core\Config\Cache\ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig)
 	 *
 	 * @return Cache
 	 *
@@ -85,38 +84,20 @@ class ConfigFactory
 	}
 
 	/**
-	 * @param Cache       $configCache The config cache of this adapter
-	 * @param ConfigModel $configModel The configuration model
+	 * @param \Friendica\Core\Config\Cache\Cache $configCache The config cache of this adapter
+	 * @param ConfigModel                        $configModel The configuration model
 	 *
 	 * @return Config\IConfig
 	 */
-	public function createConfig(Cache $configCache, ConfigModel $configModel)
+	public function create(Cache $configCache, ConfigModel $configModel)
 	{
 		if ($configCache->get('system', 'config_adapter') === 'preload') {
-			$configuration = new Config\PreloadConfig($configCache, $configModel);
+			$configuration = new Config\Type\PreloadConfig($configCache, $configModel);
 		} else {
-			$configuration = new Config\JitConfig($configCache, $configModel);
+			$configuration = new Config\Type\JitConfig($configCache, $configModel);
 		}
 
 
-		return $configuration;
-	}
-
-	/**
-	 * @param Cache                         $configCache  The config cache
-	 * @param \Friendica\Core\PConfig\Cache $pConfigCache The personal config cache
-	 * @param PConfigModel                  $configModel  The configuration model
-	 *
-	 * @return \Friendica\Core\PConfig\IPConfig
-	 */
-	public function createPConfig(Cache $configCache, \Friendica\Core\PConfig\Cache $pConfigCache, PConfigModel $configModel)
-	{
-		if ($configCache->get('system', 'config_adapter') === 'preload') {
-			$configuration = new \Friendica\Core\PConfig\PreloadPConfig($pConfigCache, $configModel);
-		} else {
-			$configuration = new \Friendica\Core\PConfig\JitPConfig($pConfigCache, $configModel);
-		}
-
 		return $configuration;
 	}
 }
diff --git a/src/Core/Config/IConfig.php b/src/Core/Config/IConfig.php
index 81ea1afd76..21cee2e924 100644
--- a/src/Core/Config/IConfig.php
+++ b/src/Core/Config/IConfig.php
@@ -21,6 +21,8 @@
 
 namespace Friendica\Core\Config;
 
+use Friendica\Core\Config\Cache\Cache;
+
 /**
  * Interface for accessing system wide configurations
  */
diff --git a/src/Model/Config/Config.php b/src/Core/Config/Model/Config.php
similarity index 87%
rename from src/Model/Config/Config.php
rename to src/Core/Config/Model/Config.php
index ecc6b6f665..bca2145fb1 100644
--- a/src/Model/Config/Config.php
+++ b/src/Core/Config/Model/Config.php
@@ -19,14 +19,36 @@
  *
  */
 
-namespace Friendica\Model\Config;
+namespace Friendica\Core\Config\Model;
 
+use Friendica\Database\Database;
 
 /**
  * The Config model backend, which is using the general DB-model backend for configs
  */
-class Config extends DbaConfig
+class Config
 {
+	/** @var Database */
+	protected $dba;
+
+	/**
+	 * @param Database $dba The database connection of this model
+	 */
+	public function __construct(Database $dba)
+	{
+		$this->dba = $dba;
+	}
+
+	/**
+	 * Checks if the model is currently connected
+	 *
+	 * @return bool
+	 */
+	public function isConnected()
+	{
+		return $this->dba->isConnected();
+	}
+
 	/**
 	 * Loads all configuration values and returns the loaded category as an array.
 	 *
@@ -49,7 +71,7 @@ class Config extends DbaConfig
 		while ($config = $this->dba->fetch($configs)) {
 
 			$key   = $config['k'];
-			$value = $this->toConfigValue($config['v']);
+			$value = DbaUtils::toConfigValue($config['v']);
 
 			// just save it in case it is set
 			if (isset($value)) {
@@ -82,7 +104,7 @@ class Config extends DbaConfig
 
 		$config = $this->dba->selectFirst('config', ['v'], ['cat' => $cat, 'k' => $key]);
 		if ($this->dba->isResult($config)) {
-			$value = $this->toConfigValue($config['v']);
+			$value = DbaUtils::toConfigValue($config['v']);
 
 			// just return it in case it is set
 			if (isset($value)) {
@@ -122,7 +144,7 @@ class Config extends DbaConfig
 			return true;
 		}
 
-		$dbvalue = $this->toDbValue($value);
+		$dbvalue = DbaUtils::toDbValue($value);
 
 		$result = $this->dba->update('config', ['v' => $dbvalue], ['cat' => $cat, 'k' => $key], true);
 
diff --git a/src/Core/Config/Model/DbaUtils.php b/src/Core/Config/Model/DbaUtils.php
new file mode 100644
index 0000000000..da2b897378
--- /dev/null
+++ b/src/Core/Config/Model/DbaUtils.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Friendica\Core\Config\Model;
+
+class DbaUtils
+{
+	/**
+	 * Formats a DB value to a config value
+	 * - null   = The db-value isn't set
+	 * - bool   = The db-value is either '0' or '1'
+	 * - array  = The db-value is a serialized array
+	 * - string = The db-value is a string
+	 *
+	 * Keep in mind that there aren't any numeric/integer config values in the database
+	 *
+	 * @param null|string $value
+	 *
+	 * @return null|array|string
+	 */
+	public static function toConfigValue($value)
+	{
+		if (!isset($value)) {
+			return null;
+		}
+
+		switch (true) {
+			// manage array value
+			case preg_match("|^a:[0-9]+:{.*}$|s", $value):
+				return unserialize($value);
+
+			default:
+				return $value;
+		}
+	}
+
+	/**
+	 * Formats a config value to a DB value (string)
+	 *
+	 * @param mixed $value
+	 *
+	 * @return string
+	 */
+	public static function toDbValue($value): string
+	{
+		// if not set, save an empty string
+		if (!isset($value)) {
+			return '';
+		}
+
+		switch (true) {
+			// manage arrays
+			case is_array($value):
+				return serialize($value);
+
+			default:
+				return (string)$value;
+		}
+	}
+}
diff --git a/src/Core/BaseConfig.php b/src/Core/Config/Type/BaseConfig.php
similarity index 73%
rename from src/Core/BaseConfig.php
rename to src/Core/Config/Type/BaseConfig.php
index f8583de46f..86a847a7b6 100644
--- a/src/Core/BaseConfig.php
+++ b/src/Core/Config/Type/BaseConfig.php
@@ -19,16 +19,16 @@
  *
  */
 
-namespace Friendica\Core;
+namespace Friendica\Core\Config\Type;
 
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Model;
 
 /**
  * This class is responsible for all system-wide configuration values in Friendica
  * There are two types of storage
- * - The Config-Files    (loaded into the FileCache @see Cache\ConfigCache)
+ * - The Config-Files    (loaded into the FileCache @see ConfigCache)
  * - The Config-DB-Table (per Config-DB-model @see Model\Config\Config)
  */
 abstract class BaseConfig implements IConfig
@@ -39,15 +39,15 @@ abstract class BaseConfig implements IConfig
 	protected $configCache;
 
 	/**
-	 * @var Model\Config\Config
+	 * @var \Friendica\Core\Config\Model\Config
 	 */
 	protected $configModel;
 
 	/**
-	 * @param Cache $configCache The configuration cache (based on the config-files)
-	 * @param Model\Config\Config          $configModel The configuration model
+	 * @param Cache                               $configCache The configuration cache (based on the config-files)
+	 * @param \Friendica\Core\Config\Model\Config $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\Config $configModel)
+	public function __construct(Cache $configCache, \Friendica\Core\Config\Model\Config $configModel)
 	{
 		$this->configCache = $configCache;
 		$this->configModel = $configModel;
diff --git a/src/Core/Config/JitConfig.php b/src/Core/Config/Type/JitConfig.php
similarity index 90%
rename from src/Core/Config/JitConfig.php
rename to src/Core/Config/Type/JitConfig.php
index 8eb4ace1ed..5e1fe24c4b 100644
--- a/src/Core/Config/JitConfig.php
+++ b/src/Core/Config/Type/JitConfig.php
@@ -19,10 +19,10 @@
  *
  */
 
-namespace Friendica\Core\Config;
+namespace Friendica\Core\Config\Type;
 
-use Friendica\Core\BaseConfig;
-use Friendica\Model;
+use Friendica\Core\Config\Cache\Cache;
+use Friendica\Core\Config\Model\Config;
 
 /**
  * This class implements the Just-In-Time configuration, which will cache
@@ -39,10 +39,10 @@ class JitConfig extends BaseConfig
 	private $db_loaded;
 
 	/**
-	 * @param Cache               $configCache The configuration cache (based on the config-files)
-	 * @param Model\Config\Config $configModel The configuration model
+	 * @param Cache                               $configCache The configuration cache (based on the config-files)
+	 * @param Config $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\Config $configModel)
+	public function __construct(Cache $configCache, Config $configModel)
 	{
 		parent::__construct($configCache, $configModel);
 		$this->db_loaded = [];
diff --git a/src/Core/Config/PreloadConfig.php b/src/Core/Config/Type/PreloadConfig.php
similarity index 90%
rename from src/Core/Config/PreloadConfig.php
rename to src/Core/Config/Type/PreloadConfig.php
index a72fd167f1..c6abfcd9fc 100644
--- a/src/Core/Config/PreloadConfig.php
+++ b/src/Core/Config/Type/PreloadConfig.php
@@ -19,10 +19,10 @@
  *
  */
 
-namespace Friendica\Core\Config;
+namespace Friendica\Core\Config\Type;
 
-use Friendica\Core\BaseConfig;
-use Friendica\Model;
+use Friendica\Core\Config\Cache\Cache;
+use Friendica\Core\Config\Model\Config;
 
 /**
  * This class implements the preload configuration, which will cache
@@ -36,10 +36,10 @@ class PreloadConfig extends BaseConfig
 	private $config_loaded;
 
 	/**
-	 * @param Cache               $configCache The configuration cache (based on the config-files)
-	 * @param Model\Config\Config $configModel The configuration model
+	 * @param Cache                               $configCache The configuration cache (based on the config-files)
+	 * @param Config $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\Config $configModel)
+	public function __construct(Cache $configCache, Config $configModel)
 	{
 		parent::__construct($configCache, $configModel);
 		$this->config_loaded = false;
diff --git a/src/Core/Installer.php b/src/Core/Installer.php
index 96fe941564..fc0da6cbed 100644
--- a/src/Core/Installer.php
+++ b/src/Core/Installer.php
@@ -23,7 +23,7 @@ namespace Friendica\Core;
 
 use DOMDocument;
 use Exception;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Database\Database;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
@@ -278,7 +278,7 @@ class Installer
 			$cmd = "$phppath -v";
 			$result = trim(shell_exec($cmd));
 			$passed2 = (strpos($result, "(cli)") !== false);
-			list($result) = explode("\n", $result);
+			[$result] = explode("\n", $result);
 			$help = "";
 			if (!$passed2) {
 				$help .= DI::l10n()->t("PHP executable is not the php cli binary \x28could be cgi-fgci version\x29") . EOL;
@@ -678,8 +678,8 @@ class Installer
 	/**
 	 * Setup the default cache for a new installation
 	 *
-	 * @param Cache  $configCache The configuration cache
-	 * @param string $basePath    The determined basepath
+	 * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache
+	 * @param string                             $basePath    The determined basepath
 	 *
 	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
 	 */
diff --git a/src/Core/PConfig/Cache.php b/src/Core/PConfig/Cache/Cache.php
similarity index 99%
rename from src/Core/PConfig/Cache.php
rename to src/Core/PConfig/Cache/Cache.php
index d19c34d80a..97554b2fe9 100644
--- a/src/Core/PConfig/Cache.php
+++ b/src/Core/PConfig/Cache/Cache.php
@@ -19,7 +19,7 @@
  *
  */
 
-namespace Friendica\Core\PConfig;
+namespace Friendica\Core\PConfig\Cache;
 
 use ParagonIE\HiddenString\HiddenString;
 
diff --git a/src/Core/PConfig/Factory/PConfigFactory.php b/src/Core/PConfig/Factory/PConfigFactory.php
new file mode 100644
index 0000000000..eb248f14ad
--- /dev/null
+++ b/src/Core/PConfig/Factory/PConfigFactory.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Core\PConfig\Factory;
+
+use Friendica\Core\Config\Cache\Cache;
+use Friendica\Core\PConfig\IPConfig;
+use Friendica\Core\PConfig\Model\PConfig as PConfigModel;
+use Friendica\Core\PConfig\Type;
+
+class PConfigFactory
+{
+	/**
+	 * @param Cache                               $configCache  The config cache
+	 * @param \Friendica\Core\PConfig\Cache\Cache $pConfigCache The personal config cache
+	 * @param PConfigModel                        $configModel  The configuration model
+	 *
+	 * @return IPConfig
+	 */
+	public function create(Cache $configCache, \Friendica\Core\PConfig\Cache\Cache $pConfigCache, PConfigModel $configModel)
+	{
+		if ($configCache->get('system', 'config_adapter') === 'preload') {
+			$configuration = new Type\PreloadPConfig($pConfigCache, $configModel);
+		} else {
+			$configuration = new Type\JitPConfig($pConfigCache, $configModel);
+		}
+
+		return $configuration;
+	}
+}
diff --git a/src/Core/PConfig/IPConfig.php b/src/Core/PConfig/IPConfig.php
index 25d81bd7e9..1795a60392 100644
--- a/src/Core/PConfig/IPConfig.php
+++ b/src/Core/PConfig/IPConfig.php
@@ -21,6 +21,8 @@
 
 namespace Friendica\Core\PConfig;
 
+use Friendica\Core\Config\Cache\Cache;
+
 /**
  * Interface for accessing user specific configurations
  */
@@ -95,7 +97,7 @@ interface IPConfig
 	/**
 	 * Returns the Config Cache
 	 *
-	 * @return Cache
+	 * @return \Friendica\Core\PConfig\Cache\Cache
 	 */
 	function getCache();
 }
diff --git a/src/Model/Config/PConfig.php b/src/Core/PConfig/Model/PConfig.php
similarity index 87%
rename from src/Model/Config/PConfig.php
rename to src/Core/PConfig/Model/PConfig.php
index 0aeb0df42b..35ff34a56b 100644
--- a/src/Model/Config/PConfig.php
+++ b/src/Core/PConfig/Model/PConfig.php
@@ -19,14 +19,37 @@
  *
  */
 
-namespace Friendica\Model\Config;
+namespace Friendica\Core\PConfig\Model;
 
+use Friendica\Core\Config\Model\DbaUtils;
+use Friendica\Database\Database;
 
 /**
  * The Config model backend for users, which is using the general DB-model backend for user-configs
  */
-class PConfig extends DbaConfig
+class PConfig
 {
+	/** @var Database */
+	protected $dba;
+
+	/**
+	 * @param Database $dba The database connection of this model
+	 */
+	public function __construct(Database $dba)
+	{
+		$this->dba = $dba;
+	}
+
+	/**
+	 * Checks if the model is currently connected
+	 *
+	 * @return bool
+	 */
+	public function isConnected()
+	{
+		return $this->dba->isConnected();
+	}
+
 	/**
 	 * Loads all configuration values and returns the loaded category as an array.
 	 *
@@ -49,7 +72,7 @@ class PConfig extends DbaConfig
 
 		while ($config = $this->dba->fetch($configs)) {
 			$key   = $config['k'];
-			$value = $this->toConfigValue($config['v']);
+			$value = DbaUtils::toConfigValue($config['v']);
 
 			// just save it in case it is set
 			if (isset($value)) {
@@ -83,7 +106,7 @@ class PConfig extends DbaConfig
 
 		$config = $this->dba->selectFirst('pconfig', ['v'], ['uid' => $uid, 'cat' => $cat, 'k' => $key]);
 		if ($this->dba->isResult($config)) {
-			$value = $this->toConfigValue($config['v']);
+			$value = DbaUtils::toConfigValue($config['v']);
 
 			// just return it in case it is set
 			if (isset($value)) {
@@ -125,7 +148,7 @@ class PConfig extends DbaConfig
 			return true;
 		}
 
-		$dbvalue = $this->toDbValue($value);
+		$dbvalue = DbaUtils::toDbValue($value);
 
 		$result = $this->dba->update('pconfig', ['v' => $dbvalue], ['uid' => $uid, 'cat' => $cat, 'k' => $key], true);
 
diff --git a/src/Core/BasePConfig.php b/src/Core/PConfig/Type/BasePConfig.php
similarity index 75%
rename from src/Core/BasePConfig.php
rename to src/Core/PConfig/Type/BasePConfig.php
index 366a8e6061..9ae374f2e0 100644
--- a/src/Core/BasePConfig.php
+++ b/src/Core/PConfig/Type/BasePConfig.php
@@ -19,9 +19,9 @@
  *
  */
 
-namespace Friendica\Core;
+namespace Friendica\Core\PConfig\Type;
 
-use Friendica\Core\PConfig\Cache;
+use Friendica\Core\PConfig\Cache\Cache;
 use Friendica\Core\PConfig\IPConfig;
 use Friendica\Model;
 
@@ -35,20 +35,20 @@ use Friendica\Model;
 abstract class BasePConfig implements IPConfig
 {
 	/**
-	 * @var Cache
+	 * @var \Friendica\Core\PConfig\Cache\Cache
 	 */
 	protected $configCache;
 
 	/**
-	 * @var Model\Config\PConfig
+	 * @var \Friendica\Core\PConfig\Model\PConfig
 	 */
 	protected $configModel;
 
 	/**
-	 * @param Cache $configCache The configuration cache
-	 * @param Model\Config\PConfig          $configModel The configuration model
+	 * @param \Friendica\Core\PConfig\Cache\Cache   $configCache The configuration cache
+	 * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\PConfig $configModel)
+	public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel)
 	{
 		$this->configCache = $configCache;
 		$this->configModel = $configModel;
@@ -57,7 +57,7 @@ abstract class BasePConfig implements IPConfig
 	/**
 	 * Returns the Config Cache
 	 *
-	 * @return Cache
+	 * @return \Friendica\Core\PConfig\Cache\Cache
 	 */
 	public function getCache()
 	{
diff --git a/src/Core/PConfig/JitPConfig.php b/src/Core/PConfig/Type/JitPConfig.php
similarity index 90%
rename from src/Core/PConfig/JitPConfig.php
rename to src/Core/PConfig/Type/JitPConfig.php
index 251f1bd0b8..99c3b581bf 100644
--- a/src/Core/PConfig/JitPConfig.php
+++ b/src/Core/PConfig/Type/JitPConfig.php
@@ -19,9 +19,9 @@
  *
  */
 
-namespace Friendica\Core\PConfig;
+namespace Friendica\Core\PConfig\Type;
 
-use Friendica\Core\BasePConfig;
+use Friendica\Core\PConfig\Cache\Cache;
 use Friendica\Model;
 
 /**
@@ -39,10 +39,10 @@ class JitPConfig extends BasePConfig
 	private $db_loaded;
 
 	/**
-	 * @param Cache                $configCache The configuration cache
-	 * @param Model\Config\PConfig $configModel The configuration model
+	 * @param Cache                                 $configCache The configuration cache
+	 * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\PConfig $configModel)
+	public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel)
 	{
 		parent::__construct($configCache, $configModel);
 		$this->db_loaded = [];
diff --git a/src/Core/PConfig/PreloadPConfig.php b/src/Core/PConfig/Type/PreloadPConfig.php
similarity index 90%
rename from src/Core/PConfig/PreloadPConfig.php
rename to src/Core/PConfig/Type/PreloadPConfig.php
index abdc18b159..4498bb409d 100644
--- a/src/Core/PConfig/PreloadPConfig.php
+++ b/src/Core/PConfig/Type/PreloadPConfig.php
@@ -19,9 +19,9 @@
  *
  */
 
-namespace Friendica\Core\PConfig;
+namespace Friendica\Core\PConfig\Type;
 
-use Friendica\Core\BasePConfig;
+use Friendica\Core\PConfig\Cache\Cache;
 use Friendica\Model;
 
 /**
@@ -36,10 +36,10 @@ class PreloadPConfig extends BasePConfig
 	private $config_loaded;
 
 	/**
-	 * @param Cache                $configCache The configuration cache
-	 * @param Model\Config\PConfig $configModel The configuration model
+	 * @param \Friendica\Core\PConfig\Cache\Cache   $configCache The configuration cache
+	 * @param \Friendica\Core\PConfig\Model\PConfig $configModel The configuration model
 	 */
-	public function __construct(Cache $configCache, Model\Config\PConfig $configModel)
+	public function __construct(Cache $configCache, \Friendica\Core\PConfig\Model\PConfig $configModel)
 	{
 		parent::__construct($configCache, $configModel);
 		$this->config_loaded = [];
diff --git a/src/Database/Database.php b/src/Database/Database.php
index a654cccc5b..4a8d5d36e7 100644
--- a/src/Database/Database.php
+++ b/src/Database/Database.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Database;
 
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\System;
 use Friendica\Network\HTTPException\InternalServerErrorException;
 use Friendica\Util\DateTimeFormat;
diff --git a/src/Model/Config/DbaConfig.php b/src/Model/Config/DbaConfig.php
deleted file mode 100644
index 4ef96f6c23..0000000000
--- a/src/Model/Config/DbaConfig.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-namespace Friendica\Model\Config;
-
-use Friendica\Database\Database;
-
-/**
- * The DB-based model of (P-)Config values
- * Encapsulates db-calls in case of config queries
- */
-abstract class DbaConfig
-{
-	/** @var Database */
-	protected $dba;
-
-	/**
-	 * @param Database $dba The database connection of this model
-	 */
-	public function __construct(Database $dba)
-	{
-		$this->dba = $dba;
-	}
-
-	/**
-	 * Checks if the model is currently connected
-	 *
-	 * @return bool
-	 */
-	public function isConnected()
-	{
-		return $this->dba->isConnected();
-	}
-
-	/**
-	 * Formats a DB value to a config value
-	 * - null   = The db-value isn't set
-	 * - bool   = The db-value is either '0' or '1'
-	 * - array  = The db-value is a serialized array
-	 * - string = The db-value is a string
-	 *
-	 * Keep in mind that there aren't any numeric/integer config values in the database
-	 *
-	 * @param null|string $value
-	 *
-	 * @return null|array|string
-	 */
-	protected function toConfigValue($value)
-	{
-		if (!isset($value)) {
-			return null;
-		}
-
-		switch (true) {
-			// manage array value
-			case preg_match("|^a:[0-9]+:{.*}$|s", $value):
-				return unserialize($value);
-
-			default:
-				return $value;
-		}
-	}
-
-	/**
-	 * Formats a config value to a DB value (string)
-	 *
-	 * @param mixed $value
-	 *
-	 * @return string
-	 */
-	protected function toDbValue($value)
-	{
-		// if not set, save an empty string
-		if (!isset($value)) {
-			return '';
-		}
-
-		switch (true) {
-			// manage arrays
-			case is_array($value):
-				return serialize($value);
-
-			default:
-				return (string)$value;
-		}
-	}
-}
diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php
index 2d081f4077..5077d3b5db 100644
--- a/src/Module/Admin/Summary.php
+++ b/src/Module/Admin/Summary.php
@@ -22,18 +22,18 @@
 namespace Friendica\Module\Admin;
 
 use Friendica\Core\Addon;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Core\Update;
 use Friendica\Database\DBA;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Model\Register;
 use Friendica\Module\BaseAdmin;
 use Friendica\Network\HTTPException\InternalServerErrorException;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Cache\ConfigFileLoader;
 use Friendica\Util\DateTimeFormat;
 
 class Summary extends BaseAdmin
diff --git a/src/Module/Install.php b/src/Module/Install.php
index c61f162338..b9ae763b72 100644
--- a/src/Module/Install.php
+++ b/src/Module/Install.php
@@ -24,7 +24,7 @@ namespace Friendica\Module;
 use Friendica\App;
 use Friendica\BaseModule;
 use Friendica\Core;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Renderer;
 use Friendica\Core\Theme;
 use Friendica\DI;
diff --git a/src/Util/Profiler.php b/src/Util/Profiler.php
index fb499d8156..0ff338353e 100644
--- a/src/Util/Profiler.php
+++ b/src/Util/Profiler.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Util;
 
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Core\System;
 use Psr\Container\ContainerExceptionInterface;
@@ -78,7 +78,7 @@ class Profiler implements ContainerInterface
 	}
 
 	/**
-	 * @param Cache $configCache The configuration cache
+	 * @param \Friendica\Core\Config\Cache\Cache $configCache The configuration cache
 	 */
 	public function __construct(Cache $configCache)
 	{
diff --git a/static/dependencies.config.php b/static/dependencies.config.php
index 39aae97fd1..fe063c0463 100644
--- a/static/dependencies.config.php
+++ b/static/dependencies.config.php
@@ -37,6 +37,7 @@ use Dice\Dice;
 use Friendica\App;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
+use Friendica\Core\PConfig;
 use Friendica\Core\L10n;
 use Friendica\Core\Lock\ILock;
 use Friendica\Core\Process;
@@ -73,8 +74,8 @@ return [
 			$_SERVER
 		]
 	],
-	Util\ConfigFileLoader::class => [
-		'instanceOf' => Factory\ConfigFactory::class,
+	Config\Cache\ConfigFileLoader::class => [
+		'instanceOf' => Config\Factory\ConfigFactory::class,
 		'call'       => [
 			['createConfigFileLoader', [
 				[Dice::INSTANCE => '$basepath'],
@@ -82,8 +83,8 @@ return [
 			], Dice::CHAIN_CALL],
 		],
 	],
-	Config\Cache::class          => [
-		'instanceOf' => Factory\ConfigFactory::class,
+	Config\Cache\Cache::class => [
+		'instanceOf' => Config\Factory\ConfigFactory::class,
 		'call'       => [
 			['createCache', [$_SERVER], Dice::CHAIN_CALL],
 		],
@@ -95,15 +96,15 @@ return [
 		],
 	],
 	Config\IConfig::class                   => [
-		'instanceOf' => Factory\ConfigFactory::class,
+		'instanceOf' => Config\Factory\ConfigFactory::class,
 		'call'       => [
-			['createConfig', [], Dice::CHAIN_CALL],
+			['create', [], Dice::CHAIN_CALL],
 		],
 	],
 	\Friendica\Core\PConfig\IPConfig::class => [
-		'instanceOf' => Factory\ConfigFactory::class,
+		'instanceOf' => PConfig\Factory\PConfigFactory::class,
 		'call'       => [
-			['createPConfig', [], Dice::CHAIN_CALL],
+			['create', [], Dice::CHAIN_CALL],
 		]
 	],
 	Database::class                         => [
diff --git a/tests/FixtureTest.php b/tests/FixtureTest.php
index f30b50878b..fdeda1febc 100644
--- a/tests/FixtureTest.php
+++ b/tests/FixtureTest.php
@@ -6,7 +6,7 @@
 namespace Friendica\Test;
 
 use Dice\Dice;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Core\Session;
 use Friendica\Core\Session\ISession;
diff --git a/tests/Util/AppMockTrait.php b/tests/Util/AppMockTrait.php
index 4266a4a023..cca9bd37e8 100644
--- a/tests/Util/AppMockTrait.php
+++ b/tests/Util/AppMockTrait.php
@@ -74,19 +74,19 @@ trait AppMockTrait
 		$this->dice = \Mockery::mock(Dice::class)->makePartial();
 		$this->dice = $this->dice->addRules(include __DIR__ . '/../../static/dependencies.config.php');
 
-		$this->configMock = \Mockery::mock(Config\Cache::class);
+		$this->configMock = \Mockery::mock(Config\Cache\Cache::class);
 		$this->dice->shouldReceive('create')
-		           ->with(Config\Cache::class)
+		           ->with(Config\Cache\Cache::class)
 		           ->andReturn($this->configMock);
 		$this->mode = \Mockery::mock(App\Mode::class);
 		$this->dice->shouldReceive('create')
 		           ->with(App\Mode::class)
 		           ->andReturn($this->mode);
-		$configModel= \Mockery::mock(\Friendica\Model\Config\Config::class);
+		$configModel= \Mockery::mock(Config\Model\Config::class);
 		// Disable the adapter
 		$configModel->shouldReceive('isConnected')->andReturn(false);
 
-		$config = new Config\JitConfig($this->configMock, $configModel);
+		$config = new Config\Type\JitConfig($this->configMock, $configModel);
 		$this->dice->shouldReceive('create')
 		           ->with(Config\IConfig::class)
 		           ->andReturn($config);
diff --git a/tests/functional/DependencyCheckTest.php b/tests/functional/DependencyCheckTest.php
index a7b45ccebe..3d207d07d1 100644
--- a/tests/functional/DependencyCheckTest.php
+++ b/tests/functional/DependencyCheckTest.php
@@ -25,13 +25,13 @@ use Dice\Dice;
 use Friendica\App;
 use Friendica\Core\Cache\ICache;
 use Friendica\Core\Cache\IMemoryCache;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Core\Lock\ILock;
 use Friendica\Database\Database;
 use Friendica\Test\Util\VFSTrait;
 use Friendica\Util\BasePath;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Cache\ConfigFileLoader;
 use Friendica\Util\Profiler;
 use PHPUnit\Framework\TestCase;
 use Psr\Log\LoggerInterface;
diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php
index 36ca6b21d6..c3a5c5e72b 100644
--- a/tests/src/App/ModeTest.php
+++ b/tests/src/App/ModeTest.php
@@ -24,7 +24,7 @@ namespace Friendica\Test\src\App;
 use Detection\MobileDetect;
 use Friendica\App\Mode;
 use Friendica\App\Module;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Database\Database;
 use Friendica\Test\MockedTest;
 use Friendica\Test\Util\VFSTrait;
diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php
index 01a57b57e9..f11d383658 100644
--- a/tests/src/Console/AutomaticInstallationConsoleTest.php
+++ b/tests/src/Console/AutomaticInstallationConsoleTest.php
@@ -24,7 +24,7 @@ namespace Friendica\Test\src\Console;
 use Dice\Dice;
 use Friendica\App;
 use Friendica\Console\AutomaticInstallation;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Installer;
 use Friendica\Core\L10n;
 use Friendica\Core\Logger;
@@ -53,7 +53,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest
 	private $assertFileDb;
 
 	/**
-	 * @var Cache The configuration cache to check after each test
+	 * @var \Friendica\Core\Config\Cache\Cache The configuration cache to check after each test
 	 */
 	private $configCache;
 
diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php
index 8d404b3552..55011f87cf 100644
--- a/tests/src/Core/Cache/DatabaseCacheTest.php
+++ b/tests/src/Core/Cache/DatabaseCacheTest.php
@@ -22,11 +22,10 @@
 namespace Friendica\Test\src\Core\Cache;
 
 use Friendica\Core\Cache;
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Test\DatabaseTestTrait;
 use Friendica\Test\Util\Database\StaticDatabase;
 use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\Profiler;
 use Mockery;
 use Psr\Log\NullLogger;
diff --git a/tests/src/Core/Config/CacheTest.php b/tests/src/Core/Config/Cache/CacheTest.php
similarity index 87%
rename from tests/src/Core/Config/CacheTest.php
rename to tests/src/Core/Config/Cache/CacheTest.php
index 79cca7c123..530b5b4826 100644
--- a/tests/src/Core/Config/CacheTest.php
+++ b/tests/src/Core/Config/Cache/CacheTest.php
@@ -19,7 +19,7 @@
  *
  */
 
-namespace Friendica\Test\src\Core\Config;
+namespace Friendica\Test\src\Core\Config\Cache;
 
 use Friendica\Core\Config\Cache;
 use Friendica\Test\MockedTest;
@@ -49,7 +49,7 @@ class CacheTest extends MockedTest
 		];
 	}
 
-	private function assertConfigValues($data, Cache $configCache)
+	private function assertConfigValues($data, Cache\Cache $configCache)
 	{
 		foreach ($data as $cat => $values) {
 			foreach ($values as $key => $value) {
@@ -64,7 +64,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testLoadConfigArray($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 		$configCache->load($data);
 
 		self::assertConfigValues($data, $configCache);
@@ -83,27 +83,27 @@ class CacheTest extends MockedTest
 			]
 		];
 
-		$configCache = new Cache();
-		$configCache->load($data, Cache::SOURCE_DB);
+		$configCache = new Cache\Cache();
+		$configCache->load($data, Cache\Cache::SOURCE_DB);
 		// doesn't override - Low Priority due Config file
-		$configCache->load($override, Cache::SOURCE_FILE);
+		$configCache->load($override, Cache\Cache::SOURCE_FILE);
 
 		self::assertConfigValues($data, $configCache);
 
 		// override the value - High Prio due Server Env
-		$configCache->load($override, Cache::SOURCE_ENV);
+		$configCache->load($override, Cache\Cache::SOURCE_ENV);
 
 		self::assertEquals($override['system']['test'], $configCache->get('system', 'test'));
 		self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue'));
 
 		// Don't overwrite server ENV variables - even in load mode
-		$configCache->load($data, Cache::SOURCE_DB);
+		$configCache->load($data, Cache\Cache::SOURCE_DB);
 
 		self::assertEquals($override['system']['test'], $configCache->get('system', 'test'));
 		self::assertEquals($override['system']['boolTrue'], $configCache->get('system', 'boolTrue'));
 
 		// Overwrite ENV variables with ENV variables
-		$configCache->load($data, Cache::SOURCE_ENV);
+		$configCache->load($data, Cache\Cache::SOURCE_ENV);
 
 		self::assertConfigValues($data, $configCache);
 		self::assertNotEquals($override['system']['test'], $configCache->get('system', 'test'));
@@ -115,7 +115,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testLoadConfigArrayWrong()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		// empty dataset
 		$configCache->load([]);
@@ -136,7 +136,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testGetAll($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 		$configCache->load($data);
 
 		$all = $configCache->getAll();
@@ -151,7 +151,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testSetGet($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		foreach ($data as $cat => $values) {
 			foreach ($values as $key => $value) {
@@ -167,7 +167,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testGetEmpty()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		self::assertNull($configCache->get('something', 'value'));
 	}
@@ -177,7 +177,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testGetCat()
 	{
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'system' => [
 				'key1' => 'value1',
 				'key2' => 'value2',
@@ -205,7 +205,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testDelete($data)
 	{
-		$configCache = new Cache($data);
+		$configCache = new Cache\Cache($data);
 
 		foreach ($data as $cat => $values) {
 			foreach ($values as $key => $value) {
@@ -222,7 +222,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testKeyDiffWithResult($data)
 	{
-		$configCache = new Cache($data);
+		$configCache = new Cache\Cache($data);
 
 		$diffConfig = [
 			'fakeCat' => [
@@ -239,7 +239,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testKeyDiffWithoutResult($data)
 	{
-		$configCache = new Cache($data);
+		$configCache = new Cache\Cache($data);
 
 		$diffConfig = $configCache->getAll();
 
@@ -251,7 +251,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testPasswordHide()
 	{
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'database' => [
 				'password' => 'supersecure',
 				'username' => 'notsecured',
@@ -268,7 +268,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testPasswordShow()
 	{
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'database' => [
 				'password' => 'supersecure',
 				'username' => 'notsecured',
@@ -285,7 +285,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testEmptyPassword()
 	{
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'database' => [
 				'password' => '',
 				'username' => '',
@@ -299,7 +299,7 @@ class CacheTest extends MockedTest
 
 	public function testWrongTypePassword()
 	{
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'database' => [
 				'password' => new stdClass(),
 				'username' => '',
@@ -309,7 +309,7 @@ class CacheTest extends MockedTest
 		self::assertNotEmpty($configCache->get('database', 'password'));
 		self::assertEmpty($configCache->get('database', 'username'));
 
-		$configCache = new Cache([
+		$configCache = new Cache\Cache([
 			'database' => [
 				'password' => 23,
 				'username' => '',
@@ -327,19 +327,19 @@ class CacheTest extends MockedTest
 	public function testSetOverrides($data)
 	{
 
-		$configCache = new Cache();
-		$configCache->load($data, Cache::SOURCE_DB);
+		$configCache = new Cache\Cache();
+		$configCache->load($data, Cache\Cache::SOURCE_DB);
 
 		// test with wrong override
-		self::assertFalse($configCache->set('system', 'test', '1234567', Cache::SOURCE_FILE));
+		self::assertFalse($configCache->set('system', 'test', '1234567', Cache\Cache::SOURCE_FILE));
 		self::assertEquals($data['system']['test'], $configCache->get('system', 'test'));
 
 		// test with override (equal)
-		self::assertTrue($configCache->set('system', 'test', '8910', Cache::SOURCE_DB));
+		self::assertTrue($configCache->set('system', 'test', '8910', Cache\Cache::SOURCE_DB));
 		self::assertEquals('8910', $configCache->get('system', 'test'));
 
 		// test with override (over)
-		self::assertTrue($configCache->set('system', 'test', '111213', Cache::SOURCE_ENV));
+		self::assertTrue($configCache->set('system', 'test', '111213', Cache\Cache::SOURCE_ENV));
 		self::assertEquals('111213', $configCache->get('system', 'test'));
 	}
 }
diff --git a/tests/src/Util/Config/ConfigFileLoaderTest.php b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php
similarity index 94%
rename from tests/src/Util/Config/ConfigFileLoaderTest.php
rename to tests/src/Core/Config/Cache/ConfigFileLoaderTest.php
index cb3ae840ce..ed5cfa1ef6 100644
--- a/tests/src/Util/Config/ConfigFileLoaderTest.php
+++ b/tests/src/Core/Config/Cache/ConfigFileLoaderTest.php
@@ -19,13 +19,13 @@
  *
  */
 
-namespace Friendica\Test\src\Util\Config;
+namespace Friendica\Test\src\Core\Config\Cache;
 
 use Friendica\Core\Config\Cache;
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Test\MockedTest;
 use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Cache\ConfigFileLoader;
 use org\bovigo\vfs\vfsStream;
 
 class ConfigFileLoaderTest extends MockedTest
@@ -51,7 +51,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -77,7 +77,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 	}
@@ -90,6 +90,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$this->delConfigFile('local.config.php');
 
 		$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'datasets' . DIRECTORY_SEPARATOR .
@@ -105,7 +106,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -126,6 +127,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$this->delConfigFile('local.config.php');
 
 		$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'datasets' . DIRECTORY_SEPARATOR .
@@ -141,7 +143,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -161,6 +163,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$this->delConfigFile('local.config.php');
 
 		$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'datasets' . DIRECTORY_SEPARATOR .
@@ -176,7 +179,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -214,6 +217,7 @@ class ConfigFileLoaderTest extends MockedTest
 		vfsStream::create($structure, $this->root);
 
 		$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'..' . DIRECTORY_SEPARATOR .
 			'datasets' . DIRECTORY_SEPARATOR .
@@ -249,6 +253,7 @@ class ConfigFileLoaderTest extends MockedTest
 
 		$fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
 		        '..' . DIRECTORY_SEPARATOR .
+			   '..' . DIRECTORY_SEPARATOR .
 		        '..' . DIRECTORY_SEPARATOR .
 		        'datasets' . DIRECTORY_SEPARATOR .
 		        'config' . DIRECTORY_SEPARATOR;
@@ -265,7 +270,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -283,6 +288,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
 		           '..' . DIRECTORY_SEPARATOR .
 		           '..' . DIRECTORY_SEPARATOR .
+				   '..' . DIRECTORY_SEPARATOR .
 		           'datasets' . DIRECTORY_SEPARATOR .
 		           'config' . DIRECTORY_SEPARATOR;
 
@@ -298,7 +304,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -315,6 +321,7 @@ class ConfigFileLoaderTest extends MockedTest
 
 		$fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
 		           '..' . DIRECTORY_SEPARATOR .
+				   '..' . DIRECTORY_SEPARATOR .
 		           '..' . DIRECTORY_SEPARATOR .
 		           'datasets' . DIRECTORY_SEPARATOR .
 		           'config' . DIRECTORY_SEPARATOR;
@@ -331,7 +338,7 @@ class ConfigFileLoaderTest extends MockedTest
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR,
 			$this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR
 		);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -347,7 +354,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$this->delConfigFile('local.config.php');
 
 		$configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
@@ -362,6 +369,7 @@ class ConfigFileLoaderTest extends MockedTest
 		$this->delConfigFile('local.config.php');
 
 		$fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+				   '..' . DIRECTORY_SEPARATOR .
 				   '..' . DIRECTORY_SEPARATOR .
 				   '..' . DIRECTORY_SEPARATOR .
 				   'datasets' . DIRECTORY_SEPARATOR .
@@ -372,7 +380,7 @@ class ConfigFileLoaderTest extends MockedTest
 				 ->setContent(file_get_contents($fileDir . 'B.config.php'));
 
 		$configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]);
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configFileLoader->setupCache($configCache);
 
diff --git a/tests/src/Core/Config/ConfigTest.php b/tests/src/Core/Config/ConfigTest.php
index 734f6bff79..e770859875 100644
--- a/tests/src/Core/Config/ConfigTest.php
+++ b/tests/src/Core/Config/ConfigTest.php
@@ -23,7 +23,7 @@ namespace Friendica\Test\src\Core\Config;
 
 use Friendica\Core\Config\Cache;
 use Friendica\Core\Config\IConfig;
-use Friendica\Model\Config\Config as ConfigModel;
+use Friendica\Core\Config\Model\Config as ConfigModel;
 use Friendica\Test\MockedTest;
 use Mockery\MockInterface;
 use Mockery;
@@ -33,7 +33,7 @@ abstract class ConfigTest extends MockedTest
 	/** @var ConfigModel|MockInterface */
 	protected $configModel;
 
-	/** @var Cache */
+	/** @var Cache\Cache */
 	protected $configCache;
 
 	/** @var IConfig */
@@ -61,7 +61,7 @@ abstract class ConfigTest extends MockedTest
 
 		// Create the config model
 		$this->configModel = Mockery::mock(ConfigModel::class);
-		$this->configCache = new Cache();
+		$this->configCache = new Cache\Cache();
 	}
 
 	/**
@@ -161,7 +161,7 @@ abstract class ConfigTest extends MockedTest
 		                  ->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// assert config is loaded everytime
 		self::assertConfig('config', $data['config']);
@@ -176,7 +176,7 @@ abstract class ConfigTest extends MockedTest
 	public function testLoad(array $data, array $load)
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		foreach ($load as $loadedCats) {
 			$this->testedConfig->load($loadedCats);
@@ -257,7 +257,7 @@ abstract class ConfigTest extends MockedTest
 	public function testCacheLoadDouble(array $data1, array $data2, array $expect = [])
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		foreach ($data1 as $cat => $data) {
 			$this->testedConfig->load($cat);
@@ -282,7 +282,7 @@ abstract class ConfigTest extends MockedTest
 		$this->configModel->shouldReceive('load')->withAnyArgs()->andReturn([])->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertEmpty($this->testedConfig->getCache()->getAll());
 	}
@@ -299,7 +299,7 @@ abstract class ConfigTest extends MockedTest
 		                  ->times(3);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertTrue($this->testedConfig->set('test', 'it', $data));
 
@@ -317,7 +317,7 @@ abstract class ConfigTest extends MockedTest
 		$this->configModel->shouldReceive('set')->with('test', 'it', $data)->andReturn(true)->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertTrue($this->testedConfig->set('test', 'it', $data));
 
@@ -331,7 +331,7 @@ abstract class ConfigTest extends MockedTest
 	public function testGetWrongWithoutDB()
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// without refresh
 		self::assertNull($this->testedConfig->get('test', 'it'));
@@ -353,10 +353,10 @@ abstract class ConfigTest extends MockedTest
 	 */
 	public function testGetWithRefresh($data)
 	{
-		$this->configCache->load(['test' => ['it' => 'now']], Cache::SOURCE_FILE);
+		$this->configCache->load(['test' => ['it' => 'now']], Cache\Cache::SOURCE_FILE);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// without refresh
 		self::assertEquals('now', $this->testedConfig->get('test', 'it'));
@@ -378,10 +378,10 @@ abstract class ConfigTest extends MockedTest
 	 */
 	public function testDeleteWithoutDB($data)
 	{
-		$this->configCache->load(['test' => ['it' => $data]], Cache::SOURCE_FILE);
+		$this->configCache->load(['test' => ['it' => $data]], Cache\Cache::SOURCE_FILE);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertEquals($data, $this->testedConfig->get('test', 'it'));
 		self::assertEquals($data, $this->testedConfig->getCache()->get('test', 'it'));
@@ -398,7 +398,7 @@ abstract class ConfigTest extends MockedTest
 	 */
 	public function testDeleteWithDB()
 	{
-		$this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], Cache::SOURCE_FILE);
+		$this->configCache->load(['test' => ['it' => 'now', 'quarter' => 'true']], Cache\Cache::SOURCE_FILE);
 
 		$this->configModel->shouldReceive('delete')
 		                  ->with('test', 'it')
@@ -418,7 +418,7 @@ abstract class ConfigTest extends MockedTest
 		                  ->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// directly set the value to the cache
 		$this->testedConfig->getCache()->set('test', 'it', 'now');
@@ -444,9 +444,9 @@ abstract class ConfigTest extends MockedTest
 	public function testSetGetHighPrio()
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
-		$this->testedConfig->getCache()->set('config', 'test', 'prio', Cache::SOURCE_FILE);
+		$this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_FILE);
 		self::assertEquals('prio', $this->testedConfig->get('config', 'test'));
 
 		// now you have to get the new variable entry because of the new set the get refresh succeed as well
@@ -460,10 +460,10 @@ abstract class ConfigTest extends MockedTest
 	public function testSetGetLowPrio()
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 		self::assertEquals('it', $this->testedConfig->get('config', 'test'));
 
-		$this->testedConfig->getCache()->set('config', 'test', 'prio', Cache::SOURCE_ENV);
+		$this->testedConfig->getCache()->set('config', 'test', 'prio', Cache\Cache::SOURCE_ENV);
 		// now you have to get the env variable entry as output, even with a new set (which failed) and a get refresh
 		self::assertFalse($this->testedConfig->set('config', 'test', '123'));
 		self::assertEquals('prio', $this->testedConfig->get('config', 'test', '', true));
diff --git a/tests/src/Core/Config/JitConfigTest.php b/tests/src/Core/Config/JitConfigTest.php
index 62c5effda6..5c923beec7 100644
--- a/tests/src/Core/Config/JitConfigTest.php
+++ b/tests/src/Core/Config/JitConfigTest.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Test\src\Core\Config;
 
-use Friendica\Core\Config\JitConfig;
+use Friendica\Core\Config\Type\JitConfig;
 
 class JitConfigTest extends ConfigTest
 {
diff --git a/tests/src/Core/Config/PreloadConfigTest.php b/tests/src/Core/Config/PreloadConfigTest.php
index d12f2dcd59..9ce6f4e1ba 100644
--- a/tests/src/Core/Config/PreloadConfigTest.php
+++ b/tests/src/Core/Config/PreloadConfigTest.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Test\src\Core\Config;
 
-use Friendica\Core\Config\PreloadConfig;
+use Friendica\Core\Config\Type\PreloadConfig;
 
 class PreloadConfigTest extends ConfigTest
 {
diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php
index 1263fe7e67..bdb1d53c0b 100644
--- a/tests/src/Core/InstallerTest.php
+++ b/tests/src/Core/InstallerTest.php
@@ -23,7 +23,7 @@
 namespace Friendica\Core;
 
 use Dice\Dice;
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\DI;
 use Friendica\Network\IHTTPResult;
 use Friendica\Network\IHTTPClient;
diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php
index c51d153efc..86209d5c7d 100644
--- a/tests/src/Core/Lock/DatabaseLockDriverTest.php
+++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php
@@ -22,11 +22,10 @@
 namespace Friendica\Test\src\Core\Lock;
 
 use Friendica\Core\Lock\DatabaseLock;
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Test\DatabaseTestTrait;
 use Friendica\Test\Util\Database\StaticDatabase;
 use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\Profiler;
 use Mockery;
 use Psr\Log\NullLogger;
diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php
index 87d8b2cd2f..89a3ec633c 100644
--- a/tests/src/Core/Lock/SemaphoreLockTest.php
+++ b/tests/src/Core/Lock/SemaphoreLockTest.php
@@ -24,7 +24,7 @@ namespace Friendica\Test\src\Core\Lock;
 use Dice\Dice;
 use Friendica\App;
 use Friendica\Core\Config\IConfig;
-use Friendica\Core\Config\JitConfig;
+use Friendica\Core\Config\Type\JitConfig;
 use Friendica\Core\Lock\SemaphoreLock;
 use Friendica\DI;
 use Mockery;
diff --git a/tests/src/Core/PConfig/CacheTest.php b/tests/src/Core/PConfig/Cache/CacheTest.php
similarity index 91%
rename from tests/src/Core/PConfig/CacheTest.php
rename to tests/src/Core/PConfig/Cache/CacheTest.php
index 77f6140bd8..99e0e914da 100644
--- a/tests/src/Core/PConfig/CacheTest.php
+++ b/tests/src/Core/PConfig/Cache/CacheTest.php
@@ -19,7 +19,7 @@
  *
  */
 
-namespace Friendica\Test\src\Core\PConfig;
+namespace Friendica\Test\src\Core\PConfig\Cache;
 
 use Friendica\Core\PConfig\Cache;
 use Friendica\Test\MockedTest;
@@ -47,7 +47,7 @@ class CacheTest extends MockedTest
 		];
 	}
 
-	private function assertConfigValues($data, Cache $configCache, $uid)
+	private function assertConfigValues($data, Cache\Cache $configCache, $uid)
 	{
 		foreach ($data as $cat => $values) {
 			foreach ($values as $key => $value) {
@@ -63,7 +63,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testSetGet($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 		$uid         = 345;
 
 		foreach ($data as $cat => $values) {
@@ -81,7 +81,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testGetCat()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 		$uid         = 345;
 
 		$configCache->load($uid, [
@@ -113,7 +113,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testDelete($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 		$uid         = 345;
 
 		foreach ($data as $cat => $values) {
@@ -136,7 +136,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testKeyDiffWithResult()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$diffConfig = [
 			'fakeCat' => [
@@ -154,7 +154,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testKeyDiffWithoutResult($data)
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, $data);
 
@@ -168,7 +168,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testPasswordHide()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, [
 			'database' => [
@@ -187,7 +187,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testPasswordShow()
 	{
-		$configCache = new Cache(false);
+		$configCache = new Cache\Cache(false);
 
 		$configCache->load(1, [
 			'database' => [
@@ -206,7 +206,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testEmptyPassword()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, [
 			'database' => [
@@ -221,7 +221,7 @@ class CacheTest extends MockedTest
 
 	public function testWrongTypePassword()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, [
 			'database' => [
@@ -233,7 +233,7 @@ class CacheTest extends MockedTest
 		self::assertNotEmpty($configCache->get(1, 'database', 'password'));
 		self::assertEmpty($configCache->get(1, 'database', 'username'));
 
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, [
 			'database' => [
@@ -251,7 +251,7 @@ class CacheTest extends MockedTest
 	 */
 	public function testTwoUid()
 	{
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		$configCache->load(1, [
 			'cat1' => [
@@ -282,7 +282,7 @@ class CacheTest extends MockedTest
 		// bad UID!
 		$uid = null;
 
-		$configCache = new Cache();
+		$configCache = new Cache\Cache();
 
 		self::assertNull($configCache->get($uid, 'cat1', 'cat2'));
 
diff --git a/tests/src/Core/PConfig/JitPConfigTest.php b/tests/src/Core/PConfig/JitPConfigTest.php
index f43b9cd762..34428cb317 100644
--- a/tests/src/Core/PConfig/JitPConfigTest.php
+++ b/tests/src/Core/PConfig/JitPConfigTest.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Test\src\Core\PConfig;
 
-use Friendica\Core\PConfig\JitPConfig;
+use Friendica\Core\PConfig\Type\JitPConfig;
 
 class JitPConfigTest extends PConfigTest
 {
diff --git a/tests/src/Core/PConfig/PConfigTest.php b/tests/src/Core/PConfig/PConfigTest.php
index f35aa10d98..9288b10585 100644
--- a/tests/src/Core/PConfig/PConfigTest.php
+++ b/tests/src/Core/PConfig/PConfigTest.php
@@ -22,8 +22,8 @@
 namespace Friendica\Test\src\Core\PConfig;
 
 use Friendica\Core\PConfig\Cache;
-use Friendica\Core\BasePConfig;
-use Friendica\Model\Config\PConfig as PConfigModel;
+use Friendica\Core\PConfig\Type\BasePConfig;
+use Friendica\Core\PConfig\Model\PConfig as PConfigModel;
 use Friendica\Test\MockedTest;
 use Mockery;
 use Mockery\MockInterface;
@@ -33,7 +33,7 @@ abstract class PConfigTest extends MockedTest
 	/** @var PConfigModel|MockInterface */
 	protected $configModel;
 
-	/** @var Cache */
+	/** @var Cache\Cache */
 	protected $configCache;
 
 	/** @var BasePConfig */
@@ -63,11 +63,11 @@ abstract class PConfigTest extends MockedTest
 
 		// Create the config model
 		$this->configModel = Mockery::mock(PConfigModel::class);
-		$this->configCache = new Cache();
+		$this->configCache = new Cache\Cache();
 	}
 
 	/**
-	 * @return BasePConfig
+	 * @return \Friendica\Core\PConfig\Type\BasePConfig
 	 */
 	abstract public function getInstance();
 
@@ -163,7 +163,7 @@ abstract class PConfigTest extends MockedTest
 	public function testSetUp()
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertEmpty($this->testedConfig->getCache()->getAll());
 	}
@@ -174,7 +174,7 @@ abstract class PConfigTest extends MockedTest
 	public function testLoad(int $uid, array $data, array $possibleCats, array $load)
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		foreach ($load as $loadedCats) {
 			$this->testedConfig->load($uid, $loadedCats);
@@ -257,7 +257,7 @@ abstract class PConfigTest extends MockedTest
 	public function testCacheLoadDouble(int $uid, array $data1, array $data2, array $expect)
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		foreach ($data1 as $cat => $data) {
 			$this->testedConfig->load($uid, $cat);
@@ -281,7 +281,7 @@ abstract class PConfigTest extends MockedTest
 	public function testSetGetWithoutDB(int $uid, $data)
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data));
 
@@ -302,7 +302,7 @@ abstract class PConfigTest extends MockedTest
 		                  ->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertTrue($this->testedConfig->set($uid, 'test', 'it', $data));
 
@@ -316,7 +316,7 @@ abstract class PConfigTest extends MockedTest
 	public function testGetWrongWithoutDB()
 	{
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// without refresh
 		self::assertNull($this->testedConfig->get(0, 'test', 'it'));
@@ -341,7 +341,7 @@ abstract class PConfigTest extends MockedTest
 		$this->configCache->load($uid, ['test' => ['it' => 'now']]);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// without refresh
 		self::assertEquals('now', $this->testedConfig->get($uid, 'test', 'it'));
@@ -366,7 +366,7 @@ abstract class PConfigTest extends MockedTest
 		$this->configCache->load($uid, ['test' => ['it' => $data]]);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertEquals($data, $this->testedConfig->get($uid, 'test', 'it'));
 		self::assertEquals($data, $this->testedConfig->getCache()->get($uid, 'test', 'it'));
@@ -405,7 +405,7 @@ abstract class PConfigTest extends MockedTest
 		                  ->once();
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		// directly set the value to the cache
 		$this->testedConfig->getCache()->set($uid, 'test', 'it', 'now');
@@ -465,7 +465,7 @@ abstract class PConfigTest extends MockedTest
 		$this->configCache->load($data2['uid'], $data2['data']);
 
 		$this->testedConfig = $this->getInstance();
-		self::assertInstanceOf(Cache::class, $this->testedConfig->getCache());
+		self::assertInstanceOf(Cache\Cache::class, $this->testedConfig->getCache());
 
 		self::assertConfig($data1['uid'], 'cat1', $data1['data']['cat1']);
 		self::assertConfig($data1['uid'], 'cat2', $data1['data']['cat2']);
diff --git a/tests/src/Core/PConfig/PreloadPConfigTest.php b/tests/src/Core/PConfig/PreloadPConfigTest.php
index aa4c2f70b1..6ffee63f76 100644
--- a/tests/src/Core/PConfig/PreloadPConfigTest.php
+++ b/tests/src/Core/PConfig/PreloadPConfigTest.php
@@ -21,13 +21,13 @@
 
 namespace Friendica\Test\src\Core\PConfig;
 
-use Friendica\Core\PConfig\PreloadPConfig;
+use Friendica\Core\PConfig\Type\PreloadPConfig;
 
 class PreloadPConfigTest extends PConfigTest
 {
 	public function getInstance()
 	{
-		return new PreloadPConfig($this->configCache, $this->configModel);
+		return new \Friendica\Core\PConfig\Type\PreloadPConfig($this->configCache, $this->configModel);
 	}
 
 	/**
diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php
index 77e4946bdf..acab50ce42 100644
--- a/tests/src/Core/StorageManagerTest.php
+++ b/tests/src/Core/StorageManagerTest.php
@@ -23,22 +23,22 @@ namespace Friendica\Test\src\Core;
 
 use Dice\Dice;
 use Friendica\Core\Config\IConfig;
-use Friendica\Core\Config\PreloadConfig;
+use Friendica\Core\Config\Type\PreloadConfig;
 use Friendica\Core\Hook;
 use Friendica\Core\L10n;
 use Friendica\Core\Session\ISession;
 use Friendica\Core\StorageManager;
 use Friendica\Database\Database;
 use Friendica\DI;
-use Friendica\Factory\ConfigFactory;
-use Friendica\Model\Config\Config;
+use Friendica\Core\Config\Factory\ConfigFactory;
+use Friendica\Core\Config\Model\Config;
 use Friendica\Model\Storage;
 use Friendica\Core\Session;
 use Friendica\Network\HTTPClient;
 use Friendica\Test\DatabaseTest;
 use Friendica\Test\Util\Database\StaticDatabase;
 use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\ConfigFileLoader;
+use Friendica\Core\Config\Cache\ConfigFileLoader;
 use Friendica\Util\Profiler;
 use org\bovigo\vfs\vfsStream;
 use Psr\Log\LoggerInterface;
diff --git a/tests/src/Model/ProcessTest.php b/tests/src/Model/ProcessTest.php
index a4739d7f5b..ecb4d52d49 100644
--- a/tests/src/Model/ProcessTest.php
+++ b/tests/src/Model/ProcessTest.php
@@ -2,12 +2,11 @@
 
 namespace Friendica\Test\src\Model;
 
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Model\Process;
 use Friendica\Test\DatabaseTest;
 use Friendica\Test\Util\Database\StaticDatabase;
 use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\Profiler;
 use Psr\Log\NullLogger;
 
diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php
index e1dfef9a18..e92dd21352 100644
--- a/tests/src/Model/Storage/DatabaseStorageTest.php
+++ b/tests/src/Model/Storage/DatabaseStorageTest.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Test\src\Model\Storage;
 
-use Friendica\Factory\ConfigFactory;
+use Friendica\Core\Config\Factory\ConfigFactory;
 use Friendica\Model\Storage\Database;
 use Friendica\Test\DatabaseTestTrait;
 use Friendica\Test\Util\Database\StaticDatabase;
diff --git a/tests/src/Util/ProfilerTest.php b/tests/src/Util/ProfilerTest.php
index 3178f7d17a..4c55c419b8 100644
--- a/tests/src/Util/ProfilerTest.php
+++ b/tests/src/Util/ProfilerTest.php
@@ -21,7 +21,7 @@
 
 namespace Friendica\Test\src\Util;
 
-use Friendica\Core\Config\Cache;
+use Friendica\Core\Config\Cache\Cache;
 use Friendica\Core\Config\IConfig;
 use Friendica\Test\MockedTest;
 use Friendica\Util\Profiler;
-- 
2.39.5