diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d422e1a1bb5fd1322fc2585a13d9f8338cd5cc42..978fc1a8ff477dc7a878631fc531243993367fab 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,7 +14,7 @@ add_library(
   muebreceiver SHARED
   ${CMAKE_SOURCE_DIR}/include/libmueb/libmueb_global.h
   ${CMAKE_SOURCE_DIR}/include/libmueb/muebreceiver.h configuration.h
-  muebreceiver.cc configuration.cc)
+  muebreceiver_p.h muebreceiver.cc configuration.cc)
 target_include_directories(muebreceiver PUBLIC ../include/${PROJECT_NAME})
 target_link_libraries(
   muebreceiver
diff --git a/src/muebreceiver.cc b/src/muebreceiver.cc
index dd3b6ab67956783080391c3c54bd8da1fd66bcbc..92f4f2df8cac46a585e5fc59d4a7e1b676e3aaae 100644
--- a/src/muebreceiver.cc
+++ b/src/muebreceiver.cc
@@ -1,31 +1,6 @@
 #include "muebreceiver.h"
 
-#include <QNetworkDatagram>
-#include <QUdpSocket>
-
-#include "configuration.h"
-
-class MuebReceiverPrivate {
-  Q_DECLARE_PUBLIC(MuebReceiver)
-  Q_DISABLE_COPY(MuebReceiverPrivate)
-
- public:
-  explicit MuebReceiverPrivate(MuebReceiver *q)
-      : frame(configuration.frame()), q_ptr(q) {
-    socket.bind(configuration.broadcast_animation_port());
-
-    QObject::connect(&socket, &QUdpSocket::readyRead, q,
-                     &MuebReceiver::readPendingDatagrams);
-
-    qInfo() << "[MuebReceiver] UDP Socket will receive packets on port"
-            << configuration.broadcast_animation_port();
-  }
-
-  Configuration configuration;
-  libmueb::Frame frame;
-  QUdpSocket socket;
-  MuebReceiver *q_ptr;
-};
+#include "muebreceiver_p.h"
 
 MuebReceiver::MuebReceiver(QObject *parent)
     : QObject(parent), d_ptr_(new MuebReceiverPrivate(this)) {}
diff --git a/src/muebreceiver_p.h b/src/muebreceiver_p.h
new file mode 100644
index 0000000000000000000000000000000000000000..4cde98b9cd8515a39e51fdbfba43826508fd36a1
--- /dev/null
+++ b/src/muebreceiver_p.h
@@ -0,0 +1,32 @@
+#ifndef LIBMUEB_MUEBRECEIVER_P_H_
+#define LIBMUEB_MUEBRECEIVER_P_H_
+
+#include <QNetworkDatagram>
+#include <QUdpSocket>
+
+#include "configuration.h"
+#include "muebreceiver.h"
+
+class MuebReceiverPrivate {
+  Q_DECLARE_PUBLIC(MuebReceiver)
+  Q_DISABLE_COPY(MuebReceiverPrivate)
+
+ public:
+  explicit MuebReceiverPrivate(MuebReceiver *q)
+      : frame(configuration.frame()), q_ptr(q) {
+    socket.bind(configuration.broadcast_animation_port());
+
+    QObject::connect(&socket, &QUdpSocket::readyRead, q,
+                     &MuebReceiver::readPendingDatagrams);
+
+    qInfo() << "[MuebReceiver] UDP Socket will receive packets on port"
+            << configuration.broadcast_animation_port();
+  }
+
+  Configuration configuration;
+  libmueb::Frame frame;
+  QUdpSocket socket;
+  MuebReceiver *q_ptr;
+};
+
+#endif  // LIBMUEB_MUEBRECEIVER_P_H_