diff --git a/multiscreen-compositor/config.cpp b/multiscreen-compositor/config.cpp
index 5ddc26cdb4509d2f3f80729968bd1b8442ecf2f7..58fca3f6ce148edf7ca3b72356af1a9f3437a706 100644
--- a/multiscreen-compositor/config.cpp
+++ b/multiscreen-compositor/config.cpp
@@ -3,6 +3,7 @@
 #include <QDebug>
 #include <QRegularExpression>
 #include <QFile>
+#include <systemd/sd-daemon.h>
 
 void Config::setRotation(const QString &str)
 {
@@ -76,3 +77,9 @@ inline bool Config::rotationIsValid(const QString * rotation )
     QStringList validRotations = {"0", "90", "180", "270"};
     return validRotations.contains(*rotation);
 }
+
+void Config::notifyCompositorReady()
+{
+    qDebug() << "Notify systemd that the compositor is ready";
+    sd_notify(false, "READY=1");
+}
diff --git a/multiscreen-compositor/config.h b/multiscreen-compositor/config.h
index 610c8c62b017dc5a5f5ff70f9996f97a34a88fdc..d73cdf8601d6a8c88a5b659c8cfc8e832699ce07 100644
--- a/multiscreen-compositor/config.h
+++ b/multiscreen-compositor/config.h
@@ -12,6 +12,7 @@ public:
 
     void setRotation(const QString &str);
     QString rotation() const;
+    Q_INVOKABLE void notifyCompositorReady();
 private:
     QString m_rotation;
     static const QRegularExpression findRotation;
diff --git a/multiscreen-compositor/multiscreen-compositor.pro b/multiscreen-compositor/multiscreen-compositor.pro
index bf35ffda2e383f6d382f76d7b6d65f1e39c773df..ef4d3be70feb231a6a9c473de602fc14a9cfc4ba 100644
--- a/multiscreen-compositor/multiscreen-compositor.pro
+++ b/multiscreen-compositor/multiscreen-compositor.pro
@@ -13,6 +13,9 @@ HEADERS += \
     message-server.h \
     message-serverconnection.h
 
+LIBS += \
+    -lsystemd
+
 OTHER_FILES = \
     qml/main.qml \
 
diff --git a/multiscreen-compositor/qml/main.qml b/multiscreen-compositor/qml/main.qml
index e7be840ace06ace89d11b57b456e98149b10b41c..b3cd503da0c1894872d237f94877dac68fa3c0b8 100644
--- a/multiscreen-compositor/qml/main.qml
+++ b/multiscreen-compositor/qml/main.qml
@@ -110,6 +110,15 @@ WaylandCompositor {
         onIviSurfaceCreated: handleIviSurfaceCreated(iviSurface)
     }
 
+    // =============================================
+    // We need to notify systemd when the compositor
+    // is ready to create surfaces
+    // =============================================
+    onCreatedChanged: {
+        if (created === true) {
+            config.notifyCompositorReady();
+        }
+    }
 
     onSurfaceRequested: {
        console.log("Surface requested", client, id, version);