diff --git a/mongoose.c b/mongoose.c
index 2d5dd395a6425bf64eda504ddc8fdaa11af1f911..68ef0319bdae80cb2555a1427da7667a6eed2e23 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1384,7 +1384,8 @@ static void send_websocket_handshake(struct mg_connection *conn,
 }
 
 static int deliver_websocket_frame(struct connection *conn) {
-  char *buf = conn->local_iobuf.buf;
+  // Having buf unsigned char * is important, as it is used below in arithmetic
+  unsigned char *buf = (unsigned char *) conn->local_iobuf.buf;
   int i, len, buf_len = conn->local_iobuf.len, frame_len = 0,
       mask_len = 0, header_len = 0, data_len = 0, buffered = 0;
 
@@ -1409,7 +1410,7 @@ static int deliver_websocket_frame(struct connection *conn) {
 
   if (buffered) {
     conn->mg_conn.content_len = data_len;
-    conn->mg_conn.content = buf + header_len;
+    conn->mg_conn.content = (char *) buf + header_len;
     conn->mg_conn.wsbits = buf[0];
 
     // Apply mask if necessary