diff --git a/src/configuration.cc b/src/configuration.cc
index c34ffbec3e0873ba72ac4b482cdb921132349141..273b639037dc06c8e584f995829cc9d50ffb9197 100644
--- a/src/configuration.cc
+++ b/src/configuration.cc
@@ -71,6 +71,12 @@ Configuration::Configuration(QObject *parent) : QObject(parent) {
   // TODO Configuration check
 }
 
+Configuration &Configuration::Instance() {
+  static Configuration instance;
+
+  return instance;
+}
+
 QImage Configuration::frame() const { return frame_; }
 
 const QImage &Configuration::ConstFrame() const { return frame_; }
diff --git a/src/configuration.h b/src/configuration.h
index b38c0f8b405483e5cc3617d2671b7286f7459c63..cf1f07061035216d08dc50d9116568c509fa39c1 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -11,9 +11,10 @@ namespace libmueb {
 
 class Configuration : public QObject {
   Q_OBJECT
+  Q_DISABLE_COPY(Configuration)
 
  public:
-  explicit Configuration(QObject* parent = nullptr);
+  static Configuration& Instance();
 
   QImage frame() const;
   const QImage& ConstFrame() const;
@@ -55,6 +56,9 @@ class Configuration : public QObject {
   quint8 color_depth_;
   quint8 factor_;
   bool debug_mode_;
+
+  explicit Configuration(QObject* parent = nullptr);
+  ~Configuration() = default;
 };
 
 }  // namespace libmueb
diff --git a/src/muebreceiver_p.h b/src/muebreceiver_p.h
index ec6cb39c6559e337b075cbe9443733a5efd9ac53..8ae47c156a4bc9e82a75e6c8a9c9bca3444e35d1 100644
--- a/src/muebreceiver_p.h
+++ b/src/muebreceiver_p.h
@@ -15,7 +15,9 @@ class MuebReceiverPrivate {
 
  public:
   explicit MuebReceiverPrivate(MuebReceiver *receiver)
-      : frame(configuration.frame()), q_ptr(receiver) {
+      : configuration(Configuration::Instance()),
+        frame(configuration.frame()),
+        q_ptr(receiver) {
     socket.bind(
         configuration.broadcast_animation_port(),
         QAbstractSocket::ShareAddress | QAbstractSocket::ReuseAddressHint);
@@ -29,7 +31,7 @@ class MuebReceiverPrivate {
                .arg(configuration.broadcast_animation_port());
   }
 
-  Configuration configuration;
+  Configuration &configuration;
   libmueb::Frame frame;
   QUdpSocket socket;
   MuebReceiver *q_ptr;
diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h
index a5b88a82a197468ef0ec3204ad6fbd33b11a94d4..0654c8f8ee1f6e396a26a6cf85632b95c47f62fa 100644
--- a/src/muebtransmitter_p.h
+++ b/src/muebtransmitter_p.h
@@ -19,7 +19,8 @@ class MuebTransmitterPrivate {
 
  public:
   explicit MuebTransmitterPrivate(MuebTransmitter* transmitter)
-      : datagram_(QByteArray(), configuration_.target_address(),
+      : configuration_(Configuration::Instance()),
+        datagram_(QByteArray(), configuration_.target_address(),
                   configuration_.broadcast_animation_port()),
         q_ptr(transmitter) {
     qInfo().noquote()
@@ -29,7 +30,7 @@ class MuebTransmitterPrivate {
                .arg(configuration_.broadcast_animation_port());
   }
 
-  Configuration configuration_;
+  Configuration& configuration_;
   QUdpSocket socket_;
   QNetworkDatagram datagram_;
   MuebTransmitter* q_ptr;