diff --git a/src/configuration.cc b/src/configuration.cc
index 14faecffcdd393b2d560b0f7b8535ad033f862d1..f47466e70ebe16f33b1a80d11459a81c919a2e9e 100644
--- a/src/configuration.cc
+++ b/src/configuration.cc
@@ -38,7 +38,6 @@ Configuration::Configuration() {
   quint32 window_per_floor = rooms_per_floor * windows_per_room;
   quint32 windows = floors * window_per_floor;
   pixels_ = windows * pixels_per_window;
-  factor_ = 8 - color_depth_;
   // Alpha channel is not supported by hardware
   // The image is stored using a 24-bit RGB format (8-8-8)
   frame_ = QImage(window_per_floor * horizontal_pixel_unit,
@@ -120,8 +119,6 @@ quint8 Configuration::max_packet_number() const { return max_packet_number_; }
 
 quint8 Configuration::color_depth() const { return color_depth_; }
 
-quint8 Configuration::factor() const { return factor_; }
-
 bool Configuration::debug_mode() const { return debug_mode_; }
 
 }  // namespace libmueb
diff --git a/src/configuration.h b/src/configuration.h
index 7ab8cbd0dcf65b9870f5311aaa34d4a40da0d142..2da7dd39886361cf238fead3e0c67d42e01bd33d 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -13,6 +13,8 @@ class Configuration final {
   Q_DISABLE_COPY(Configuration)
 
  public:
+  static constexpr quint8 kFactor{4};
+
   static Configuration& Instance();
 
   QImage frame() const;
@@ -39,8 +41,6 @@ class Configuration final {
 
   quint8 color_depth() const;
 
-  quint8 factor() const;
-
   bool debug_mode() const;
 
  private:
@@ -54,7 +54,6 @@ class Configuration final {
   quint16 broadcast_animation_port_;
   quint8 max_packet_number_;
   quint8 color_depth_;
-  quint8 factor_;
   bool debug_mode_;
 
   Configuration();
diff --git a/src/muebreceiver.cc b/src/muebreceiver.cc
index c3f62edcc149eafda43af55a2c67a26d5b265298..9092f13bd91f6d8d65fc83ce4a2b6263ca4316db 100644
--- a/src/muebreceiver.cc
+++ b/src/muebreceiver.cc
@@ -65,8 +65,12 @@ void MuebReceiver::ReadPendingDatagrams() {
       if (d->configuration_.color_depth() < 5) {
         for (auto &i : data) {
           *frame_begin = i & 0xf0;
+          *frame_begin <<=
+              Configuration::kFactor - d->configuration_.color_depth();
           frame_begin++;
-          *frame_begin = (i & 0x0f) << d->configuration_.factor();
+          *frame_begin = (i & 0x0f) << Configuration::kFactor;
+          *frame_begin <<=
+              Configuration::kFactor - d->configuration_.color_depth();
           frame_begin++;
         }
         // No compression
diff --git a/src/muebtransmitter_p.h b/src/muebtransmitter_p.h
index 0654c8f8ee1f6e396a26a6cf85632b95c47f62fa..b9ec1f41b313474fe2ea9754122322350eddcb47 100644
--- a/src/muebtransmitter_p.h
+++ b/src/muebtransmitter_p.h
@@ -58,7 +58,7 @@ class MuebTransmitterPrivate {
 
         // Compress 2 color components into 1 byte
         if (msb) {
-          compressed_colors.append(color << configuration_.factor());
+          compressed_colors.append(color << Configuration::kFactor);
         } else {
           compressed_colors.back() = compressed_colors.back() | color;
         }