diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000000000000000000000000000000000000..e922c883a5eb4f038caddb2c2de014b406d7b1fc
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,5 @@
+POSTGRES_USER=postgres
+POSTGRES_PASSWORD=postgres
+POSTGRES_DB=mykos
+POSTGRES_HOST=db
+SOAP_URL=http://host.docker.internal:7000/ws/
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index a293e6d4667525858c8507c65d858f8502eb642e..3b52e1626751e5a3405ba7c610c06e4a82f91579 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-src/public/media/
\ No newline at end of file
+src/public/media/
+.env
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 8fde4f34ff9a72a67c33a23b1ec9bee393ba842d..685cd7bc6aae517e1dc3b9ebc5192dc79d726e7d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,4 @@
 FROM php:8.2-apache
-RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql
+RUN apt-get update && apt-get install -y libpq-dev -y libxml2-dev
+RUN docker-php-ext-install pdo pdo_pgsql soap
 RUN a2enmod rewrite
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index e4b068f7d6b0abea5c55ddaffa3e03f3346ccf41..1b63473d8a99645ce40241e034b42e32f2a5e0b1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -11,19 +11,14 @@ services:
       - ./src/php.ini:/usr/local/etc/php/php.ini
     networks:
       - php-network
+    env_file:
+      - .env
     depends_on:
       - db
-    environment:
-      - POSTGRES_USER=postgres
-      - POSTGRES_PASSWORD=postgres
-      - POSTGRES_DB=mykos
-      - POSTGRES_HOST=db
   db:
     image: postgres:14.1-alpine
-    environment:
-      - POSTGRES_USER=postgres
-      - POSTGRES_PASSWORD=postgres
-      - POSTGRES_DB=mykos
+    env_file:
+      - .env
     volumes:
       - db:/var/lib/postgresql/data
       - ./src/Models/schema.sql:/docker-entrypoint-initdb.d/schema.sql
diff --git a/src/Controllers/DormController.php b/src/Controllers/DormController.php
index 83cb82757a9ad99f14dafcc7b19f3701eb1ea1de..654eac71ecf6c62c07e2f341be1a30fc7b0f3abf 100644
--- a/src/Controllers/DormController.php
+++ b/src/Controllers/DormController.php
@@ -12,6 +12,7 @@ use app\Models\Dorm;
 use app\Models\Media;
 use app\Models\Owners;
 use app\Models\Reviews;
+use app\Soap\SubscriptionService;
 use app\Utils\FileManager;
 use app\Utils\Toast;
 
@@ -110,6 +111,7 @@ class DormController extends Controller
         unset($form->data["dorm_name"]);
         $dorm = Dorm::toModel($form->data);
         $dorm->save();
+        SubscriptionService::getInstance()->notifyNewDorm($dorm);
         Response::redirect("/dorms/{$dorm->dorm_id}/media");
         return;
       }
diff --git a/src/Soap/SubscriptionService.php b/src/Soap/SubscriptionService.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7196c99f6e776787a2614c2939920c059bd1201
--- /dev/null
+++ b/src/Soap/SubscriptionService.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace app\Soap;
+
+use app\Models\Dorm;
+use SoapClient;
+
+class SubscriptionService
+{
+  private $client;
+  private static SubscriptionService $instance;
+
+  public function __construct()
+  {
+    $opts = array(
+      'http' => array(
+        'user_agent' => 'PHPSoapClient'
+      ),
+    );
+    $context = stream_context_create($opts);
+    $url = getenv("SOAP_URL");
+    if ($url === false) {
+      $url = "http://host.docker.internal:7000/ws/";
+    }
+    $this->client = new SoapClient($url . "Subscription?wsdl", array([
+      'stream_context' => $context,
+    ]));
+  }
+
+  public function notifyNewDorm(Dorm $dorm)
+  {
+    $this->client->notifyNewDorm(["dorm" => array(
+      "dorm_id" => $dorm->dorm_id,
+      "name" => $dorm->name,
+      "description" => $dorm->description,
+      "address" => $dorm->address,
+      "city" => $dorm->city,
+      "price" => $dorm->price,
+    )]);
+  }
+
+  public static function getInstance()
+  {
+    if (!isset(self::$instance)) {
+      self::$instance = new SubscriptionService();
+    }
+    return self::$instance;
+  }
+}