diff --git a/mod/box/box.m b/mod/box/box.m
index 84edbd20cc9b3a75a03fa3f10e5090a6483fdeb0..b97bac3d7a8374263c1fab96dec739d88c404fa1 100644
--- a/mod/box/box.m
+++ b/mod/box/box.m
@@ -513,16 +513,14 @@ init_update_op_arith(struct update_cmd *cmd __attribute__((unused)),
 
 	switch (field->new_len) {
 	case sizeof(i32):
-		/* 32-bit opearion */
+		/* 32-bit operation */
 
 		/* Check the operand type. */
 		if (op->arg.set.length != sizeof(i32))
 			tnt_raise(ClientError, :ER_TYPE_MISMATCH,
 				  "32-bit int");
 
-		arg->val_size = op->arg.set.length;
 		arg->i32_val = *(i32 *)op->arg.set.value;
-		op->new_field_len = sizeof(i32);
 		break;
 	case sizeof(i64):
 		/* 64-bit operation */
@@ -540,13 +538,12 @@ init_update_op_arith(struct update_cmd *cmd __attribute__((unused)),
 			tnt_raise(ClientError, :ER_TYPE_MISMATCH,
 				  "32-bit or 64-bit int");
 		}
-		arg->val_size = sizeof(i64);
-		op->new_field_len = sizeof(i64);
 		break;
 	default:
 		tnt_raise(ClientError, :ER_FIELD_TYPE,
 			  "32-bit or 64-bit int");
 	}
+	arg->val_size = op->new_field_len = field->new_len;
 }
 
 static void