diff --git a/common/encoding.go b/common/encoding.go
index 3550c78..872a782 100644
--- a/common/encoding.go
+++ b/common/encoding.go
@@ -73,6 +73,8 @@ func (enct EncodingType) String() string {
 		return "EncJPEGQualityLevelPseudo1"
 	case EncCursorPseudo:
 		return "EncCursorPseudo"
+	case EncLedStatePseudo:
+		return "EncLedStatePseudo"
 	case EncDesktopSizePseudo:
 		return "EncDesktopSizePseudo"
 	case EncLastRectPseudo:
@@ -183,6 +185,7 @@ const (
 	EncQEMUPointerMotionChangePseudo EncodingType = -257
 	EncQEMUExtendedKeyEventPseudo    EncodingType = -258
 	EncTightPng                      EncodingType = -260
+	EncLedStatePseudo                EncodingType = -261
 	EncExtendedDesktopSizePseudo     EncodingType = -308
 	EncXvpPseudo                     EncodingType = -309
 	EncFencePseudo                   EncodingType = -312
diff --git a/encodings/enc-led-state.go b/encodings/enc-led-state.go
new file mode 100644
index 0000000..a0966e1
--- /dev/null
+++ b/encodings/enc-led-state.go
@@ -0,0 +1,31 @@
+package encodings
+
+import (
+	"io"
+	"vncproxy/common"
+	"vncproxy/logger"
+)
+
+type EncLedStatePseudo struct {
+	LedState uint8
+}
+
+func (pe *EncLedStatePseudo) Type() int32 {
+	return int32(common.EncLedStatePseudo)
+}
+func (pe *EncLedStatePseudo) WriteTo(w io.Writer) (n int, err error) {
+	w.Write([]byte{pe.LedState})
+	return 1, nil
+}
+func (pe *EncLedStatePseudo) Read(pf *common.PixelFormat, rect *common.Rectangle, r *common.RfbReadHelper) (common.IEncoding, error) {
+	if rect.Width*rect.Height == 0 {
+		return pe, nil
+	}
+	u8, err := r.ReadUint8()
+	pe.LedState = u8
+	if err != nil {
+		logger.Error("error while reading led state: ", err)
+		return pe, err
+	}
+	return pe, nil
+}
diff --git a/player/fbs-reader.go b/player/fbs-reader.go
index 173bcaf..d6c6b7c 100644
--- a/player/fbs-reader.go
+++ b/player/fbs-reader.go
@@ -58,6 +58,7 @@ func NewFbsReader(fbsFile string) (*FbsReader, error) {
 			&encodings.TightEncoding{},
 			&encodings.TightPngEncoding{},
 			&encodings.EncCursorPseudo{},
+			&encodings.EncLedStatePseudo{},
 			&encodings.RawEncoding{},
 			&encodings.RREEncoding{},
 		},
diff --git a/player/player_test.go b/player/player_test.go
index 10e48bd..ec76b28 100644
--- a/player/player_test.go
+++ b/player/player_test.go
@@ -18,6 +18,7 @@ func TestServer(t *testing.T) {
 		&encodings.RawEncoding{},
 		&encodings.TightEncoding{},
 		&encodings.EncCursorPseudo{},
+		&encodings.EncLedStatePseudo{},
 		//encodings.TightPngEncoding{},
 		&encodings.RREEncoding{},
 		&encodings.ZLibEncoding{},
diff --git a/proxy/proxy.go b/proxy/proxy.go
index 18e60a9..ed14ab2 100644
--- a/proxy/proxy.go
+++ b/proxy/proxy.go
@@ -118,6 +118,7 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
 			&encodings.RawEncoding{},
 			&encodings.TightEncoding{},
 			&encodings.EncCursorPseudo{},
+			&encodings.EncLedStatePseudo{},
 			&encodings.TightPngEncoding{},
 			&encodings.RREEncoding{},
 			&encodings.ZLibEncoding{},