diff --git a/protocol/handler.go b/protocol/handler.go
index d39f3f9cbcdd0d30b2f392e0971495144e11d22c..0af7b95020df0cb50ca29274bf8298b08ed3054e 100644
--- a/protocol/handler.go
+++ b/protocol/handler.go
@@ -79,6 +79,7 @@ func (h *Handler) Process() error {
 
 		switch pt {
 		case PKT_TYPE_HANDSHAKE_REQUEST:
+			log.Printf("Handshake")
 			if h.State != SERVER_STATE_INITIAL {
 				log.Printf("Handshake attempted while in wrong state %d != %d", h.State, SERVER_STATE_INITIAL)
 				return errors.New("wrong state")
@@ -88,6 +89,7 @@ func (h *Handler) Process() error {
 			h.TransportOut.WritePacket(msg)
 			h.State = SERVER_STATE_HANDSHAKE
 		case PKT_TYPE_TUNNEL_CREATE:
+			log.Printf("Tunnel create")
 			if h.State != SERVER_STATE_HANDSHAKE {
 				log.Printf("Tunnel create attempted while in wrong state %d != %d",
 					h.State, SERVER_STATE_HANDSHAKE)
@@ -104,6 +106,7 @@ func (h *Handler) Process() error {
 			h.TransportOut.WritePacket(msg)
 			h.State = SERVER_STATE_TUNNEL_CREATE
 		case PKT_TYPE_TUNNEL_AUTH:
+			log.Printf("Tunnel auth")
 			if h.State != SERVER_STATE_TUNNEL_CREATE {
 				log.Printf("Tunnel auth attempted while in wrong state %d != %d",
 					h.State, SERVER_STATE_TUNNEL_CREATE)
@@ -120,6 +123,7 @@ func (h *Handler) Process() error {
 			h.TransportOut.WritePacket(msg)
 			h.State = SERVER_STATE_TUNNEL_AUTHORIZE
 		case PKT_TYPE_CHANNEL_CREATE:
+			log.Printf("Channel create")
 			if h.State != SERVER_STATE_TUNNEL_AUTHORIZE {
 				log.Printf("Channel create attempted while in wrong state %d != %d",
 					h.State, SERVER_STATE_TUNNEL_AUTHORIZE)
@@ -163,6 +167,7 @@ func (h *Handler) Process() error {
 			// avoid concurrency issues
 			// p.TransportIn.Write(createPacket(PKT_TYPE_KEEPALIVE, []byte{}))
 		case PKT_TYPE_CLOSE_CHANNEL:
+			log.Printf("Close channel")
 			if h.State != SERVER_STATE_OPENED {
 				log.Printf("Channel closed while in wrong state %d != %d", h.State, SERVER_STATE_OPENED)
 				return errors.New("wrong state")
@@ -288,12 +293,11 @@ func createTunnelResponse() []byte {
 	binary.Write(buf, binary.LittleEndian, uint32(0))                                                                    // error code
 	binary.Write(buf, binary.LittleEndian, uint16(HTTP_TUNNEL_RESPONSE_FIELD_TUNNEL_ID|HTTP_TUNNEL_RESPONSE_FIELD_CAPS)) // fields present
 	binary.Write(buf, binary.LittleEndian, uint16(0))                                                                    // reserved
-	binary.Write(buf, binary.LittleEndian, uint16(0))                                                                    // reserved
 
-	// tunnel id ?
-	binary.Write(buf, binary.LittleEndian, uint32(15))
-	// caps ?
-	binary.Write(buf, binary.LittleEndian, uint32(2))
+	// tunnel id (when is it used?)
+	binary.Write(buf, binary.LittleEndian, uint32(10))
+	// caps, w2019 sends 63 -> windows client requests 63
+	binary.Write(buf, binary.LittleEndian, uint32(63))
 
 	return createPacket(PKT_TYPE_TUNNEL_RESPONSE, buf.Bytes())
 }
@@ -355,9 +359,12 @@ func createChannelCreateResponse() []byte {
 
 	binary.Write(buf, binary.LittleEndian, uint32(0)) // error code
 	//binary.Write(buf, binary.LittleEndian, uint16(HTTP_CHANNEL_RESPONSE_FIELD_CHANNELID | HTTP_CHANNEL_RESPONSE_FIELD_AUTHNCOOKIE | HTTP_CHANNEL_RESPONSE_FIELD_UDPPORT)) // fields present
-	binary.Write(buf, binary.LittleEndian, uint16(0)) // fields
+	binary.Write(buf, binary.LittleEndian, uint16(HTTP_CHANNEL_RESPONSE_FIELD_CHANNELID))
 	binary.Write(buf, binary.LittleEndian, uint16(0)) // reserved
 
+	// channel id is required for Windows clients
+	binary.Write(buf, binary.LittleEndian, uint32(1)) // channel id
+
 	// optional fields
 	// channel id uint32 (4)
 	// udp port uint16 (2)