diff --git a/include/web_kvm.hpp b/include/web_kvm.hpp
index 62be097..df0bef5 100644
--- a/include/web_kvm.hpp
+++ b/include/web_kvm.hpp
@@ -51,6 +51,14 @@
   client_cut_text = 6
 };
 
+enum class server_to_client_message_type : uint8_t
+{
+    framebuffer_update = 0,
+    set_color_map_entries = 1,
+    bell_message = 2,
+    server_cut_text = 3
+};
+
 struct set_pixel_format_msg {
   boost::endian::big_uint8_t pad1;
   boost::endian::big_uint8_t pad2;
@@ -135,7 +143,7 @@
   std::string serialized(vector_size, 0);
 
   size_t i = 0;
-  serialized[i++] = 0;  // Type
+  serialized[i++] = static_cast<char>(server_to_client_message_type::framebuffer_update);  // Type
   serialized[i++] = 0;  // Pad byte
   boost::endian::big_uint16_t number_of_rectangles = msg.rectangles.size();
   std::memcpy(&serialized[i], &number_of_rectangles,
@@ -271,47 +279,47 @@
                     auto msg = reinterpret_cast<const frame_buffer_update_req*>(
                         data.data() + sizeof(client_to_server_msg_type));
 
-                      // Todo(ed) lifecycle of the video puller and decoder
-                      // should be
-                      // with the websocket, not recreated every time
-                      AstVideo::VideoPuller p;
-                      p.initialize();
-                      auto out = p.read_video();
-                      AstVideo::AstJpegDecoder d;
-                      d.decode(out.buffer, out.width, out.height, out.mode,
-                               out.y_selector, out.uv_selector);
+                    // Todo(ed) lifecycle of the video puller and decoder
+                    // should be
+                    // with the websocket, not recreated every time
+                    AstVideo::VideoPuller p;
+                    p.initialize();
+                    auto out = p.read_video();
+                    AstVideo::AstJpegDecoder d;
+                    d.decode(out.buffer, out.width, out.height, out.mode,
+                             out.y_selector, out.uv_selector);
 
-                      framebuffer_update_msg buffer_update_msg;
+                    framebuffer_update_msg buffer_update_msg;
 
-                      // If the viewer is requesting a full update, force write
-                      // of all pixels
+                    // If the viewer is requesting a full update, force write
+                    // of all pixels
 
-                      framebuffer_rectangle this_rect;
-                      this_rect.x = msg->x_position;
-                      this_rect.y = msg->y_position;
-                      this_rect.width = out.width;
-                      this_rect.height = out.height;
-                      this_rect.encoding =
-                          static_cast<uint8_t>(encoding_type::raw);
-                      LOG(DEBUG) << "Encoding is " << this_rect.encoding;
-                      this_rect.data.reserve(this_rect.width *
-                                             this_rect.height * 4);
-                      LOG(DEBUG) << "Width " << out.width << " Height "
-                                 << out.height;
+                    framebuffer_rectangle this_rect;
+                    this_rect.x = msg->x_position;
+                    this_rect.y = msg->y_position;
+                    this_rect.width = out.width;
+                    this_rect.height = out.height;
+                    this_rect.encoding =
+                        static_cast<uint8_t>(encoding_type::raw);
+                    LOG(DEBUG) << "Encoding is " << this_rect.encoding;
+                    this_rect.data.reserve(this_rect.width * this_rect.height *
+                                           4);
+                    LOG(DEBUG) << "Width " << out.width << " Height "
+                               << out.height;
 
-                      for (int i = 0; i < out.width * out.height; i++) {
-                        auto& pixel = d.OutBuffer[i];
-                        this_rect.data.push_back(pixel.B);
-                        this_rect.data.push_back(pixel.G);
-                        this_rect.data.push_back(pixel.R);
-                        this_rect.data.push_back(0);
-                      }
+                    for (int i = 0; i < out.width * out.height; i++) {
+                      auto& pixel = d.OutBuffer[i];
+                      this_rect.data.push_back(pixel.B);
+                      this_rect.data.push_back(pixel.G);
+                      this_rect.data.push_back(pixel.R);
+                      this_rect.data.push_back(0);
+                    }
 
-                      buffer_update_msg.rectangles.push_back(
-                          std::move(this_rect));
-                      auto serialized = serialize(buffer_update_msg);
+                    buffer_update_msg.rectangles.push_back(
+                        std::move(this_rect));
+                    auto serialized = serialize(buffer_update_msg);
 
-                      conn.send_binary(serialized);
+                    conn.send_binary(serialized);
 
                   }  // TODO(Ed) handle error
 
