diff --git a/internal/api/message.go b/internal/api/message.go
index c91b647..06980be 100644
--- a/internal/api/message.go
+++ b/internal/api/message.go
@@ -9,9 +9,6 @@ import (
 )
 
 const (
-	// MaxPayloadLength is the maximum allowed length of a message payload.
-	MaxPayloadLength = 2097152
-
 	// TokenLength is the length of the message token in bytes.
 	TokenLength = 16
 )
@@ -45,9 +42,6 @@ type Message struct {
 
 // NewMessage returns a new message with type t and payload p.
 func NewMessage(t uint16, p []byte) *Message {
-	if len(p) > MaxPayloadLength {
-		return nil
-	}
 	return &Message{
 		Header: Header{
 			Type:   t,
@@ -81,9 +75,6 @@ func ReadMessage(r io.Reader) (*Message, error) {
 	if h.Type == TypeNone || h.Type >= TypeUndefined {
 		return nil, errors.New("invalid message type")
 	}
-	if h.Length > MaxPayloadLength {
-		return nil, errors.New("invalid message length")
-	}
 	if h.Token != token {
 		return nil, errors.New("invalid message token")
 	}
diff --git a/internal/api/message_test.go b/internal/api/message_test.go
index 8f0c7b9..f6991c3 100644
--- a/internal/api/message_test.go
+++ b/internal/api/message_test.go
@@ -25,12 +25,6 @@ func TestNewMessage(t *testing.T) {
 			t.Errorf("got %d, want %d", msg.Type, typ)
 		}
 	}
-
-	// invalid payload length
-	p := [MaxPayloadLength + 1]byte{}
-	if NewMessage(TypeOK, p[:]) != nil {
-		t.Error("should not create message with invalid payload length")
-	}
 }
 
 // TestNewOK tests NewOK.
@@ -63,11 +57,8 @@ func TestReadMessageErrors(t *testing.T) {
 		// invalid type
 		{Header: Header{Type: TypeUndefined}},
 
-		// invalid length
-		{Header: Header{Type: TypeOK, Length: MaxPayloadLength + 1}},
-
 		// short message
-		{Header: Header{Type: TypeOK, Length: MaxPayloadLength}},
+		{Header: Header{Type: TypeOK, Length: 4096}},
 
 		// invalid token
 		{Header: Header{Type: TypeOK, Token: [16]byte{1}}},
diff --git a/internal/vpncscript/client_test.go b/internal/vpncscript/client_test.go
index 65e45c6..8fd6c4b 100644
--- a/internal/vpncscript/client_test.go
+++ b/internal/vpncscript/client_test.go
@@ -69,7 +69,7 @@ func TestRunClient(t *testing.T) {
 		return confUpdate
 	}
 
-	// test with maximum payload length
+	// test with varying payload lengths
 	server = api.NewServer(config)
 	go func() {
 		for r := range server.Requests() {
@@ -79,23 +79,12 @@ func TestRunClient(t *testing.T) {
 	if err := server.Start(); err != nil {
 		t.Fatal(err)
 	}
-	if err := runClient(sockfile, getConfUpdate(api.MaxPayloadLength)); err != nil {
-		t.Fatal(err)
-	}
-	server.Stop()
-
-	// test with more than maximum payload length
-	server = api.NewServer(config)
-	go func() {
-		for r := range server.Requests() {
-			r.Close()
+	for _, length := range []int{
+		2048, 4096, 8192, 65536, 2097152,
+	} {
+		if err := runClient(sockfile, getConfUpdate(length)); err != nil {
+			t.Errorf("length %d returned error: %v", length, err)
 		}
-	}()
-	if err := server.Start(); err != nil {
-		t.Fatal(err)
-	}
-	if err := runClient(sockfile, getConfUpdate(api.MaxPayloadLength+1)); err == nil {
-		t.Fatal("too long message should return error")
 	}
 	server.Stop()
 }