Index: /trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/HttpMonitoringProxyTest.java
===================================================================
--- /trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/HttpMonitoringProxyTest.java	(revision 1562)
+++ /trunk/autoquest-httpmonitor-test/src/test/java/de/ugoe/cs/autoquest/httpmonitor/HttpMonitoringProxyTest.java	(revision 1563)
@@ -443,4 +443,95 @@
         assertNotNull(exchange.getResponse().getContent().getData());
     }
+    
+    @Test
+    public void test_LargeRequest_Local() throws Exception {
+        proxy = new HttpMonitoringProxy
+            (new String[] { LOG_FILE_DIR, PROXY_PORT + "", "localhost:" + DUMMY_SERVER_PORT,
+                            "local" });
+
+        proxy.init();
+        proxy.start();
+        
+        StringBuffer message = new StringBuffer();
+        StringBuffer expectedResponse = new StringBuffer();
+        
+        for (int i = 0; i < 1000; i++) {
+            message.append(" # " + i + " test request data");
+            expectedResponse.append(" # " + i + " test response data");
+        }
+        
+        String response = sendDummyMessage("POST", message.toString(), expectedResponse.toString());
+        
+        assertEquals(expectedResponse.toString(), response);
+        
+        proxy.stop();
+        proxy = null;
+
+        File logFile = new File(LOG_FILE_DIR + File.separator + "httpmonitor_000.log");
+        
+        assertTrue(logFile.exists());
+        
+        HTTPLogParser parser = new HTTPLogParser();
+
+        parser.parseFile(logFile);
+
+        // check the sequences
+        Collection<List<Event>> sequences = parser.getSequences();
+
+        assertNotNull(sequences);
+
+        Iterator<List<Event>> iterator = sequences.iterator();
+        assertTrue(iterator.hasNext());
+
+        List<Event> sequence = iterator.next();
+        assertFalse(iterator.hasNext());
+
+        assertNotNull(sequence);
+        assertEquals(1, sequence.size());
+
+        assertEvent(sequence.get(0), "POST", message.toString(), expectedResponse.toString());
+    }
+
+    @Test
+    public void test_LargeRequest_Remote() throws Exception {
+        proxy = new HttpMonitoringProxy
+            (new String[] { LOG_FILE_DIR, PROXY_PORT + "",
+                            "localhost:" + DUMMY_SERVER_PORT, "localhost:" + MONITOR_PORT });
+
+        proxy.init();
+        proxy.start();
+        
+        
+        StringBuffer message = new StringBuffer();
+        StringBuffer expectedResponse = new StringBuffer();
+        
+        for (int i = 0; i < 1000; i++) {
+            message.append(" # " + i + " test request data");
+            expectedResponse.append(" # " + i + " test response data");
+        }
+        
+        String response = sendDummyMessage("POST", message.toString(), expectedResponse.toString());
+        
+        assertEquals(expectedResponse.toString(), response);
+        
+        // give the proxy some time to send the copy of the message
+        while(messages.size() < 1) {
+            Thread.sleep(1000);
+        }
+        
+        assertEquals(1, messages.size());
+        
+        JAXBContext jaxbContext = JAXBContext.newInstance(HttpExchange.class.getPackage().getName());
+        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+        
+        @SuppressWarnings("unchecked")
+        JAXBElement<HttpExchange> jaxObject =
+            (JAXBElement<HttpExchange>) unmarshaller.unmarshal(new StringReader(messages.get(0)));
+        
+        HttpExchange exchange = jaxObject.getValue();
+        
+        assertEquals(message.toString(), exchange.getRequest().getContent().getData());
+        assertEquals(response.toString(), exchange.getResponse().getContent().getData());
+    }
 
     /**
Index: /trunk/autoquest-httpmonitor/src/main/java/de/ugoe/cs/autoquest/httpmonitor/proxy/HttpMonitoringProxyServlet.java
===================================================================
--- /trunk/autoquest-httpmonitor/src/main/java/de/ugoe/cs/autoquest/httpmonitor/proxy/HttpMonitoringProxyServlet.java	(revision 1562)
+++ /trunk/autoquest-httpmonitor/src/main/java/de/ugoe/cs/autoquest/httpmonitor/proxy/HttpMonitoringProxyServlet.java	(revision 1563)
@@ -23,6 +23,4 @@
 import java.nio.charset.UnsupportedCharsetException;
 import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -258,28 +256,15 @@
         @Override
         public ByteBuffer next() {
-            List<ByteBuffer> buffers = new LinkedList<ByteBuffer>();
+            ByteBuffer next = delegate.next();
             
-            int size = 0;
-            while (delegate.hasNext()) {
-                ByteBuffer next = delegate.next();
-                exchangeListenerManager.onRequestContent(request, next.duplicate());
-
-                ByteBuffer copy = ByteBuffer.allocate(next.limit());
-                copy.put(next);
-                copy.position(0);
-                buffers.add(copy);
-                
-                size += next.limit();
-            }
+            ByteBuffer clone = ByteBuffer.allocate(next.capacity());
+            next.rewind();
+            clone.put(next);
+            next.rewind();
+            clone.flip();
+             
+            exchangeListenerManager.onRequestContent(request, clone);
             
-            ByteBuffer buffer = ByteBuffer.allocate(size);
-            
-            for (ByteBuffer orig : buffers) {
-                buffer.put(orig);
-            }
-            
-            buffer.position(0);
-            
-            return buffer;
+            return next;
         }
 
