diff --git a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
index 49ec8db..eafb836 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
+++ b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
@@ -15,6 +15,7 @@
 <h3>Plugin(s) replaced:</h3>
 <ul><li>org.eclipse.wst.internet.monitor.core</li></ul>
 <p>Bug <a href='https://bugs.eclipse.org/267125'>267125</a>. TCP/IP monitor causes connections to hang</p>
+<p>Bug <a href='https://bugs.eclipse.org/267472'>267472</a>. TCP/IP monitor does not display request messages properly</p>
 
 
 </body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_core.feature.patch/feature.properties b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
index 0f976d8..0ffc7d0 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
@@ -28,6 +28,7 @@
 Contains fixes described in the following bugillia(s):\n\
 \n\
 Bug https://bugs.eclipse.org/267125 TCP/IP monitor causes connections to hang\n\
+Bug https://bugs.eclipse.org/267472 TCP/IP monitor does not display request messages properly\n\
 \n\
 
 # "copyright" property - text of the "Feature Update Copyright"
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
index 503bb68..2acbbe1 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
@@ -198,7 +198,15 @@
 		
 		if (isRequest) {
 			if (contentLength != -1) {
+				byte[] b2 = null;
+				int b2Index = 0;
+				if (contentLength < 1024 * 1024)
+					b2 = new byte[contentLength];
 				byte[] b = removeFromBuffer(Math.min(buffer.length, bufferIndex + contentLength));
+				if (b2 != null) {
+					System.arraycopy(b, 0, b2, 0, b.length);
+					b2Index += b.length;
+				}
 				int bytesLeft = contentLength - b.length;
 				Trace.trace(Trace.PARSING, "[Request] bytesLeft: "+ bytesLeft);
 				out.write(b);
@@ -207,13 +215,20 @@
 				while (bytesLeft > 0) {  
 					n = in.read(readBuffer, 0, Math.min(readBuffer.length, bytesLeft));
 					bytesLeft -= n;
+					if (b2 != null) {
+						System.arraycopy(readBuffer, 0, b2, b2Index, n);
+						b2Index += n;
+					}
 					out.write(readBuffer, 0, n);					
 					Trace.trace(Trace.PARSING,  "[Request] bytes read: "+ n + " bytesLeft: "+ bytesLeft);
 				}
 				
-				b = Messages.errorContentSize.getBytes();
-				conn.addRequest(b, false);
-				setHTTPBody(b);
+				// restore the byte array for display
+				if (b2 == null)
+					b2 = Messages.errorContentSize.getBytes();
+				
+				conn.addRequest(b2, false);
+				setHTTPBody(b2);
 			} else if (transferEncoding != -1 && transferEncoding != ENCODING_IDENTITY) {
 				parseChunk();
 			}
@@ -270,7 +285,15 @@
 		
 		// spec 4.4.3
 		if (contentLength != -1) {
+			byte[] b2 = null;
+			int b2Index = 0;
+			if (contentLength < 1024 * 1024)
+				b2 = new byte[contentLength];
 			byte[] b = removeFromBuffer(Math.min(buffer.length, bufferIndex + contentLength));
+			if (b2 != null) {
+				System.arraycopy(b, 0, b2, 0, b.length);
+				b2Index += b.length;
+			}
 			int bytesLeft = contentLength - b.length;
 			Trace.trace(Trace.PARSING,"bytesLeft: "+ bytesLeft);
 			out.write(b);
@@ -279,16 +302,23 @@
 			while (bytesLeft > 0) {
 				n = in.read(readBuffer, 0, Math.min(readBuffer.length, bytesLeft));
 				bytesLeft -= n;
+				if (b2 != null) {
+					System.arraycopy(readBuffer, 0, b2, b2Index, n);
+					b2Index += n;
+				}
 				Trace.trace(Trace.PARSING,"bytes read: "+n + " bytesLeft: "+ bytesLeft);
 				out.write(readBuffer, 0, n);
 			}
+						
+			// restore the byte array for display
+			if (b2 == null)
+				b2 = Messages.errorContentSize.getBytes();
 			
-			b = Messages.errorContentSize.getBytes();
 			if (isRequest)
-				conn.addRequest(b, false);
+				conn.addRequest(b2, false);
 			else
-				conn.addResponse(b, false);
-			setHTTPBody(b);
+				conn.addResponse(b2, false);
+			setHTTPBody(b2);
 			return;
 		}
 		
