diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPConnectionThreaded.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPConnectionThreaded.java
index a72998d..4f70cf2 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPConnectionThreaded.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPConnectionThreaded.java
@@ -448,7 +448,13 @@
                     processException(State.Closed, ex, false);
                     break;
                 }
-                logger.fine("Message body received "); 
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.fine("Message body received ");
+                    int currentpos = buf.pos_;
+                    buf.pos_ = 0;
+                    logger.fine("Received message are: \n" + buf.dumpData());
+                    buf.pos_ = currentpos;
+                }
             }
 
             //
@@ -611,6 +617,7 @@
             // Get the request timeout
             //
             int t = down.policies().requestTimeout;
+            int msgcount = 0;
 
             //
             // now we can start sending off the messages
@@ -671,11 +678,22 @@
                         && !nextDown.operation().equals("_locate")) {
                     msgSentMarked = true;
                     properties_ |= Property.RequestSent;
+                    // debug
+                    if (logger.isLoggable(Level.FINE)) {
+                        int currentpos = buf.pos_;
+                        buf.pos_ = 0;
+                        logger.fine("Sent message in blocking at msgcount="
+                                + msgcount + ", size=" + buf.len_
+                                + ", the message piece is: \n" + buf.dumpData());
+                        buf.pos_ = currentpos;
+                        msgcount++;
+                    }
                 }
             }
         } else // Non blocking
         {
             synchronized (this) {
+            	int msgcount = 0;
                 while (true) {
                     if (!down.unsent())
                         break;
@@ -720,6 +738,19 @@
                                 && dummy.operation().equals("_locate")) {
                             msgSentMarked = true;
                             properties_ |= Property.RequestSent;
+                            // debug
+                            if (logger.isLoggable(Level.FINE)) {
+                                int currentpos = buf.pos_;
+                                buf.pos_ = 0;
+                                logger.fine("Sent message in non-blocking at msgcount="
+                                        + msgcount
+                                        + ", size="
+                                        + buf.len_
+                                        + ", the message piece is: \n"
+                                        + buf.dumpData());
+                                buf.pos_ = currentpos;
+                                msgcount++;
+                            }
                         }
                     }
                 }
diff --git a/yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueReader.java b/yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueReader.java
index 448c861..4fb0a34 100644
--- a/yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueReader.java
+++ b/yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueReader.java
@@ -366,7 +366,8 @@
     }
 
     private void readHeader(Header h) {
-        logger.fine("Reading header with tag value " + Integer.toHexString(h.tag)); 
+        logger.fine("Reading header with tag value " + Integer.toHexString(h.tag) + " at pos=" 
+        		+ in_.buf_.pos_); 
         
         //
         // Special cases are handled elsewhere
@@ -965,8 +966,21 @@
         if (remoteCodeBase instanceof CodeBaseProxy) {
             remoteCodeBase = ((CodeBaseProxy) remoteCodeBase).getCodeBase();
         }
+        
+        java.io.Serializable serobj = null;
+        try {
+        	serobj = valueHandler.readValue(in_, h.headerPos, repoClass, repid, remoteCodeBase);
+        } catch (RuntimeException ex) {
+            logger.log(Level.FINE, "RuntimeException happens when reading GIOP stream coming to pos_=" + in_.buf_.pos_);
+            logger.log(Level.FINE, "Wrong data section: \n" + in_.dumpData());
+            int currentpos = in_.buf_.pos_;
+            in_.buf_.pos_ = 0;
+            logger.log(Level.FINE, "Full GIOP stream dump: \n" + in_.dumpData());
+            in_.buf_.pos_ = currentpos;
+            throw ex;
+        }
 
-        return valueHandler.readValue(in_, h.headerPos, repoClass, repid, remoteCodeBase);
+        return serobj;
     }
     
     private Class resolveRepoClass(String name, String codebase) 
