diff --git a/addons/ooh323c/src/oochannels.c b/addons/ooh323c/src/oochannels.c
index 76f8422a5a571d25e70817a6090620db02fbb868..a09470db1344c7f073db65c0063380753103b544 100644
--- a/addons/ooh323c/src/oochannels.c
+++ b/addons/ooh323c/src/oochannels.c
@@ -1061,11 +1061,6 @@ int ooH2250Receive(OOH323CallData *call)
    while(total < len)
    {
       struct pollfd pfds;
-      recvLen = ooSocketRecv (call->pH225Channel->sock, message1, len-total);
-      memcpy(message+total, message1, recvLen);
-      total = total + recvLen;
-
-      if(total == len) break; /* Complete message is received */
       
       pfds.fd = call->pH225Channel->sock;
       pfds.events = POLLIN;
@@ -1085,8 +1080,9 @@ int ooH2250Receive(OOH323CallData *call)
          }
          return OO_FAILED;
       }
-      /* If remaining part of the message is not received in 3 seconds 
-         exit */
+
+      /* exit If remaining part of the message is not received in 3 seconds */
+
       if(!ooPDRead(&pfds, 1, call->pH225Channel->sock))
       {
          OOTRACEERR3("Error: Incomplete H.2250 message received - clearing "
@@ -1099,6 +1095,23 @@ int ooH2250Receive(OOH323CallData *call)
          }
          return OO_FAILED;
       }
+
+      recvLen = ooSocketRecv (call->pH225Channel->sock, message1, len-total);
+      if (recvLen == 0) {
+         OOTRACEERR3("Error in read while receiving H.2250 message - "
+                     "clearing call (%s, %s)\n", call->callType, 
+                     call->callToken);
+         ooFreeQ931Message(pctxt, pmsg);
+         if(call->callState < OO_CALL_CLEAR)
+         {
+            call->callEndReason = OO_REASON_TRANSPORTFAILURE;
+            call->callState = OO_CALL_CLEAR;
+         }
+         return OO_FAILED;
+      }
+      memcpy(message+total, message1, recvLen);
+      total = total + recvLen;
+
    }
 
    OOTRACEDBGC3("Received Q.931 message: (%s, %s)\n",