       return (RpcError err)
 
 clientWaitForStatus :: ClientReaderWriter -> IO (RpcReply RpcStatus)
-clientWaitForStatus crw@(ClientReaderWriter{..}) = do
-  status <- tryReadMVar statusFromServer
-  case status of
-    Nothing -> do
-      recvStatusOp <- opRecvStatusOnClient crw
-      res <- callBatch crw [ OpX recvStatusOp ]
-      case res of
-        RpcOk _ -> do
-          st <- opRead recvStatusOp
-          return (RpcOk st)
-        RpcError err -> do
-          return (RpcError err)
-    Just st -> return (RpcOk st)
+clientWaitForStatus ClientReaderWriter{..} = do
+  status <- readMVar statusFromServer
+  return (RpcOk status)
 
 clientClose :: ClientReaderWriter -> IO ()
 clientClose (ClientReaderWriter{..}) = do

          QueueShutdown -> return (RpcError (Error "queue shutdown"))
      _ -> do
         return (RpcError (CallErrorStatus callStatus))

data OpT out = Op
  { opAdd    :: [Ptr GrpcOp -> IO ()]

      ]
  case res of
    RpcOk _ -> do
      res' <- callBatchStatusOnClient crw
      case res' of
        RpcOk _ -> return (RpcOk (Client crw defaultEncoder defaultDecoder))
        RpcError err -> return (RpcError err)
    RpcError err -> return (RpcError err)

callUpstream :: ClientContext -> CallOptions -> MethodName -> IO (RpcReply (Client B.ByteString L.ByteString))
