diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index ee3d189c13023a5de7aa8230a9249a236a11c59c..79867f03fa0907be3d245c27268b1280bb3004d5 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -654,16 +654,18 @@ tx_process_msg(struct cmsg *m)
 		case IPROTO_UPDATE:
 		case IPROTO_DELETE:
 		case IPROTO_UPSERT:
+		{
 			assert(msg->request.type == msg->header.type);
-			struct iproto_port port;
-			iproto_port_init(&port, out, msg->header.sync);
 			struct tuple *tuple;
 			if (box_process1(&msg->request, &tuple) < 0)
 				throw (Exception *) box_error_last();
+			struct obuf_svp svp = iproto_prepare_select(out);
 			if (tuple)
-				port_add_tuple(&port.base, tuple);
-			port_eof(&port.base);
+				tuple_to_obuf(tuple, out);
+			iproto_reply_select(out, &svp, msg->header.sync,
+					    tuple != 0);
 			break;
+		}
 		case IPROTO_CALL:
 			assert(msg->request.type == msg->header.type);
 			rmean_collect(rmean_box, msg->request.type, 1);