diff --git a/.gitignore b/.gitignore
index 53f8e67287f1e43cf05af70f8252eb4df3576be2..3e79c7c63c4b544408ddf347f07c720b26d43248 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,9 +6,6 @@ __pycache__/
 # C extensions
 *.so
 
-# workspace configurations
-pyproject.toml
-
 # Distribution / packaging
 .Python
 build/
@@ -56,6 +53,7 @@ coverage.xml
 .pytest_cache/
 .benchmarks/
 cover/
+*_report.xml
 
 # Translations
 *.mo
@@ -133,6 +131,9 @@ venv.bak/
 # VSCode project settings
 .vscode/
 
+# Visual Studio project settings
+/.vs
+
 # Rope project settings
 .ropeproject
 
@@ -161,11 +162,6 @@ cython_debug/
 
 # TeraFlowSDN-generated files
 tfs_runtime_env_vars.sh
-
-# Coverage report files
-*_report.xml
 delete_local_deployment.sh
 local_docker_deployment.sh
 local_k8s_deployment.sh
-/src/common/proto/.gitkeep
-/src/common/proto/__init__.py
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..b5c1b7dcb903bdf9759de8f90dd4766ba06393a7
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,11 @@
+# file containing the configuration for several tools used
+# THIS FILE MUST NOT BE CHANGED
+
+[tool.black]
+line-length = 88
+
+[tool.isort]
+profile = "black"
+line_length = 88
+src_paths = "."
+skip_gitignore = true
\ No newline at end of file
diff --git a/src/dbscanserving/Config.py b/src/dbscanserving/Config.py
index 372416fad00d11e9bc01da3e697ddb6e3935ead5..5e462dac105205a3140ddb7b3a9a95c5feee3478 100644
--- a/src/dbscanserving/Config.py
+++ b/src/dbscanserving/Config.py
@@ -19,8 +19,6 @@ LOG_LEVEL = logging.DEBUG
 
 # gRPC settings
 GRPC_SERVICE_PORT = 10008
-GRPC_MAX_WORKERS = 10
-GRPC_GRACE_PERIOD = 60
 
 # Prometheus settings
 METRICS_PORT = 9192
diff --git a/src/dbscanserving/service/DbscanService.py b/src/dbscanserving/service/DbscanService.py
index f91d4f8c5ea3a3858046567f4a781bc2fbd0a1d8..fd8ae1ffea570ee0c44c1fe02e9103f3a7f5eb8c 100644
--- a/src/dbscanserving/service/DbscanService.py
+++ b/src/dbscanserving/service/DbscanService.py
@@ -16,8 +16,9 @@ import logging
 from concurrent import futures
 
 import grpc
+from common.Constants import DEFAULT_GRPC_GRACE_PERIOD, DEFAULT_GRPC_MAX_WORKERS
 from common.proto.dbscanserving_pb2_grpc import add_DetectorServicer_to_server
-from dbscanserving.Config import GRPC_GRACE_PERIOD, GRPC_MAX_WORKERS, GRPC_SERVICE_PORT
+from dbscanserving.Config import GRPC_SERVICE_PORT
 from dbscanserving.service.DbscanServiceServicerImpl import DbscanServiceServicerImpl
 from grpc_health.v1.health import OVERALL_HEALTH, HealthServicer
 from grpc_health.v1.health_pb2 import HealthCheckResponse
@@ -32,8 +33,8 @@ class DbscanService:
         self,
         address=BIND_ADDRESS,
         port=GRPC_SERVICE_PORT,
-        max_workers=GRPC_MAX_WORKERS,
-        grace_period=GRPC_GRACE_PERIOD,
+        grace_period=DEFAULT_GRPC_GRACE_PERIOD,
+        max_workers=DEFAULT_GRPC_MAX_WORKERS,
     ):
 
         self.address = address
diff --git a/src/dbscanserving/service/__main__.py b/src/dbscanserving/service/__main__.py
index b5ef26922a13b199cf3f5b84ba6bff2a0bd43593..f50975ef06daf7783725485880f2d8623dbe29eb 100644
--- a/src/dbscanserving/service/__main__.py
+++ b/src/dbscanserving/service/__main__.py
@@ -17,8 +17,9 @@ import signal
 import sys
 import threading
 
+from common.Constants import DEFAULT_GRPC_GRACE_PERIOD, DEFAULT_GRPC_MAX_WORKERS
 from common.Settings import get_log_level, get_metrics_port, get_setting
-from dbscanserving.Config import GRPC_GRACE_PERIOD, GRPC_MAX_WORKERS, GRPC_SERVICE_PORT
+from dbscanserving.Config import GRPC_SERVICE_PORT
 from dbscanserving.service.DbscanService import DbscanService
 from prometheus_client import start_http_server
 
@@ -41,8 +42,8 @@ def main():
     service_port = get_setting(
         "DBSCANSERVICE_SERVICE_PORT_GRPC", default=GRPC_SERVICE_PORT
     )
-    max_workers = get_setting("MAX_WORKERS", default=GRPC_MAX_WORKERS)
-    grace_period = get_setting("GRACE_PERIOD", default=GRPC_GRACE_PERIOD)
+    grace_period = get_setting("GRACE_PERIOD", default=DEFAULT_GRPC_GRACE_PERIOD)
+    max_workers = get_setting("MAX_WORKERS", default=DEFAULT_GRPC_MAX_WORKERS)
 
     signal.signal(signal.SIGINT, signal_handler)
     signal.signal(signal.SIGTERM, signal_handler)
diff --git a/src/dbscanserving/tests/test_unitary.py b/src/dbscanserving/tests/test_unitary.py
index 9de9b9c910215791ddeb0f91bc0fe5d09cf2e691..7285b1305114ae7b303930abc83b8c5e9442ba66 100644
--- a/src/dbscanserving/tests/test_unitary.py
+++ b/src/dbscanserving/tests/test_unitary.py
@@ -20,7 +20,7 @@ from unittest.mock import patch
 import pytest
 from common.proto.dbscanserving_pb2 import DetectionRequest, DetectionResponse, Sample
 from dbscanserving.client.DbscanServingClient import DbscanServingClient
-from dbscanserving.Config import GRPC_GRACE_PERIOD, GRPC_MAX_WORKERS, GRPC_SERVICE_PORT
+from dbscanserving.Config import GRPC_SERVICE_PORT
 from dbscanserving.service.DbscanService import DbscanService
 
 port = 10000 + GRPC_SERVICE_PORT  # avoid privileged ports
@@ -31,9 +31,7 @@ LOGGER.setLevel(logging.DEBUG)
 
 @pytest.fixture(scope="session")
 def dbscanserving_service():
-    _service = DbscanService(
-        port=port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD
-    )
+    _service = DbscanService(port=port)
     _service.start()
     yield _service
     _service.stop()
diff --git a/src/opticalattackmitigator/tests/test_unitary.py b/src/opticalattackmitigator/tests/test_unitary.py
index 97b2cd10a48950e9ae0c192bfdb65136867998b2..75473de09969dd86f0f9c9ebe694e38a969e48f3 100644
--- a/src/opticalattackmitigator/tests/test_unitary.py
+++ b/src/opticalattackmitigator/tests/test_unitary.py
@@ -13,6 +13,8 @@
 # limitations under the License.
 
 import logging
+import os
+from unittest.mock import patch
 
 import pytest
 from common.proto.optical_attack_mitigator_pb2 import AttackDescription, AttackResponse
@@ -20,8 +22,6 @@ from opticalattackmitigator.client.OpticalAttackMitigatorClient import (
     OpticalAttackMitigatorClient,
 )
 from opticalattackmitigator.Config import (
-    GRPC_GRACE_PERIOD,
-    GRPC_MAX_WORKERS,
     GRPC_SERVICE_PORT,
 )
 from opticalattackmitigator.service.OpticalAttackMitigatorService import (
@@ -37,7 +37,7 @@ LOGGER.setLevel(logging.DEBUG)
 @pytest.fixture(scope="session")
 def optical_attack_mitigator_service():
     _service = OpticalAttackMitigatorService(
-        port=port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD
+        port=port
     )
     _service.start()
     yield _service
@@ -46,8 +46,16 @@ def optical_attack_mitigator_service():
 
 @pytest.fixture(scope="session")
 def optical_attack_mitigator_client(optical_attack_mitigator_service):
-    _client = OpticalAttackMitigatorClient(address="127.0.0.1", port=port)
-    yield _client
+    with patch.dict(
+        os.environ,
+        {
+            "OPTICALATTACKMITIGATORSERVICE_SERVICE_HOST": "127.0.0.1",
+            "OPTICALATTACKMITIGATORSERVICE_SERVICE_PORT_GRPC": str(port),
+        },
+        clear=True,
+    ):
+        _client = OpticalAttackMitigatorClient()
+        yield _client
     _client.close()