diff --git a/NTCPSession.cpp b/NTCPSession.cpp
index f7d3b3d7..ededc765 100644
--- a/NTCPSession.cpp
+++ b/NTCPSession.cpp
@@ -549,12 +549,12 @@ namespace transport
 			if (dataSize)
 			{
 				// new message
-				if (dataSize > NTCP_MAX_MESSAGE_SIZE)
+				if (dataSize + 16U > NTCP_MAX_MESSAGE_SIZE - 2) // + 6 + padding
 				{
 					LogPrint (eLogError, "NTCP: data size ", dataSize, " exceeds max size");
 					return false;
 				}
-				auto msg = dataSize <= I2NP_MAX_SHORT_MESSAGE_SIZE - 2 ? NewI2NPShortMessage () : NewI2NPMessage ();
+				auto msg = (dataSize + 16U) <= I2NP_MAX_SHORT_MESSAGE_SIZE - 2 ? NewI2NPShortMessage () : NewI2NPMessage ();
 				m_NextMessage = msg;	
 				memcpy (m_NextMessage->buf, buf, 16);
 				m_NextMessageOffset = 16;