diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0aee6e5d791997fb5f0d0570c2b4168491c0dcc4..ed554110ce4abfcb8e07191a3ee06ed85b56c44d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,7 +25,7 @@ conan_basic_setup()
 endif()
 
 find_package(
-  Qt6
+  Qt5
   COMPONENTS Core Gui Network Concurrent
   REQUIRED)
 
diff --git a/conanfile.py b/conanfile.py
index 2a430deb510226abedaa55ee50fec7d7eaeb5bef..9d04c69fbd0d2db4d46b54d785719f26394b3a63 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -12,7 +12,7 @@ class LibmuebConan(ConanFile):
     settings = "os", "compiler", "build_type", "arch"
     options = {"shared": [True], "fPIC": [True]}
     default_options = {"shared": True, "fPIC": True}
-    requires = "qt/[^6.0.0]@bincrafters/stable"
+    requires = "qt/[^5.15.2]"
     build_requires = "cmake/[^3.17.0]", "ninja/1.10.2"
     generators = "cmake"
     exports_sources = "CMakeLists.txt", "!CMakeLists.txt.user", "include/*", "src/*"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 978fc1a8ff477dc7a878631fc531243993367fab..e6ea989411fadf4858bc7c623a54c14301c0ef0b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,8 +6,8 @@ add_library(
 target_include_directories(muebtransmitter PUBLIC ../include/${PROJECT_NAME})
 target_link_libraries(
   muebtransmitter
-  PUBLIC Qt6::Core Qt6::Gui
-  PRIVATE Qt6::Network Qt6::Concurrent)
+  PUBLIC Qt5::Core Qt5::Gui
+  PRIVATE Qt5::Network Qt5::Concurrent)
 target_compile_definitions(muebtransmitter PRIVATE LIBMUEB_LIBRARY)
 
 add_library(
@@ -18,6 +18,6 @@ add_library(
 target_include_directories(muebreceiver PUBLIC ../include/${PROJECT_NAME})
 target_link_libraries(
   muebreceiver
-  PUBLIC Qt6::Core Qt6::Gui
-  PRIVATE Qt6::Network)
+  PUBLIC Qt5::Core Qt5::Gui
+  PRIVATE Qt5::Network)
 target_compile_definitions(muebreceiver PRIVATE LIBMUEB_LIBRARY)
diff --git a/src/muebreceiver.cc b/src/muebreceiver.cc
index 179458985c57d27a39c63e7d89e5801d6529071c..79fff6c4ea1c385a26e93e7fe85fafb294a3e35b 100644
--- a/src/muebreceiver.cc
+++ b/src/muebreceiver.cc
@@ -31,18 +31,18 @@ void MuebReceiver::ReadPendingDatagrams() {
 
   while (d->socket.hasPendingDatagrams()) {
     if (d->socket.pendingDatagramSize() == d->configuration.packet_size()) {
-      QNetworkDatagram datagram = d->socket.receiveDatagram();
+      const QNetworkDatagram &datagram = d->socket.receiveDatagram();
       QByteArray data = datagram.data();
 
       // Process datagram
       // Packet header check
       // Check protocol
-      if (data[0] != d->configuration.protocol_type()) {
+      if (data.at(0) != d->configuration.protocol_type()) {
         datagram_uncompress_error();
         return;
       }
 
-      auto packet_number = data[1];
+      auto packet_number = data.at(1);
       if (packet_number >= d->configuration.max_packet_number() ||
           packet_number < 0) {
         datagram_uncompress_error();
diff --git a/src/muebtransmitter.cc b/src/muebtransmitter.cc
index b08bf25f6f57134a254b676c7042154b060f1ee1..bc98b878c35a6400c029244b6458f26d8e3e2a15 100644
--- a/src/muebtransmitter.cc
+++ b/src/muebtransmitter.cc
@@ -22,12 +22,18 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) {
   QByteArray reduced_compressed_frame;
   // Frame color reduction and compression
   if (d->configuration_.color_depth() < 5) {
+    // FIXME Remove in Qt 6
     reduced_compressed_frame = QtConcurrent::blockingMappedReduced<QByteArray>(
         frame.constBits(), frame.constBits() + frame.sizeInBytes(),
-        /* Reference:
-         * http://threadlocalmutex.com/?p=48
-         * http://threadlocalmutex.com/?page_id=60
-         */
+        d->reduceColor, d->compressColor,
+        QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
+
+    /* FIXME Add in Qt 6
+    reduced_compressed_frame = QtConcurrent::blockingMappedReduced<QByteArray>(
+        frame.constBits(), frame.constBits() + frame.sizeInBytes(),
+        // Reference:
+        // http://threadlocalmutex.com/?p=48
+        // http://threadlocalmutex.com/?page_id=60
         [d](const uchar& color) -> uchar {
           if (d->configuration_.color_depth() == 3) {
             return (color * 225 + 4096) >> 13;
@@ -49,7 +55,7 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) {
 
           msb = !msb;
         },
-        QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);
+        QtConcurrent::OrderedReduce | QtConcurrent::SequentialReduce);*/
   }
   // No compression
   else {
@@ -68,9 +74,13 @@ void MuebTransmitter::SendFrame(libmueb::Frame frame) {
       QByteArray data;
       data.append(d->configuration_.protocol_type())
           .append(i /*packet number*/)
-          .append(reduced_compressed_frame.sliced(
+          .append(reduced_compressed_frame.mid(
               i * d->configuration_.packet_payload_size(),
               d->configuration_.packet_payload_size()));
+      /* FIXME in Qt6
+      .append(reduced_compressed_frame.sliced(
+          i * d->configuration_.packet_payload_size(),
+          d->configuration_.packet_payload_size()));*/
 
       d->datagram_.setData(data);
       d->socket_.writeDatagram(d->datagram_);
diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h
index 19e4a95cfa1c18b6710df66be5906b3419b7ede3..963c54c515d05c246b7bb3632694bbc4c0bddfb2 100644
--- a/src/muebtransmitter_p.h
+++ b/src/muebtransmitter_p.h
@@ -29,6 +29,33 @@ class MuebTransmitterPrivate {
   QUdpSocket socket_;
   QNetworkDatagram datagram_;
   MuebTransmitter* q_ptr;
+
+  // FIXME Remove in Qt 6
+  std::function<uchar(const uchar&)> reduceColor =
+      [this](const uchar& color) -> uchar {
+    if (configuration_.color_depth() == 3) {
+      return (color * 225 + 4096) >> 13;
+    } else if (configuration_.color_depth() == 4) {
+      return (color * 15 + 135) >> 8;
+    }
+
+    return color;
+  };
+
+  // FIXME Remove in Qt 6
+  std::function<void(QByteArray&, const uchar&)> compressColor =
+      [this](QByteArray& compressed_colors, const uchar& color) {
+        static bool msb{true};
+
+        // Compress 2 color components into 1 byte
+        if (msb) {
+          compressed_colors.append(color << configuration_.factor());
+        } else {
+          compressed_colors.back() = compressed_colors.back() | color;
+        }
+
+        msb = !msb;
+      };
 };
 
 #endif  // LIBMUEB_MUEBTRANSMITTER_P_H_