Repository: mageddo/dns-proxy-server
Pull request #456 (2024-05-29 18:13:27)

Implementing #449 
Implementing #449 


Patch:
diff --git a/README.md b/README.md
index b199e6d5..a233fc3d 100644
--- a/README.md
+++ b/README.md
@@ -53,7 +53,7 @@ also check the [samples][9] to learn by pratice.
 * [Full documentation](http://mageddo.github.io/dns-proxy-server/)
 * [Running it documentation][5]
 * [Tutorials and Examples][9]
-* [Coding at the DPS](http://mageddo.github.io/dns-proxy-server/latest/en/5-developing/)
+* [Coding at the DPS][10]
 * [RFC-1035][1]
 
 ### Versioning and Releasing
@@ -80,4 +80,4 @@ Or via QR code
 [7]: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif
 [8]: http://mageddo.github.io/dns-proxy-server/latest/en/1-getting-started/versioning
 [9]: http://mageddo.github.io/dns-proxy-server/latest/en/5-tutorials/
-
+[10]: http://mageddo.github.io/dns-proxy-server/latest/en/4-developing/
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 75cbd543..492255cf 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,3 +1,7 @@
+## 3.18.3
+* Refactoring proposed at #449.
+* Log changes
+
 ## 3.18.2
 *  Fixing native image JSON config parse, bug introduced on 3.18.0
 
diff --git a/docs/content/1-getting-started/versioning.md b/docs/content/1-getting-started/versioning.en.md
similarity index 100%
rename from docs/content/1-getting-started/versioning.md
rename to docs/content/1-getting-started/versioning.en.md
diff --git a/docs/content/4-developing/_index.en.md b/docs/content/4-developing/_index.en.md
index 34abe541..99c210f3 100644
--- a/docs/content/4-developing/_index.en.md
+++ b/docs/content/4-developing/_index.en.md
@@ -4,9 +4,12 @@ weight: 5
 pre: "<b>5. </b>"
 ---
 
-### Vanilla Developing
+## Requirements 
+See the [requirements][1].
 
-#### Backend
+## Vanilla Developing
+
+### Backend
 
 Play class `com.mageddo.dnsproxyserver.App` or run
 
@@ -16,7 +19,7 @@ $  ./gradlew clean shadowJar && java -jar ./build/libs/dns-proxy-server-*-all.ja
 
 Make your DNS queries to IP and TCP/UDP ports indicated at the console log.
 
-Front end app (optional)
+### Front end app (optional)
 
 ```bash
 $ cd app && npm start
@@ -24,7 +27,7 @@ $ cd app && npm start
 
 Then access http://localhost:3000/ , front end will proxy to http://localhost:5380 backend.
 
-## With Docker
+## Docker Developing 
 
 ```bash
 $ ./gradlew clean build shadowJar
@@ -39,20 +42,4 @@ $ docker-compose -f docker-compose-dev.yml run --rm -it backend bash
 $ java -jar dns-proxy-server-*-all.jar
 ```
 
-## Native Image
-
-```shell
-$ ./gradlew clean build -x check shadowJar nativeCompile
-```
-
-## Releasing
-
-Patch version
-```bash
-$ ./gradlew release
-```
-
-Major version
-```bash
-$ VERSION=3.7.0 && ./gradlew release -Prelease.releaseVersion=${VERSION} -Prelease.newVersion=${VERSION}
-```
+[1]: {{%relref "1-getting-started/requirements/_index.en.md" %}}
diff --git a/docs/content/4-developing/compiling.en.md b/docs/content/4-developing/compiling.en.md
index bd9ea6c8..1828dba8 100644
--- a/docs/content/4-developing/compiling.en.md
+++ b/docs/content/4-developing/compiling.en.md
@@ -4,10 +4,10 @@ weight: 4
 pre: "<b>4. </b>"
 ---
 
-### Requirements
-* JDK 17+
+## Requirements
+See the [requirements][1].
 
-### Building from source
+## Building from Source
 
 Build the frontend files (optional)
 
@@ -16,8 +16,18 @@ Build the frontend files (optional)
 ```
 
 Build and run the program
+
+#### Jar file
 ```bash
+$ ./gradlew clean build compTest shadowJar -i
+$ java -jar dns-proxy-server-*-all.jar
+```
+
+### Native Image
 
-$ ./gradlew build compTest -Dquarkus.package.type=uber-jar && java -jar ./build/dns-proxy-server.jar
+```shell
+$ ./gradlew clean build compTest shadowJar nativeCompile
+$ ./build/native/nativeCompile/dns-proxy-server
 ```
 
+[1]: {{%relref "1-getting-started/requirements/_index.en.md" %}}
diff --git a/docs/content/4-developing/generating-docs.en.md b/docs/content/4-developing/generating-docs.en.md
index 52fc1ce9..cb9e3cfc 100644
--- a/docs/content/4-developing/generating-docs.en.md
+++ b/docs/content/4-developing/generating-docs.en.md
@@ -7,17 +7,24 @@ pre: "<b>6. </b>"
 ### Requirements
 * Hugo 0.55.4
 
-### Live docs preview
+### Live Docs Preview
 
-To se the current docs just type
+#### Vanilla
 
-	hugo server --source docs
+```bash
+$ hugo server --source docs
+```
 
-### Generating doc statics
+#### Docker
+
+```bash
+$ docker-compose -f docker-compose-dev.yml up docs
+```
+
+### Generating Doc Statics
 
 DPS uses Hugo to generate static docs. To generate the HTML use the following
 
 ```bash
 $ ./builder.bash docs
 ```
-
diff --git a/docs/content/4-developing/releasing.en.md b/docs/content/4-developing/releasing.en.md
new file mode 100644
index 00000000..5356968f
--- /dev/null
+++ b/docs/content/4-developing/releasing.en.md
@@ -0,0 +1,48 @@
+---
+title: Release Process
+weight: 7
+pre: "<b>7. </b>"
+---
+
+## Feature Request - Phase 1
+
+* Create a pull request
+* CI will be checked automatically
+* Once CI is passing, the author `@mageddo` must approve the PR
+* Merge the PR
+
+## Pre-Releasing New Version - Phase 2
+
+* Define the new version number
+* Document the new version and changes at `RELEASE-NOTES.md`
+* Generate the git tag with the steps below
+
+Patch Version
+```bash
+$ ./gradlew release
+```
+
+Major Version
+```bash
+$ VERSION=3.18.0 && ./gradlew release -Prelease.releaseVersion=${VERSION} -Prelease.newVersion=${VERSION}
+```
+
+## Release Latest - Phase 3
+
+* Define a pre-release version which will be promoted to the latest by [following the rules][1].
+* Edit the github release setting the pre-release version as the latest, remove the `-snapshot` suffix from the title 
+and from the attachments names.
+* Locally tag the latest docker image as the pre-release version
+```bash
+$ docker tag defreitas/dns-proxy-server:${PRE_RELEASE_VERSION} mageddo/dns-proxy-server:latest
+```
+* Check the docker image version by 
+```bash
+$ docker run defreitas/dns-proxy-server:latest --version
+```
+* Push the pre-release version to the docker hub
+```bash
+$ docker push defreitas/dns-proxy-server:latest
+```
+
+[1]: {{%relref "1-getting-started/versioning.en.md" %}}
diff --git a/gradle.properties b/gradle.properties
index 547ae9f6..08b52575 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,1 +1,1 @@
-version=3.18.2-snapshot
+version=3.18.3-snapshot
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostname.java b/src/main/java/com/mageddo/dns/Hostname.java
similarity index 95%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostname.java
rename to src/main/java/com/mageddo/dns/Hostname.java
index 10352dd0..cc64e013 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostname.java
+++ b/src/main/java/com/mageddo/dns/Hostname.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dns;
 
 import lombok.EqualsAndHashCode;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostnames.java b/src/main/java/com/mageddo/dns/utils/Hostnames.java
similarity index 88%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostnames.java
rename to src/main/java/com/mageddo/dns/utils/Hostnames.java
index 40753312..eb9c1fb7 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Hostnames.java
+++ b/src/main/java/com/mageddo/dns/utils/Hostnames.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dns.utils;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Messages.java b/src/main/java/com/mageddo/dns/utils/Messages.java
similarity index 97%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/Messages.java
rename to src/main/java/com/mageddo/dns/utils/Messages.java
index c46c5a90..fb99a6e1 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Messages.java
+++ b/src/main/java/com/mageddo/dns/utils/Messages.java
@@ -1,9 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dns.utils;
 
 import com.mageddo.commons.lang.Objects;
+import com.mageddo.dns.Hostname;
 import com.mageddo.dnsproxyserver.config.Config.Entry;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
-import com.mageddo.dnsproxyserver.server.dns.solver.Response;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.Response;
 import com.mageddo.dnsproxyserver.utils.Ips;
 import com.mageddo.net.IP;
 import lombok.SneakyThrows;
@@ -262,7 +263,7 @@ public class Messages {
     return withResponseCode(res, Rcode.NOERROR);
   }
 
-  static Message withResponseCode(Message res, int rRode) {
+  public static Message withResponseCode(Message res, int rRode) {
     withDefaultResponseHeaders(res);
     res.getHeader().setRcode(rRode);
     return res;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Wildcards.java b/src/main/java/com/mageddo/dns/utils/Wildcards.java
similarity index 90%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/Wildcards.java
rename to src/main/java/com/mageddo/dns/utils/Wildcards.java
index a46b683e..01a16d4b 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/Wildcards.java
+++ b/src/main/java/com/mageddo/dns/utils/Wildcards.java
@@ -1,4 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dns.utils;
+
+import com.mageddo.dns.Hostname;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/Config.java b/src/main/java/com/mageddo/dnsproxyserver/config/Config.java
index b61d4063..11f2de7f 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/Config.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/Config.java
@@ -1,6 +1,6 @@
 package com.mageddo.dnsproxyserver.config;
 
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 import com.mageddo.net.IP;
 import com.mageddo.net.IpAddr;
 import lombok.Builder;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/ConfigDAOJson.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/ConfigDAOJson.java
index 2c377e0f..4f880bc2 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/ConfigDAOJson.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/ConfigDAOJson.java
@@ -35,7 +35,7 @@ public class ConfigDAOJson implements ConfigDAO {
 
   public Config find(Path configPath) {
     final var jsonConfig = JsonConfigs.loadConfig(configPath);
-    log.info("status=configuring, configPath={}", configPath);
+    log.debug("configPath={}", configPath);
     return toConfig(jsonConfig, configPath);
   }
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/JsonConfigs.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/JsonConfigs.java
index d66db841..e25cf506 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/JsonConfigs.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/JsonConfigs.java
@@ -72,6 +72,7 @@ public class JsonConfigs {
     JsonUtils
       .prettyInstance()
       .writeValue(configPath.toFile(), config);
+    log.info("status=createdDefaultConfigFile, path={}", configPath);
   }
 
   @SneakyThrows
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAO.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAO.java
index e6a9138e..e076c193 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAO.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAO.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.config.dataprovider;
 
 import com.mageddo.dnsproxyserver.config.Config;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 
 import java.util.List;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAOJson.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAOJson.java
index d582dec4..e1bd3a8c 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAOJson.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/PersistentConfigDAOJson.java
@@ -7,7 +7,7 @@ import com.mageddo.dnsproxyserver.config.dataprovider.predicate.EnvPredicate;
 import com.mageddo.dnsproxyserver.config.dataprovider.predicate.JsonEnvPredicate;
 import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigJson;
 import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigJsonV2;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJson.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJson.java
index 02fb9520..3bc3bea7 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJson.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJson.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.config.dataprovider.vo;
 
 import com.mageddo.dnsproxyserver.config.Config;
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 import com.mageddo.net.IpAddr;
 
 import java.net.URI;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV1.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV1.java
index 75412752..cddaa7b8 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV1.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV1.java
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.dataprovider.mapper.ConfigJsonV1EnvsMapper;
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 import com.mageddo.net.IpAddr;
 import lombok.Data;
 import lombok.NoArgsConstructor;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV2.java b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV2.java
index a3e6ad12..3e2c6691 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV2.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigJsonV2.java
@@ -9,7 +9,7 @@ import com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer;
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
 import com.mageddo.dnsproxyserver.config.dataprovider.mapper.ConfigJsonV2EnvsMapper;
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 import com.mageddo.net.IP;
 import com.mageddo.net.IpAddr;
 import lombok.Data;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/config/mapper/ConfigMapper.java b/src/main/java/com/mageddo/dnsproxyserver/config/mapper/ConfigMapper.java
index cfa7eb54..b6d27ed6 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/config/mapper/ConfigMapper.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/config/mapper/ConfigMapper.java
@@ -4,7 +4,7 @@ import com.mageddo.dnsproxyserver.config.CircuitBreaker;
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.SolverRemote;
 import com.mageddo.dnsproxyserver.config.dataprovider.ConfigPropDAO;
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 import com.mageddo.dnsproxyserver.utils.Numbers;
 import com.mageddo.net.IpAddr;
 import org.apache.commons.lang3.SystemUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/Context.java b/src/main/java/com/mageddo/dnsproxyserver/di/Context.java
index 7d92ff9b..dde05a3d 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/Context.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/Context.java
@@ -12,9 +12,9 @@ import com.mageddo.dnsproxyserver.di.module.ModuleStartup;
 import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
 import com.mageddo.dnsproxyserver.quarkus.QuarkusConfig;
 import com.mageddo.dnsproxyserver.server.Starter;
-import com.mageddo.dnsproxyserver.server.dns.solver.Solver;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.ContainerSolvingService;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.Solver;
+import com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
 import dagger.Component;
 import jdk.jfr.Name;
 import org.apache.commons.lang3.Validate;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleDao.java b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleDao.java
index 635beaa7..c0b2f642 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleDao.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleDao.java
@@ -6,14 +6,14 @@ import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
 import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacadeDefault;
 import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
 import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacadeDefault;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.ContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.ContainerDAODefault;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAODefault;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAODefault;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAODefault;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAODefault;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAODefault;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAODefault;
 import dagger.Binds;
 import dagger.Module;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMain.java b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMain.java
index 0dab2e33..f6c2ab64 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMain.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMain.java
@@ -1,6 +1,6 @@
 package com.mageddo.dnsproxyserver.di.module;
 
-import com.mageddo.dnsproxyserver.server.dns.RequestHandler;
+import com.mageddo.dnsserver.RequestHandler;
 import com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault;
 import dagger.Binds;
 import dagger.Module;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMap.java b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMap.java
index e8765138..f13aabb8 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMap.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMap.java
@@ -4,8 +4,8 @@ import com.mageddo.dnsproxyserver.config.dataprovider.PersistentConfigDAO;
 import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
 import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
 import com.mageddo.dnsproxyserver.server.dns.ServerStarter;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverLocalDB;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
 import dagger.Binds;
 import dagger.Module;
 import dagger.multibindings.ClassKey;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleSolver.java b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleSolver.java
index 612a9f86..db3b1461 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleSolver.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleSolver.java
@@ -1,14 +1,14 @@
 package com.mageddo.dnsproxyserver.di.module;
 
 import com.mageddo.di.InstanceImpl;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName;
-import com.mageddo.dnsproxyserver.server.dns.solver.Solver;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverCache;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverCachedRemote;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverDocker;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverLocalDB;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverSystem;
+import com.mageddo.dnsproxyserver.solver.CacheName;
+import com.mageddo.dnsproxyserver.solver.Solver;
+import com.mageddo.dnsproxyserver.solver.SolverCache;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.SolverCachedRemote;
+import com.mageddo.dnsproxyserver.solver.SolverDocker;
+import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
+import com.mageddo.dnsproxyserver.solver.SolverSystem;
 import dagger.Module;
 import dagger.Provides;
 import dagger.multibindings.ElementsIntoSet;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleStartup.java b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleStartup.java
index bec8ef6c..937e9182 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleStartup.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleStartup.java
@@ -2,7 +2,7 @@ package com.mageddo.dnsproxyserver.di.module;
 
 import com.mageddo.dnsproxyserver.di.StartupEvent;
 import com.mageddo.dnsproxyserver.dnsconfigurator.DnsConfigurators;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.entrypoint.EventListener;
+import com.mageddo.dnsproxyserver.solver.docker.entrypoint.EventListener;
 import dagger.Module;
 import dagger.Provides;
 import dagger.multibindings.ElementsIntoSet;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/dnsconfigurator/DnsConfigurators.java b/src/main/java/com/mageddo/dnsproxyserver/dnsconfigurator/DnsConfigurators.java
index 5b7a05b2..d0bb8b33 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/dnsconfigurator/DnsConfigurators.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/dnsconfigurator/DnsConfigurators.java
@@ -5,7 +5,7 @@ import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.application.Configs;
 import com.mageddo.dnsproxyserver.di.StartupEvent;
 import com.mageddo.dnsproxyserver.dnsconfigurator.linux.DnsConfiguratorLinux;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DpsContainerService;
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsContainerService;
 import com.mageddo.net.IpAddr;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/quarkus/QuarkusConfig.java b/src/main/java/com/mageddo/dnsproxyserver/quarkus/QuarkusConfig.java
index 9450945d..153875bf 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/quarkus/QuarkusConfig.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/quarkus/QuarkusConfig.java
@@ -1,10 +1,10 @@
 package com.mageddo.dnsproxyserver.quarkus;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.Resolver;
-import com.mageddo.dnsproxyserver.server.dns.solver.SimpleResolver;
+import com.mageddo.dnsproxyserver.solver.Resolver;
+import com.mageddo.dnsproxyserver.solver.SimpleResolver;
 import com.mageddo.net.IpAddr;
-import com.mageddo.dnsproxyserver.server.dns.solver.RemoteResolvers;
+import com.mageddo.dnsproxyserver.solver.RemoteResolvers;
 import com.mageddo.dnsproxyserver.utils.InetAddresses;
 import dagger.Module;
 import dagger.Provides;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefault.java b/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefault.java
index d67b50f7..a00b2489 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefault.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefault.java
@@ -1,28 +1,36 @@
 package com.mageddo.dnsproxyserver.server.dns;
 
+import com.mageddo.commons.lang.Objects;
+import com.mageddo.dns.utils.Messages;
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
-import com.mageddo.dnsproxyserver.server.dns.solver.Response;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverCache;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverProvider;
+import com.mageddo.dnsproxyserver.solver.CacheName;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.Response;
+import com.mageddo.dnsproxyserver.solver.Solver;
+import com.mageddo.dnsproxyserver.solver.SolverCache;
+import com.mageddo.dnsproxyserver.solver.SolverProvider;
+import com.mageddo.dnsserver.RequestHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.time.StopWatch;
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
 import org.xbill.DNS.Message;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Optional;
 
-import static com.mageddo.dnsproxyserver.server.dns.Messages.simplePrint;
+import static com.mageddo.dns.utils.Messages.simplePrint;
 
 @Slf4j
 @Singleton
 public class RequestHandlerDefault implements RequestHandler {
 
+  public static final Duration DEFAULT_GLOBAL_CACHE_DURATION = Duration.ofSeconds(20);
+
   private final SolverProvider solverProvider;
   private final SolverCache cache;
   private final int noEntriesRCode;
@@ -39,62 +47,42 @@ public class RequestHandlerDefault implements RequestHandler {
 
   @Override
   public Message handle(Message query, String kind) {
-    return this.solve(query, kind);
-  }
-
-  Message solve(Message query, String kind) {
     final var queryStr = simplePrint(query);
     final var stopWatch = StopWatch.createStarted();
     log.debug("status=solveReq, kind={}, query={}", kind, queryStr);
     try {
-      final var res = Optional
-        .ofNullable(this.cache.handle(query, this::solve0))
-        .orElseGet(() -> buildDefaultRes(query));
-      log.debug("status=solveRes, kind={}, time={}, res={}, req={}", kind, stopWatch.getTime(), simplePrint(res), queryStr);
-      return res;
+      return this.solveCaching(query, kind, stopWatch, queryStr);
     } catch (Exception e) {
       log.warn(
         "status=solverFailed, totalTime={}, eClass={}, msg={}",
         stopWatch.getTime(), ClassUtils.getSimpleName(e), e.getMessage(), e
       );
-      return buildDefaultRes(query);
+      return this.buildDefaultRes(query);
     }
   }
 
-  Response solve0(Message reqMsg) {
-    final var stopWatch = StopWatch.createStarted();
-    final var solvers = this.solverProvider.getSolvers();
+  Message solveCaching(Message query, String kind, StopWatch stopWatch, String queryStr) {
+    final var res = Optional
+      .ofNullable(this.cache.handle(query, this::solveFixingCacheTTL))
+      .orElseGet(() -> this.buildDefaultRes(query));
+    log.debug("status=solveRes, kind={}, time={}, res={}, req={}", kind, stopWatch.getTime(), simplePrint(res), queryStr);
+    return res;
+  }
+
+  Response solveFixingCacheTTL(Message reqMsg) {
+    return Objects.mapOrNull(this.solve(reqMsg), res -> res.withTTL(DEFAULT_GLOBAL_CACHE_DURATION));
+  }
+
+  Response solve(Message reqMsg) {
     final var timeSummary = new ArrayList<>();
     try {
+      final var stopWatch = StopWatch.createStarted();
+      final var solvers = this.solverProvider.getSolvers();
       for (final var solver : solvers) {
-        stopWatch.split();
-        final var solverName = solver.name();
-        try {
-          final var reqStr = simplePrint(reqMsg);
-          log.trace("status=trySolve, solver={}, req={}", solverName, reqStr);
-          final var res = solver.handle(reqMsg);
-          final var solverTime = stopWatch.getTime() - stopWatch.getSplitTime();
-          if (log.isDebugEnabled()) {
-            timeSummary.add(Pair.of(solverName, solverTime));
-          }
-          if (res == null) {
-            log.trace(
-              "status=notSolved, currentSolverTime={}, totalTime={}, solver={}, req={}",
-              solverTime, stopWatch.getTime(), solverName, reqStr
-            );
-            continue;
-          }
-          log.debug(
-            "status=solved, currentSolverTime={}, totalTime={}, solver={}, req={}, res={}",
-            solverTime, stopWatch.getTime(), solverName, reqStr, simplePrint(res)
-          );
-          return res;
-        } catch (Exception e) {
-          log.warn(
-            "status=solverFailed, currentSolverTime={}, totalTime={}, solver={}, query={}, eClass={}, msg={}",
-            stopWatch.getTime() - stopWatch.getSplitTime(), stopWatch.getTime(), solverName,
-            simplePrint(reqMsg), ClassUtils.getSimpleName(e), e.getMessage(), e
-          );
+        final var triple = this.solveAndSummarizeHandlingError(reqMsg, solver, stopWatch);
+        timeSummary.add(Pair.of(triple.getLeft(), triple.getMiddle()));
+        if (triple.getRight() != null) {
+          return triple.getRight();
         }
       }
     } finally {
@@ -105,6 +93,41 @@ public class RequestHandlerDefault implements RequestHandler {
     return null;
   }
 
+  Triple<String, Long, Response> solveAndSummarizeHandlingError(Message reqMsg, Solver solver, StopWatch stopWatch) {
+    final var solverName = solver.name();
+    try {
+      return this.solveAndSummarize(reqMsg, solver, stopWatch);
+    } catch (Exception e) {
+      log.warn(
+        "status=solverFailed, currentSolverTime={}, totalTime={}, solver={}, query={}, eClass={}, msg={}",
+        stopWatch.getTime() - stopWatch.getSplitTime(), stopWatch.getTime(), solverName,
+        simplePrint(reqMsg), ClassUtils.getSimpleName(e), e.getMessage(), e
+      );
+      return null;
+    }
+  }
+
+  Triple<String, Long, Response> solveAndSummarize(Message reqMsg, Solver solver, StopWatch stopWatch) {
+    stopWatch.split();
+    final var solverName = solver.name();
+    final var reqStr = simplePrint(reqMsg);
+    log.trace("status=trySolve, solver={}, req={}", solverName, reqStr);
+    final var res = solver.handle(reqMsg);
+    final var solverTime = stopWatch.getTime() - stopWatch.getSplitTime();
+    if (res == null) {
+      log.trace(
+        "status=notSolved, currentSolverTime={}, totalTime={}, solver={}, req={}",
+        solverTime, stopWatch.getTime(), solverName, reqStr
+      );
+      return Triple.of(solverName, solverTime, null);
+    }
+    log.debug(
+      "status=solved, currentSolverTime={}, totalTime={}, solver={}, req={}, res={}",
+      solverTime, stopWatch.getTime(), solverName, reqStr, simplePrint(res)
+    );
+    return Triple.of(solverName, solverTime, res);
+  }
+
   public Message buildDefaultRes(Message reqMsg) {
     // if all failed and returned null, then return as can't find
     return Messages.withResponseCode(reqMsg, this.noEntriesRCode);
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/ServerStarter.java b/src/main/java/com/mageddo/dnsproxyserver/server/dns/ServerStarter.java
index d3145029..b32b8aa9 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/ServerStarter.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/server/dns/ServerStarter.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.server.dns;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DpsContainerService;
+import com.mageddo.dnsserver.SimpleServer;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
@@ -14,12 +14,10 @@ import javax.inject.Singleton;
 public class ServerStarter {
 
   private final SimpleServer server;
-  private final DpsContainerService dpsContainerService;
 
   @Inject
-  public ServerStarter(SimpleServer server, DpsContainerService dpsContainerService) {
+  public ServerStarter(SimpleServer server) {
     this.server = server;
-    this.dpsContainerService = dpsContainerService;
   }
 
   public ServerStarter start() {
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Response.java b/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Response.java
deleted file mode 100644
index cfc74fbf..00000000
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Response.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
-
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import lombok.Builder;
-import lombok.NonNull;
-import lombok.Value;
-import org.xbill.DNS.Message;
-
-import java.time.Duration;
-import java.time.LocalDateTime;
-
-@Value
-@Builder(toBuilder = true)
-public class Response {
-
-  /**
-   * The effective response.
-   */
-  @NonNull
-  private Message message;
-
-  /**
-   * the calculated ttl, can be the specified on the message or calculated to a different one.
-   */
-  @NonNull
-  private Duration ttl;
-
-  @NonNull
-  private LocalDateTime createdAt;
-
-  public static Response of(Message message) {
-    return of(message, Messages.DEFAULT_TTL_DURATION);
-  }
-
-  public static Response of(Message message, Duration ttl) {
-    return Response
-      .builder()
-      .message(message)
-      .ttl(ttl)
-      .createdAt(LocalDateTime.now())
-      .build();
-  }
-
-  public Response withMessage(Message msg) {
-    return this
-      .toBuilder()
-      .message(msg)
-      .build()
-      ;
-  }
-
-  public Response withTTL(Duration ttl) {
-    return this.toBuilder()
-      .ttl(ttl)
-      .build();
-  }
-}
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAO.java b/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAO.java
deleted file mode 100644
index 047224fe..00000000
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAO.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
-
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-
-import java.util.List;
-
-public interface ContainerDAO {
-
-  List<ContainerCompact> findNetworkContainers(String networkId);
-
-  List<Container> findActiveContainersMatching(HostnameQuery query);
-
-}
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/rest/CacheResource.java b/src/main/java/com/mageddo/dnsproxyserver/server/rest/CacheResource.java
index e5fe35bc..dec883fd 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/rest/CacheResource.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/server/rest/CacheResource.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.server.rest;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverCacheFactory;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.SolverCacheFactory;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
 import com.mageddo.dnsproxyserver.server.rest.reqres.CacheEntryResV1;
 import com.mageddo.http.HttpMapper;
 import com.mageddo.http.Request;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/rest/NetworkResource.java b/src/main/java/com/mageddo/dnsproxyserver/server/rest/NetworkResource.java
index d286647d..4abf3261 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/rest/NetworkResource.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/server/rest/NetworkResource.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.server.rest;
 
 import com.mageddo.commons.lang.Objects;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DockerNetworkService;
+import com.mageddo.dnsproxyserver.solver.docker.application.DockerNetworkService;
 import com.mageddo.http.HttpMapper;
 import com.mageddo.http.Request;
 import com.mageddo.http.WebServer;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/rest/reqres/CacheEntryResV1.java b/src/main/java/com/mageddo/dnsproxyserver/server/rest/reqres/CacheEntryResV1.java
index 01fcc3aa..7d0f5a74 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/rest/reqres/CacheEntryResV1.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/server/rest/reqres/CacheEntryResV1.java
@@ -1,6 +1,6 @@
 package com.mageddo.dnsproxyserver.server.rest.reqres;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheEntry;
+import com.mageddo.dnsproxyserver.solver.CacheEntry;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheEntry.java b/src/main/java/com/mageddo/dnsproxyserver/solver/CacheEntry.java
similarity index 82%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheEntry.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/CacheEntry.java
index 8cd9cf3b..4019a46b 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheEntry.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/CacheEntry.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheName.java b/src/main/java/com/mageddo/dnsproxyserver/solver/CacheName.java
similarity index 89%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheName.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/CacheName.java
index 54097650..11e9b955 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/CacheName.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/CacheName.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import org.apache.commons.lang3.EnumUtils;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameMatcher.java b/src/main/java/com/mageddo/dnsproxyserver/solver/HostnameMatcher.java
similarity index 85%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameMatcher.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/HostnameMatcher.java
index 3d905f90..e6216202 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameMatcher.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/HostnameMatcher.java
@@ -1,6 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Hostname;
+import com.mageddo.dns.Hostname;
 import com.mageddo.net.IP;
 
 import java.util.List;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQuery.java b/src/main/java/com/mageddo/dnsproxyserver/solver/HostnameQuery.java
similarity index 95%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQuery.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/HostnameQuery.java
index 8adb391c..ad346538 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQuery.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/HostnameQuery.java
@@ -1,8 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
-import com.mageddo.dnsproxyserver.server.dns.Hostname;
-import com.mageddo.dnsproxyserver.server.dns.Wildcards;
+import com.mageddo.dns.Hostname;
+import com.mageddo.dns.utils.Wildcards;
 import com.mageddo.net.IP;
 import lombok.Builder;
 import lombok.EqualsAndHashCode;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Priority.java b/src/main/java/com/mageddo/dnsproxyserver/solver/Priority.java
similarity index 79%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Priority.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/Priority.java
index bcd0653b..671dd1f0 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Priority.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/Priority.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 public class Priority {
   public static final byte ZERO = 0;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolvers.java b/src/main/java/com/mageddo/dnsproxyserver/solver/RemoteResolvers.java
similarity index 91%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolvers.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/RemoteResolvers.java
index e566143d..6efe8509 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolvers.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/RemoteResolvers.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.net.IpAddr;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Resolver.java b/src/main/java/com/mageddo/dnsproxyserver/solver/Resolver.java
similarity index 71%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Resolver.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/Resolver.java
index d5012c1f..38a67a4e 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Resolver.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/Resolver.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 
 import java.net.InetSocketAddress;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/solver/Response.java b/src/main/java/com/mageddo/dnsproxyserver/solver/Response.java
new file mode 100644
index 00000000..de6437c4
--- /dev/null
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/Response.java
@@ -0,0 +1,77 @@
+package com.mageddo.dnsproxyserver.solver;
+
+import com.mageddo.dns.utils.Messages;
+import lombok.Builder;
+import lombok.NonNull;
+import lombok.Value;
+import org.xbill.DNS.Message;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+
+@Value
+@Builder(toBuilder = true)
+public class Response {
+
+  /**
+   * These magic numbers were defined as explained at #370.
+   * <br/>
+   * "I read it is a common approach to DNS Servers to cache names for more time than specified on the TTL
+   * In general people expects the server name address to be updated in some hours, then if DPS caches found
+   * hostnames for at least 5 minutes and the don't found for 1 hour, it might speed up a lot."
+   */
+  public static final Duration DEFAULT_SUCCESS_TTL = Duration.ofMinutes(5);
+  public static final Duration DEFAULT_NXDOMAIN_TTL = Duration.ofMinutes(60);
+
+  /**
+   * The effective response for the client.
+   */
+  @NonNull
+  private Message message;
+
+  /**
+   * The calculated TTL which will be used by DPS to cache entries,
+   * it's not the same specified at {@link #message}. It is calculated with default values based on the scenario,
+   * see {@link #DEFAULT_SUCCESS_TTL} for more explanations.
+   */
+  @NonNull
+  private Duration dpsTtl;
+
+  @NonNull
+  private LocalDateTime createdAt;
+
+  public static Response of(Message message, Duration dpsTtl) {
+    return Response
+      .builder()
+      .message(message)
+      .dpsTtl(dpsTtl)
+      .createdAt(LocalDateTime.now())
+      .build();
+  }
+
+  public static Response nxDomain(Message message) {
+    return of(message, DEFAULT_NXDOMAIN_TTL);
+  }
+
+  public static Response success(Message message) {
+    return of(message, DEFAULT_SUCCESS_TTL);
+  }
+
+  public static Response internalSuccess(Message message) {
+    return of(message, Messages.DEFAULT_TTL_DURATION);
+  }
+
+  public Response withMessage(Message msg) {
+    return this
+      .toBuilder()
+      .message(msg)
+      .build()
+      ;
+  }
+
+  public Response withTTL(Duration ttl) {
+    return this.toBuilder()
+      .dpsTtl(ttl)
+      .build();
+  }
+}
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Responses.java b/src/main/java/com/mageddo/dnsproxyserver/solver/Responses.java
similarity index 77%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Responses.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/Responses.java
index 80ed2994..bf5ce4a1 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Responses.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/Responses.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 public class Responses {
   public static boolean hasFlag(Response r, int flag) {
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SimpleResolver.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SimpleResolver.java
similarity index 90%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SimpleResolver.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SimpleResolver.java
index 87f3e9ba..31d7863b 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SimpleResolver.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SimpleResolver.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Solver.java b/src/main/java/com/mageddo/dnsproxyserver/solver/Solver.java
similarity index 84%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Solver.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/Solver.java
index 342a384c..dbf5673b 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/Solver.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/Solver.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import org.apache.commons.lang3.ClassUtils;
 import org.xbill.DNS.Message;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCache.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCache.java
similarity index 85%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCache.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverCache.java
index cc43e0b8..5400daf7 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCache.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCache.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.commons.caching.LruTTLCache;
 import com.mageddo.commons.lang.Objects;
 import com.mageddo.commons.lang.tuple.Pair;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.xbill.DNS.Message;
@@ -16,8 +16,8 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.function.Function;
 
-import static com.mageddo.dnsproxyserver.server.dns.Messages.findQuestionHostname;
-import static com.mageddo.dnsproxyserver.server.dns.Messages.findQuestionType;
+import static com.mageddo.dns.utils.Messages.findQuestionHostname;
+import static com.mageddo.dns.utils.Messages.findQuestionType;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -40,7 +40,7 @@ public class SolverCache {
         log.debug("status=noAnswer, action=cantCache, k={}", k);
         return null;
       }
-      final var ttl = _res.getTtl();
+      final var ttl = _res.getDpsTtl();
       log.debug("status=hotload, k={}, ttl={}, simpleMsg={}", k, ttl, Messages.simplePrint(query));
       return Pair.of(_res, ttl);
     });
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCacheFactory.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCacheFactory.java
similarity index 84%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCacheFactory.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverCacheFactory.java
index 343e1b12..577db650 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCacheFactory.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCacheFactory.java
@@ -1,6 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.inject.Inject;
@@ -10,8 +10,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import static com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name.GLOBAL;
-import static com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name.REMOTE;
+import static com.mageddo.dnsproxyserver.solver.CacheName.Name.GLOBAL;
+import static com.mageddo.dnsproxyserver.solver.CacheName.Name.REMOTE;
 
 @Slf4j
 @Singleton
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemote.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemote.java
similarity index 66%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemote.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemote.java
index 35482b76..7b668e17 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemote.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemote.java
@@ -1,14 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.commons.lang.Objects;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
 import lombok.extern.slf4j.Slf4j;
 import org.xbill.DNS.Message;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import java.time.Duration;
 
 @Slf4j
 @Singleton
@@ -30,11 +28,10 @@ public class SolverCachedRemote implements Solver {
 
   @Override
   public Response handle(Message query) {
-    final var res = this.solversCache.handleRes(query, query_ -> {
+    return this.solversCache.handleRes(query, query_ -> {
       log.debug("status=remoteHotLoading, query={}", Messages.simplePrint(query));
       return this.solverRemote.handle(query);
     });
-    return Objects.mapOrNull(res, response -> response.withTTL(Duration.ofSeconds(20)));
   }
 
   @Override
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegate.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverDelegate.java
similarity index 90%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegate.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverDelegate.java
index 210e8a27..05472b4e 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegate.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverDelegate.java
@@ -1,8 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config;
-import com.mageddo.dnsproxyserver.server.dns.Hostnames;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Hostnames;
+import com.mageddo.dns.utils.Messages;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.xbill.DNS.Message;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDocker.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverDocker.java
similarity index 79%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDocker.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverDocker.java
index ebee1bb0..9fb9bd4e 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDocker.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverDocker.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
 import com.mageddo.dnsproxyserver.config.ConfigEntryTypes;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.ContainerSolvingService;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.xbill.DNS.Message;
@@ -41,7 +41,7 @@ public class SolverDocker implements Solver {
       if (!entry.isHostnameMatched()) {
         return null;
       }
-      return Response.of(Messages.answer(
+      return Response.internalSuccess(Messages.answer(
         query,
         entry.getIpText(),
         hostname.getVersion()
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDB.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverLocalDB.java
similarity index 96%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDB.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverLocalDB.java
index 644f8b8d..e2a19db1 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDB.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverLocalDB.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
 import com.mageddo.dnsproxyserver.config.dataprovider.PersistentConfigDAO;
 import com.mageddo.dnsproxyserver.config.ConfigEntryTypes;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
 import dagger.Lazy;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverMock.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverMock.java
similarity index 85%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverMock.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverMock.java
index 9821cd0b..1b39d03f 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverMock.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverMock.java
@@ -1,6 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
 import com.mageddo.net.IP;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.tuple.Pair;
@@ -38,7 +38,7 @@ public class SolverMock implements Solver {
     final var hostname = Messages.findQuestionHostname(query);
     for (final var entry : this.mocks) {
       if (entry.getKey().equalsIgnoreCase(hostname.getValue())) {
-        return Response.of(Messages.aAnswer(query, entry.getValue().toText()));
+        return Response.internalSuccess(Messages.aAnswer(query, entry.getValue().toText()));
       }
     }
     return null;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProvider.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverProvider.java
similarity index 96%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProvider.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverProvider.java
index 9f13a604..7086990b 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProvider.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverProvider.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.application.Configs;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemote.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverRemote.java
similarity index 92%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemote.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverRemote.java
index 99da9571..f9a5613d 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemote.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverRemote.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.commons.circuitbreaker.CircuitCheckException;
 import com.mageddo.commons.concurrent.ThreadPool;
 import com.mageddo.commons.concurrent.Threads;
 import com.mageddo.dnsproxyserver.config.application.ConfigService;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
 import com.mageddo.net.Networks;
 import dev.failsafe.CircuitBreaker;
 import dev.failsafe.CircuitBreakerOpenException;
@@ -21,7 +21,6 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 import java.io.IOException;
 import java.net.InetSocketAddress;
-import java.time.Duration;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
@@ -30,16 +29,13 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicReference;
 
-import static com.mageddo.dnsproxyserver.server.dns.Messages.simplePrint;
+import static com.mageddo.dns.utils.Messages.simplePrint;
 
 @Slf4j
 @Singleton
 @RequiredArgsConstructor(onConstructor = @__({@Inject}))
 public class SolverRemote implements Solver {
 
-  public static final Duration DEFAULT_SUCCESS_TTL = Duration.ofMinutes(5);
-  public static final Duration DEFAULT_NXDOMAIN_TTL = Duration.ofMinutes(60);
-
   static final String QUERY_TIMED_OUT_MSG = "Query timed out";
   static final long FPS_120 = 1000 / 120;
 
@@ -79,7 +75,7 @@ public class SolverRemote implements Solver {
     if (hasErrorResult) {
       return null;
     }
-    return Response.of(lastErrorMsg.get(), DEFAULT_NXDOMAIN_TTL);
+    return Response.nxDomain(lastErrorMsg.get());
   }
 
   private Response handle0(
@@ -111,7 +107,7 @@ public class SolverRemote implements Solver {
   private static void testPing(InetSocketAddress address, Future<Boolean> pingFuture) {
     try {
       final var pingSuccess = pingFuture.get();
-      log.info(
+      log.debug(
         "stats=pingTested, success={}, address={}:{}", pingSuccess, address.getAddress(), address.getPort()
       );
       if (!pingSuccess) {
@@ -138,7 +134,7 @@ public class SolverRemote implements Solver {
           "status=found, i={}, time={}, req={}, res={}, server={}",
           i, stopWatch.getTime(), simplePrint(query), simplePrint(res), resolver
         );
-        return Response.of(res, DEFAULT_SUCCESS_TTL);
+        return Response.success(res);
       } else {
         lastErrorMsg.set(res);
         log.trace(
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystem.java b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverSystem.java
similarity index 89%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystem.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/SolverSystem.java
index dc24fa36..5f7ce316 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystem.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/SolverSystem.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.commons.lang.Objects;
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
 import com.mageddo.dnsproxyserver.config.application.Configs;
 import com.mageddo.dnsproxyserver.config.ConfigEntryTypes;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
 import com.mageddo.dnsproxyserver.usecase.HostMachineService;
 import com.mageddo.net.IP;
 import lombok.AllArgsConstructor;
@@ -14,7 +14,7 @@ import org.xbill.DNS.Message;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import static com.mageddo.dnsproxyserver.server.dns.Messages.findQuestionTypeCode;
+import static com.mageddo.dns.utils.Messages.findQuestionTypeCode;
 
 @Slf4j
 @Singleton
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Container.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Container.java
similarity index 96%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Container.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/Container.java
index c8bafacc..462cc377 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Container.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Container.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker;
+package com.mageddo.dnsproxyserver.solver.docker;
 
 import com.mageddo.net.IP;
 import lombok.Builder;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/ContainerCompact.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/ContainerCompact.java
similarity index 85%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/ContainerCompact.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/ContainerCompact.java
index eef91dae..81e15104 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/ContainerCompact.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/ContainerCompact.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker;
+package com.mageddo.dnsproxyserver.solver.docker;
 
 import lombok.Builder;
 import lombok.NonNull;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Entry.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Entry.java
similarity index 80%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Entry.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/Entry.java
index 6df91e8a..691a7272 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Entry.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Entry.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker;
+package com.mageddo.dnsproxyserver.solver.docker;
 
 import com.mageddo.net.IP;
 import lombok.Builder;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Network.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Network.java
similarity index 94%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Network.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/Network.java
index 0d784ed8..7ad657f5 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/Network.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/Network.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker;
+package com.mageddo.dnsproxyserver.solver.docker;
 
 import com.mageddo.net.IP;
 import lombok.Builder;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingService.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingService.java
similarity index 88%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingService.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingService.java
index f06403ae..9ce2bcd2 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingService.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingService.java
@@ -1,13 +1,13 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Entry;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.ContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.Entry;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
 import com.mageddo.net.IP;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DockerNetworkService.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DockerNetworkService.java
similarity index 80%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DockerNetworkService.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DockerNetworkService.java
index eab75f10..34a90b5d 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DockerNetworkService.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DockerNetworkService.java
@@ -1,8 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.ContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerService.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerService.java
similarity index 87%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerService.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerService.java
index ddd5c036..7c2d1466 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerService.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerService.java
@@ -1,12 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
 import com.mageddo.net.IP;
 import com.mageddo.net.Networks;
 import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupService.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupService.java
similarity index 76%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupService.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupService.java
index a667a978..0b87b95e 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupService.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupService.java
@@ -1,9 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
@@ -11,8 +12,6 @@ import javax.enterprise.inject.Default;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.Network.Name;
-
 @Slf4j
 @Default
 @Singleton
@@ -55,7 +54,7 @@ public class DpsDockerEnvironmentSetupService {
   }
 
   void createNetworkIfAbsent() {
-    if (this.networkDAO.existsByName(Name.DPS.lowerCaseName())) {
+    if (this.networkDAO.existsByName(Network.Name.DPS.lowerCaseName())) {
       log.debug("status=dpsNetworkAlreadyExists");
       return;
     }
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/NetworkComparator.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/NetworkComparator.java
similarity index 66%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/NetworkComparator.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/NetworkComparator.java
index 49d52b40..5af8bbd4 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/NetworkComparator.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/application/NetworkComparator.java
@@ -1,14 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.Network.Name.OTHER;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 
 public class NetworkComparator {
 
   static int toPriorityOrder(Network n) {
     final var network = Network.Name.of(n.getName());
-    if(network == OTHER){
+    if(network == Network.Name.OTHER){
       return Network.Name.of(n.getDriver()).ordinal();
     }
     return network.ordinal();
diff --git a/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAO.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAO.java
new file mode 100644
index 00000000..73bc0111
--- /dev/null
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAO.java
@@ -0,0 +1,15 @@
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
+
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+
+import java.util.List;
+
+public interface ContainerDAO {
+
+  List<ContainerCompact> findNetworkContainers(String networkId);
+
+  List<Container> findActiveContainersMatching(HostnameQuery query);
+
+}
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAODefault.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAODefault.java
similarity index 70%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAODefault.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAODefault.java
index 5d293be9..7c4ec072 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerDAODefault.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAODefault.java
@@ -1,12 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.DockerClient;
 import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.ContainerCompactMapper;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.ContainerMapper;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerCompactMapper;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerMapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcher.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcher.java
similarity index 74%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcher.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcher.java
index ef4da0b4..4e617584 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcher.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcher.java
@@ -1,17 +1,15 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 import org.apache.commons.lang3.BooleanUtils;
 
 import java.util.List;
 import java.util.function.Predicate;
 
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.Docker.buildHostnamesFromServiceOrContainerNames;
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.Docker.findContainerHostname;
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerUtils.findHostnamesFromEnv;
+import static com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerUtils.findHostnamesFromEnv;
 
 public class ContainerHostnameMatcher {
 
@@ -45,7 +43,7 @@ public class ContainerHostnameMatcher {
   }
 
   public static boolean hostnameMatches(InspectContainerResponse c, HostnameQuery host) {
-    return host.matches(findContainerHostname(c.getConfig()));
+    return host.matches(Docker.findContainerHostname(c.getConfig()));
   }
 
   public static boolean hostnamesEnvMatches(InspectContainerResponse c, HostnameQuery hostnameQuery) {
@@ -57,7 +55,7 @@ public class ContainerHostnameMatcher {
 
   public static boolean serviceOrContainerNameMatches(InspectContainerResponse c, HostnameQuery hostQuery, Config config) {
     return isRegisterContainerNames(config)
-      && buildHostnamesFromServiceOrContainerNames(c, config.getDomain())
+           && Docker.buildHostnamesFromServiceOrContainerNames(c, config.getDomain())
       .stream()
       .anyMatch(hostQuery::matches)
       ;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/Docker.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/Docker.java
similarity index 92%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/Docker.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/Docker.java
index c0b7647c..8f9c57e6 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/Docker.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/Docker.java
@@ -1,9 +1,9 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.github.dockerjava.api.model.ContainerConfig;
 import com.mageddo.dnsproxyserver.docker.application.Labels;
-import com.mageddo.dnsproxyserver.server.dns.Hostname;
+import com.mageddo.dns.Hostname;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAO.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAO.java
similarity index 75%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAO.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAO.java
index 9869cd16..949066e2 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAO.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAO.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.mageddo.net.IP;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefault.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefault.java
similarity index 81%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefault.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefault.java
index 36e83fea..2ed36461 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefault.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefault.java
@@ -1,11 +1,11 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.DockerClient;
 import com.mageddo.commons.lang.Objects;
 import com.mageddo.dnsproxyserver.docker.application.DockerConnectionCheck;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.NetworkComparator;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.NetworkMapper;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.application.NetworkComparator;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.NetworkMapper;
 import com.mageddo.net.IP;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAO.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAO.java
similarity index 56%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAO.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAO.java
index 53f1c5a5..040771fb 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAO.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAO.java
@@ -1,6 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
 
 public interface DpsContainerDAO {
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefault.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefault.java
similarity index 90%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefault.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefault.java
index dc6dfe81..bcc8904e 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefault.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefault.java
@@ -1,13 +1,13 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.model.Network.Ipam;
 import com.mageddo.dnsproxyserver.config.application.Configs;
 import com.mageddo.dnsproxyserver.docker.application.Containers;
 import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.ContainerMapper;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerMapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtils.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtils.java
similarity index 90%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtils.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtils.java
index e43b9c34..1818378d 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtils.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtils.java
@@ -1,7 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.model.Container;
-import com.mageddo.dnsproxyserver.server.dns.Hostname;
+import com.mageddo.dns.Hostname;
 import com.mageddo.dnsproxyserver.utils.Splits;
 
 import java.util.Arrays;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAO.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAO.java
similarity index 74%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAO.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAO.java
index dbdc8521..bcecb9ce 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAO.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAO.java
@@ -1,9 +1,9 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 
 import com.mageddo.dnsproxyserver.docker.domain.NetworkConnectionStatus;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 
 import java.util.function.Predicate;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAODefault.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAODefault.java
similarity index 86%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAODefault.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAODefault.java
index b80d46de..7ff59f6a 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/NetworkDAODefault.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/NetworkDAODefault.java
@@ -1,14 +1,14 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.model.Container;
 import com.mageddo.dnsproxyserver.docker.application.Containers;
 import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
 import com.mageddo.dnsproxyserver.docker.domain.NetworkConnectionStatus;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.ContainerCompactMapper;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper.NetworkMapper;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerCompactMapper;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.NetworkMapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.tuple.Pair;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapper.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapper.java
similarity index 63%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapper.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapper.java
index 034c2b6e..d1ad14d2 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapper.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapper.java
@@ -1,8 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
 import com.github.dockerjava.api.model.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.ContainerCompact;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerUtils;
+import com.mageddo.dnsproxyserver.solver.docker.ContainerCompact;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerUtils;
 
 import java.util.Arrays;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapper.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapper.java
similarity index 92%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapper.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapper.java
index 686c5e5c..486a309c 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapper.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapper.java
@@ -1,10 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.github.dockerjava.api.model.ContainerNetwork;
 import com.mageddo.dnsproxyserver.docker.application.Labels;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 import com.mageddo.net.IP;
 import com.mageddo.net.Networks;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapper.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapper.java
similarity index 87%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapper.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapper.java
index 175f206d..e4cde12c 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapper.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapper.java
@@ -1,6 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 import com.mageddo.net.IP;
 
 import java.util.Objects;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListener.java b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListener.java
similarity index 85%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListener.java
rename to src/main/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListener.java
index 205130ab..761fadc6 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListener.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListener.java
@@ -1,12 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.entrypoint;
+package com.mageddo.dnsproxyserver.solver.docker.entrypoint;
 
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.async.ResultCallback;
 import com.github.dockerjava.api.model.Event;
 import com.mageddo.dnsproxyserver.di.StartupEvent;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DockerNetworkService;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DpsDockerEnvironmentSetupService;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.application.DockerNetworkService;
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsDockerEnvironmentSetupService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/usecase/HostMachineService.java b/src/main/java/com/mageddo/dnsproxyserver/usecase/HostMachineService.java
index 3e95796a..89f99ed0 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/usecase/HostMachineService.java
+++ b/src/main/java/com/mageddo/dnsproxyserver/usecase/HostMachineService.java
@@ -1,7 +1,7 @@
 package com.mageddo.dnsproxyserver.usecase;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
 import com.mageddo.net.IP;
 import com.mageddo.net.Networks;
 import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandler.java b/src/main/java/com/mageddo/dnsserver/DnsQueryTCPHandler.java
similarity index 97%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandler.java
rename to src/main/java/com/mageddo/dnsserver/DnsQueryTCPHandler.java
index bb45845e..e446ed54 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandler.java
+++ b/src/main/java/com/mageddo/dnsserver/DnsQueryTCPHandler.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
+import com.mageddo.dns.utils.Messages;
 import com.mageddo.utils.Shorts;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ClassUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandler.java b/src/main/java/com/mageddo/dnsserver/RequestHandler.java
similarity index 82%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandler.java
rename to src/main/java/com/mageddo/dnsserver/RequestHandler.java
index 6d5fd4a1..e71befc3 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandler.java
+++ b/src/main/java/com/mageddo/dnsserver/RequestHandler.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import org.xbill.DNS.Message;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerMock.java b/src/main/java/com/mageddo/dnsserver/RequestHandlerMock.java
similarity index 91%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerMock.java
rename to src/main/java/com/mageddo/dnsserver/RequestHandlerMock.java
index 79cfabb4..c66edf8a 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerMock.java
+++ b/src/main/java/com/mageddo/dnsserver/RequestHandlerMock.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import org.xbill.DNS.Message;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SimpleServer.java b/src/main/java/com/mageddo/dnsserver/SimpleServer.java
similarity index 91%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/SimpleServer.java
rename to src/main/java/com/mageddo/dnsserver/SimpleServer.java
index a7bd73e5..1745b621 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SimpleServer.java
+++ b/src/main/java/com/mageddo/dnsserver/SimpleServer.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
+import com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClient.java b/src/main/java/com/mageddo/dnsserver/SocketClient.java
similarity index 98%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClient.java
rename to src/main/java/com/mageddo/dnsserver/SocketClient.java
index a87252e0..154aa2cc 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClient.java
+++ b/src/main/java/com/mageddo/dnsserver/SocketClient.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import com.mageddo.commons.concurrent.Threads;
 import lombok.EqualsAndHashCode;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClientMessageHandler.java b/src/main/java/com/mageddo/dnsserver/SocketClientMessageHandler.java
similarity index 87%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClientMessageHandler.java
rename to src/main/java/com/mageddo/dnsserver/SocketClientMessageHandler.java
index 9f65ce07..dd6d55ab 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/SocketClientMessageHandler.java
+++ b/src/main/java/com/mageddo/dnsserver/SocketClientMessageHandler.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 /**
  * Lead and treat TCP Socket Client messages to something useful.
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/TCPServer.java b/src/main/java/com/mageddo/dnsserver/TCPServer.java
similarity index 98%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/TCPServer.java
rename to src/main/java/com/mageddo/dnsserver/TCPServer.java
index dff6f4cc..2f7f8e4a 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/TCPServer.java
+++ b/src/main/java/com/mageddo/dnsserver/TCPServer.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import com.mageddo.commons.concurrent.ThreadPool;
 import com.mageddo.commons.io.IoUtils;
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServer.java b/src/main/java/com/mageddo/dnsserver/UDPServer.java
similarity index 97%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServer.java
rename to src/main/java/com/mageddo/dnsserver/UDPServer.java
index 2c137f3e..f989b6ee 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServer.java
+++ b/src/main/java/com/mageddo/dnsserver/UDPServer.java
@@ -1,7 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import com.mageddo.commons.concurrent.ThreadPool;
 import com.mageddo.commons.io.IoUtils;
+import com.mageddo.dns.utils.Messages;
 import lombok.extern.slf4j.Slf4j;
 import org.xbill.DNS.Message;
 
diff --git a/src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServerPool.java b/src/main/java/com/mageddo/dnsserver/UDPServerPool.java
similarity index 95%
rename from src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServerPool.java
rename to src/main/java/com/mageddo/dnsserver/UDPServerPool.java
index cb7f220b..c46d9cbc 100644
--- a/src/main/java/com/mageddo/dnsproxyserver/server/dns/UDPServerPool.java
+++ b/src/main/java/com/mageddo/dnsserver/UDPServerPool.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import com.mageddo.dnsproxyserver.utils.Ips;
 import lombok.RequiredArgsConstructor;


Test patch:
diff --git a/src/test/java/com/mageddo/dnsproxyserver/config/PersistentConfigDAOJsonTest.java b/src/test/java/com/mageddo/dnsproxyserver/config/PersistentConfigDAOJsonTest.java
index a88ec531..409ea3c7 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/config/PersistentConfigDAOJsonTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/config/PersistentConfigDAOJsonTest.java
@@ -2,7 +2,7 @@ package com.mageddo.dnsproxyserver.config;
 
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
 import com.mageddo.dnsproxyserver.config.dataprovider.PersistentConfigDAOJson;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 import testing.templates.EnvTemplates;
 import testing.templates.HostnameQueryTemplates;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/dns/server/solver/WildcardsTest.java b/src/test/java/com/mageddo/dnsproxyserver/dns/server/solver/WildcardsTest.java
index c35e61cd..95c9e1f9 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/dns/server/solver/WildcardsTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/dns/server/solver/WildcardsTest.java
@@ -1,9 +1,9 @@
 package com.mageddo.dnsproxyserver.dns.server.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Hostname;
+import com.mageddo.dns.Hostname;
 import org.junit.jupiter.api.Test;
 
-import static com.mageddo.dnsproxyserver.server.dns.Wildcards.buildHostAndWildcards;
+import static com.mageddo.dns.utils.Wildcards.buildHostAndWildcards;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 class WildcardsTest {
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/CacheResourceCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/server/CacheResourceCompTest.java
index 9ad247d2..34abaafc 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/CacheResourceCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/server/CacheResourceCompTest.java
@@ -1,9 +1,9 @@
 package com.mageddo.dnsproxyserver.server;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverCache;
+import com.mageddo.dnsproxyserver.solver.CacheName;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.SolverCache;
 import testing.templates.MessageTemplates;
 import testing.templates.ResponseTemplates;
 import dagger.sheath.junit.DaggerTest;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/MessagesTest.java b/src/test/java/com/mageddo/dnsproxyserver/server/dns/MessagesTest.java
index f6743247..b1262466 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/MessagesTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/server/dns/MessagesTest.java
@@ -1,11 +1,12 @@
 package com.mageddo.dnsproxyserver.server.dns;
 
+import com.mageddo.dns.utils.Messages;
 import testing.templates.MessageTemplates;
 import org.junit.jupiter.api.Test;
 import org.xbill.DNS.Flags;
 import org.xbill.DNS.Rcode;
 
-import static com.mageddo.dnsproxyserver.server.dns.Messages.findFirstAnswerRecord;
+import static com.mageddo.dns.utils.Messages.findFirstAnswerRecord;
 import static testing.templates.MessageTemplates.acmeAResponse;
 import static testing.templates.MessageTemplates.acmeNxDomain;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefaultTest.java b/src/test/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefaultTest.java
new file mode 100644
index 00000000..f998f968
--- /dev/null
+++ b/src/test/java/com/mageddo/dnsproxyserver/server/dns/RequestHandlerDefaultTest.java
@@ -0,0 +1,39 @@
+package com.mageddo.dnsproxyserver.server.dns;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+import testing.templates.MessageTemplates;
+import testing.templates.ResponseTemplates;
+
+import static com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.DEFAULT_GLOBAL_CACHE_DURATION;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+
+@ExtendWith(MockitoExtension.class)
+class RequestHandlerDefaultTest {
+
+  @Spy
+  @InjectMocks
+  RequestHandlerDefault handler;
+
+  @Test
+  void mustCacheWithFixedTTL() {
+    // arrange
+    final var mesRes = MessageTemplates.acmeAResponse();
+
+    doReturn(ResponseTemplates.acmeAResponse())
+      .when(this.handler)
+      .solve(eq(mesRes))
+    ;
+
+    // act
+    final var res = this.handler.solveFixingCacheTTL(mesRes);
+
+    // assert
+    assertEquals(DEFAULT_GLOBAL_CACHE_DURATION, res.getDpsTtl());
+  }
+}
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/rest/NetworkResourceCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/server/rest/NetworkResourceCompTest.java
index 10a0a9a2..8320802e 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/rest/NetworkResourceCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/server/rest/NetworkResourceCompTest.java
@@ -1,6 +1,6 @@
 package com.mageddo.dnsproxyserver.server.rest;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DockerNetworkService;
+import com.mageddo.dnsproxyserver.solver.docker.application.DockerNetworkService;
 import dagger.sheath.InjectMock;
 import dagger.sheath.junit.DaggerTest;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQueryTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/HostnameQueryTest.java
similarity index 93%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQueryTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/HostnameQueryTest.java
index 00061783..bbb6f786 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/HostnameQueryTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/HostnameQueryTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 import testing.templates.HostnameQueryTemplates;
 import testing.templates.HostnameTemplates;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolversCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/RemoteResolversCompTest.java
similarity index 87%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolversCompTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/RemoteResolversCompTest.java
index 3a7a4417..a6f3d96a 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/RemoteResolversCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/RemoteResolversCompTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.RemoteResolvers;
 import dagger.sheath.junit.DaggerTest;
 import org.junit.jupiter.api.Test;
 import testing.ContextSupplier;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemoteTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemoteTest.java
similarity index 81%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemoteTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemoteTest.java
index 9233da32..85b91b7e 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverCachedRemoteTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverCachedRemoteTest.java
@@ -1,5 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.SolverCache;
+import com.mageddo.dnsproxyserver.solver.SolverCachedRemote;
 import testing.templates.MessageTemplates;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegateTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverDelegateTest.java
similarity index 85%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegateTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverDelegateTest.java
index 1776d634..b33b0a1f 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDelegateTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverDelegateTest.java
@@ -1,5 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.SolverDelegate;
+import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
+import com.mageddo.dnsproxyserver.solver.SolverProvider;
 import testing.templates.EntryTemplates;
 import testing.templates.MessageTemplates;
 import testing.templates.SolverMockTemplates;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDockerTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverDockerTest.java
similarity index 90%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDockerTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverDockerTest.java
index 6100f08a..b844c868 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverDockerTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverDockerTest.java
@@ -1,9 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.ContainerSolvingService;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.Responses;
+import com.mageddo.dnsproxyserver.solver.SolverDocker;
+import com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
 import com.mageddo.net.IP;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBCompTest.java
similarity index 91%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBCompTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBCompTest.java
index 0d05f22a..2f0eaf60 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBCompTest.java
@@ -1,9 +1,11 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.dataprovider.PersistentConfigDAO;
 import com.mageddo.dnsproxyserver.di.Context;
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
+import com.mageddo.dnsproxyserver.solver.SolverProvider;
 import testing.templates.EntryTemplates;
 import testing.templates.docker.SolverTemplates;
 import dagger.sheath.InjectMock;
@@ -12,7 +14,7 @@ import org.junit.jupiter.api.Test;
 
 import javax.inject.Inject;
 
-import static com.mageddo.dnsproxyserver.server.dns.Hostnames.toAbsoluteName;
+import static com.mageddo.dns.utils.Hostnames.toAbsoluteName;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBTest.java
similarity index 91%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBTest.java
index 7ec8ea83..de2dedc3 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverLocalDBTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverLocalDBTest.java
@@ -1,6 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
 import testing.templates.EntryTemplates;
 import testing.templates.HostnameTemplates;
 import testing.templates.MessageTemplates;
@@ -50,7 +52,7 @@ class SolverLocalDBTest {
       "acme.com.    45  IN  A  10.10.0.1",
       Messages.detailedPrint(res.getMessage())
     );
-    assertEquals(Duration.ofSeconds(45), res.getTtl());
+    assertEquals(Duration.ofSeconds(45), res.getDpsTtl());
 
     verify(this.solver, never()).findEntryTo(hostname);
     verify(this.solver).findEntryTo(wildcardHostName);
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderCompTest.java
similarity index 86%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderCompTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderCompTest.java
index 0080bfc9..11a3a230 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderCompTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.SolverProvider;
 import dagger.sheath.junit.DaggerTest;
 import org.junit.jupiter.api.Test;
 import testing.ContextSupplier;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderTest.java
similarity index 84%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderTest.java
index f9e8dd67..c01cf3fc 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverProviderTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverProviderTest.java
@@ -1,7 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
 import com.mageddo.dnsproxyserver.quarkus.Instances;
+import com.mageddo.dnsproxyserver.solver.Solver;
+import com.mageddo.dnsproxyserver.solver.SolverMock;
+import com.mageddo.dnsproxyserver.solver.SolverProvider;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.junit.jupiter.MockitoExtension;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemoteTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverRemoteTest.java
similarity index 92%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemoteTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverRemoteTest.java
index a4a6ad60..0020192a 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverRemoteTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverRemoteTest.java
@@ -1,5 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.RemoteResolvers;
+import com.mageddo.dnsproxyserver.solver.Resolver;
+import com.mageddo.dnsproxyserver.solver.Response;
+import com.mageddo.dnsproxyserver.solver.Responses;
+import com.mageddo.dnsproxyserver.solver.SolverRemote;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
@@ -68,7 +73,7 @@ class SolverRemoteTest {
     final var res = this.solverRemote.handle(query);
 
     // assert
-    assertEquals(SolverRemote.DEFAULT_SUCCESS_TTL, res.getTtl());
+    assertEquals(Response.DEFAULT_SUCCESS_TTL, res.getDpsTtl());
   }
 
   @Test
@@ -100,7 +105,7 @@ class SolverRemoteTest {
     final var res = this.solverRemote.handle(query);
 
     // assert
-    assertEquals(SolverRemote.DEFAULT_NXDOMAIN_TTL, res.getTtl());
+    assertEquals(Response.DEFAULT_NXDOMAIN_TTL, res.getDpsTtl());
   }
 
   @Test
@@ -164,7 +169,7 @@ class SolverRemoteTest {
 
     // assert
     assertTrue(Responses.hasFlag(result, Flags.RA));
-    assertEquals(SolverRemote.DEFAULT_SUCCESS_TTL, result.getTtl());
+    assertEquals(Response.DEFAULT_SUCCESS_TTL, result.getDpsTtl());
   }
 
 
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemCompTest.java
similarity index 93%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemCompTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemCompTest.java
index 1836e941..618cd9cb 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemCompTest.java
@@ -1,6 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.SolverSystem;
 import testing.templates.HostnameTemplates;
 import com.mageddo.dnsproxyserver.usecase.HostMachineService;
 import com.mageddo.net.IP;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemTest.java
similarity index 86%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemTest.java
index 0117b18b..b101c470 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolverSystemTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolverSystemTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
+import com.mageddo.dnsproxyserver.solver.SolverSystem;
 import testing.templates.MessageTemplates;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolversCacheTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/SolversCacheTest.java
similarity index 77%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolversCacheTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/SolversCacheTest.java
index afc69240..294f9314 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/SolversCacheTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/SolversCacheTest.java
@@ -1,7 +1,9 @@
-package com.mageddo.dnsproxyserver.server.dns.solver;
+package com.mageddo.dnsproxyserver.solver;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.CacheName.Name;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.CacheName.Name;
+import com.mageddo.dnsproxyserver.solver.Response;
+import com.mageddo.dnsproxyserver.solver.SolverCache;
 import testing.templates.MessageTemplates;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -25,7 +27,7 @@ class SolversCacheTest {
     final var req = MessageTemplates.acmeAQuery();
 
     // act
-    final var res = this.cache.handle(req, message -> Response.of(Messages.aAnswer(message, "0.0.0.0")));
+    final var res = this.cache.handle(req, message -> Response.internalSuccess(Messages.aAnswer(message, "0.0.0.0")));
 
     // assert
     assertNotNull(res);
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingServiceTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingServiceTest.java
similarity index 94%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingServiceTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingServiceTest.java
index 448e3666..a2910b3e 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/ContainerSolvingServiceTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/ContainerSolvingServiceTest.java
@@ -1,9 +1,10 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.ContainerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
 import com.mageddo.net.IP;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerServiceTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerServiceTest.java
similarity index 89%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerServiceTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerServiceTest.java
index f4cd2717..edb8e82f 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsContainerServiceTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsContainerServiceTest.java
@@ -1,6 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.NetworkDAO;
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsContainerService;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.NetworkDAO;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java
similarity index 85%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java
index bee005c6..b84834ea 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/application/DpsDockerEnvironmentSetupServiceTest.java
@@ -1,5 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.application;
+package com.mageddo.dnsproxyserver.solver.docker.application;
 
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsContainerService;
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsDockerEnvironmentSetupService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcherTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcherTest.java
similarity index 95%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcherTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcherTest.java
index a7e2156f..91f63c0d 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/ContainerHostnameMatcherTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerHostnameMatcherTest.java
@@ -1,7 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import com.mageddo.dnsproxyserver.config.application.Configs;
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerHostnameMatcher;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import testing.templates.ConfigTemplates;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefaultTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefaultTest.java
similarity index 91%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefaultTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefaultTest.java
index e5cb898b..5a8971de 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DockerDAODefaultTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DockerDAODefaultTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault;
 import com.mageddo.net.IP;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefaultTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefaultTest.java
similarity index 79%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefaultTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefaultTest.java
index 6f676093..354c2d80 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerDAODefaultTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefaultTest.java
@@ -1,4 +1,4 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -6,7 +6,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import static com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DpsContainerDAODefault.DPS_INSIDE_CONTAINER_YES;
+import static com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAODefault.DPS_INSIDE_CONTAINER_YES;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.doReturn;
 
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtilsTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtilsTest.java
similarity index 92%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtilsTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtilsTest.java
index 8ff844cd..64c0381b 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/DpsContainerUtilsTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerUtilsTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider;
 
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerUtils;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java
similarity index 88%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java
index 4ff91308..b60122f4 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerCompactMapperTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerCompactMapper;
 import org.junit.jupiter.api.Test;
 import testing.templates.docker.ContainerTemplates;
 
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapperTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapperTest.java
similarity index 94%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapperTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapperTest.java
index 9b0ba8d5..dc8b96d5 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/ContainerMapperTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/ContainerMapperTest.java
@@ -1,5 +1,6 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.ContainerMapper;
 import com.mageddo.net.IP;
 import org.junit.jupiter.api.Test;
 import testing.templates.docker.InspectContainerResponseTemplates;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapperTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapperTest.java
similarity index 91%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapperTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapperTest.java
index 341f155b..f3939491 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/dataprovider/mapper/NetworkMapperTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/mapper/NetworkMapperTest.java
@@ -1,6 +1,7 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.mapper;
+package com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper;
 
 import com.mageddo.dnsproxyserver.docker.domain.Drivers;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.NetworkMapper;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.junit.jupiter.MockitoExtension;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListenerCompTest.java b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListenerCompTest.java
similarity index 83%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListenerCompTest.java
rename to src/test/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListenerCompTest.java
index 3aac3250..55e07bc4 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/solver/docker/entrypoint/EventListenerCompTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/solver/docker/entrypoint/EventListenerCompTest.java
@@ -1,7 +1,8 @@
-package com.mageddo.dnsproxyserver.server.dns.solver.docker.entrypoint;
+package com.mageddo.dnsproxyserver.solver.docker.entrypoint;
 
 import com.mageddo.dnsproxyserver.di.Context;
 import com.mageddo.dnsproxyserver.di.StartupEvent;
+import com.mageddo.dnsproxyserver.solver.docker.entrypoint.EventListener;
 import dagger.sheath.junit.DaggerTest;
 import org.junit.jupiter.api.Test;
 
diff --git a/src/test/java/com/mageddo/dnsproxyserver/usecase/HostMachineServiceTest.java b/src/test/java/com/mageddo/dnsproxyserver/usecase/HostMachineServiceTest.java
index efd61f7d..014e4149 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/usecase/HostMachineServiceTest.java
+++ b/src/test/java/com/mageddo/dnsproxyserver/usecase/HostMachineServiceTest.java
@@ -1,6 +1,6 @@
 package com.mageddo.dnsproxyserver.usecase;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.dataprovider.DockerDAO;
+import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
diff --git a/src/test/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandlerTest.java b/src/test/java/com/mageddo/dnsserver/DnsQueryTCPHandlerTest.java
similarity index 98%
rename from src/test/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandlerTest.java
rename to src/test/java/com/mageddo/dnsserver/DnsQueryTCPHandlerTest.java
index 19565f65..3a5717a0 100644
--- a/src/test/java/com/mageddo/dnsproxyserver/server/dns/DnsQueryTCPHandlerTest.java
+++ b/src/test/java/com/mageddo/dnsserver/DnsQueryTCPHandlerTest.java
@@ -1,12 +1,12 @@
-package com.mageddo.dnsproxyserver.server.dns;
+package com.mageddo.dnsserver;
 
 import com.mageddo.commons.concurrent.ThreadPool;
 import com.mageddo.commons.concurrent.Threads;
-import testing.templates.MessageTemplates;
-import testing.templates.SocketClientTemplates;
 import com.mageddo.utils.Shorts;
 import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Test;
+import testing.templates.MessageTemplates;
+import testing.templates.SocketClientTemplates;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
diff --git a/src/test/java/testing/templates/ConfigTemplates.java b/src/test/java/testing/templates/ConfigTemplates.java
index 5f9e819c..9b026e17 100644
--- a/src/test/java/testing/templates/ConfigTemplates.java
+++ b/src/test/java/testing/templates/ConfigTemplates.java
@@ -3,7 +3,7 @@ package testing.templates;
 import com.mageddo.dnsproxyserver.config.Config;
 import com.mageddo.dnsproxyserver.config.LogLevel;
 import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigEnv;
-import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
+import com.mageddo.dnsserver.SimpleServer;
 
 import java.nio.file.Paths;
 
diff --git a/src/test/java/testing/templates/HostnameQueryTemplates.java b/src/test/java/testing/templates/HostnameQueryTemplates.java
index c1e74e84..9f4a845b 100644
--- a/src/test/java/testing/templates/HostnameQueryTemplates.java
+++ b/src/test/java/testing/templates/HostnameQueryTemplates.java
@@ -1,6 +1,6 @@
 package testing.templates;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.HostnameQuery;
+import com.mageddo.dnsproxyserver.solver.HostnameQuery;
 import com.mageddo.net.IP;
 
 public class HostnameQueryTemplates {
diff --git a/src/test/java/testing/templates/MessageTemplates.java b/src/test/java/testing/templates/MessageTemplates.java
index eff24bcb..10f994c6 100644
--- a/src/test/java/testing/templates/MessageTemplates.java
+++ b/src/test/java/testing/templates/MessageTemplates.java
@@ -1,6 +1,6 @@
 package testing.templates;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
+import com.mageddo.dns.utils.Messages;
 import org.xbill.DNS.Message;
 
 public class MessageTemplates {
diff --git a/src/test/java/testing/templates/ResponseTemplates.java b/src/test/java/testing/templates/ResponseTemplates.java
index fffba0c0..d55fc93d 100644
--- a/src/test/java/testing/templates/ResponseTemplates.java
+++ b/src/test/java/testing/templates/ResponseTemplates.java
@@ -1,7 +1,7 @@
 package testing.templates;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.Response;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.Response;
 import org.xbill.DNS.Message;
 
 import java.time.Duration;
@@ -10,4 +10,8 @@ public class ResponseTemplates {
   public static Response to(Message query) {
     return Response.of(Messages.aAnswer(query, "0.0.0.0"), Duration.ofSeconds(5));
   }
+
+  public static Response acmeAResponse(){
+    return to(MessageTemplates.acmeAResponse());
+  }
 }
diff --git a/src/test/java/testing/templates/SocketClientTemplates.java b/src/test/java/testing/templates/SocketClientTemplates.java
index ed5a560d..b3043e58 100644
--- a/src/test/java/testing/templates/SocketClientTemplates.java
+++ b/src/test/java/testing/templates/SocketClientTemplates.java
@@ -1,7 +1,6 @@
 package testing.templates;
 
-import com.mageddo.dnsproxyserver.server.dns.SocketClient;
-import org.mockito.Mockito;
+import com.mageddo.dnsserver.SocketClient;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/src/test/java/testing/templates/SolverMockTemplates.java b/src/test/java/testing/templates/SolverMockTemplates.java
index a69d7e58..e96f17b3 100644
--- a/src/test/java/testing/templates/SolverMockTemplates.java
+++ b/src/test/java/testing/templates/SolverMockTemplates.java
@@ -1,6 +1,6 @@
 package testing.templates;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.SolverMock;
+import com.mageddo.dnsproxyserver.solver.SolverMock;
 import com.mageddo.net.IP;
 import org.apache.commons.lang3.tuple.Pair;
 
diff --git a/src/test/java/testing/templates/docker/EntryTemplates.java b/src/test/java/testing/templates/docker/EntryTemplates.java
index 4b5a8d9b..bc74c577 100644
--- a/src/test/java/testing/templates/docker/EntryTemplates.java
+++ b/src/test/java/testing/templates/docker/EntryTemplates.java
@@ -1,6 +1,6 @@
 package testing.templates.docker;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Entry;
+import com.mageddo.dnsproxyserver.solver.docker.Entry;
 import testing.templates.IpTemplates;
 import com.mageddo.net.IP;
 
diff --git a/src/test/java/testing/templates/docker/SolverTemplates.java b/src/test/java/testing/templates/docker/SolverTemplates.java
index 975e05ae..bf0b7390 100644
--- a/src/test/java/testing/templates/docker/SolverTemplates.java
+++ b/src/test/java/testing/templates/docker/SolverTemplates.java
@@ -1,15 +1,15 @@
 package testing.templates.docker;
 
-import com.mageddo.dnsproxyserver.server.dns.Messages;
-import com.mageddo.dnsproxyserver.server.dns.solver.Response;
-import com.mageddo.dnsproxyserver.server.dns.solver.Solver;
+import com.mageddo.dns.utils.Messages;
+import com.mageddo.dnsproxyserver.solver.Response;
+import com.mageddo.dnsproxyserver.solver.Solver;
 
 import java.util.List;
 
 public class SolverTemplates {
   public static List<Solver> mockTo192() {
     return List.of(reqMsg -> {
-      return Response.of(Messages.aAnswer(reqMsg, "192.168.1.8"));
+      return Response.internalSuccess(Messages.aAnswer(reqMsg, "192.168.1.8"));
     });
   }
 }
diff --git a/src/test/java/testing/templates/server/dns/solver/docker/ContainerNetworkTemplates.java b/src/test/java/testing/templates/server/dns/solver/docker/ContainerNetworkTemplates.java
index 0138b5c5..644722e3 100644
--- a/src/test/java/testing/templates/server/dns/solver/docker/ContainerNetworkTemplates.java
+++ b/src/test/java/testing/templates/server/dns/solver/docker/ContainerNetworkTemplates.java
@@ -1,6 +1,6 @@
 package testing.templates.server.dns.solver.docker;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
 import com.mageddo.net.IP;
 
 import java.util.stream.Stream;
diff --git a/src/test/java/testing/templates/server/dns/solver/docker/ContainerTemplates.java b/src/test/java/testing/templates/server/dns/solver/docker/ContainerTemplates.java
index c35345f5..c238fd31 100644
--- a/src/test/java/testing/templates/server/dns/solver/docker/ContainerTemplates.java
+++ b/src/test/java/testing/templates/server/dns/solver/docker/ContainerTemplates.java
@@ -1,7 +1,7 @@
 package testing.templates.server.dns.solver.docker;
 
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Container;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.application.DpsContainerService;
+import com.mageddo.dnsproxyserver.solver.docker.Container;
+import com.mageddo.dnsproxyserver.solver.docker.application.DpsContainerService;
 import com.mageddo.net.IP;
 import com.mageddo.utils.Sets;
 
diff --git a/src/test/java/testing/templates/server/dns/solver/docker/NetworkTemplates.java b/src/test/java/testing/templates/server/dns/solver/docker/NetworkTemplates.java
index be99bcee..24bfdef9 100644
--- a/src/test/java/testing/templates/server/dns/solver/docker/NetworkTemplates.java
+++ b/src/test/java/testing/templates/server/dns/solver/docker/NetworkTemplates.java
@@ -1,7 +1,7 @@
 package testing.templates.server.dns.solver.docker;
 
 import com.mageddo.dnsproxyserver.docker.domain.Drivers;
-import com.mageddo.dnsproxyserver.server.dns.solver.docker.Network;
+import com.mageddo.dnsproxyserver.solver.docker.Network;
 import com.mageddo.net.IP;
 
 import java.util.Collections;