diff --git a/zio-sys.c b/zio-sys.c
index 1d373bc3330b224c459f96da3e6615d975dd8074..bfe5754e40114f01f8a1ef690c73f80c71abaa1b 100644
--- a/zio-sys.c
+++ b/zio-sys.c
@@ -1616,13 +1616,14 @@ static int chan_register(struct zio_channel *chan, struct zio_channel *chan_t)
 
 	/* Copy from template, initialize and verify zio attributes */
 	if (chan_t) { /* ZCSET_CHAN_TEMPLATE is set */
-		memcpy(chan, chan_t,sizeof(struct zio_channel));
+		chan->flags |= chan_t->flags;
 		if (chan_t->zattr_set.std_zattr)
 			chan_t->zattr_set.n_std_attr = ZATTR_STD_NUM_ZDEV;
 		err = __zattr_set_copy(&chan->zattr_set, &chan_t->zattr_set);
 		if (err)
 			goto out_zattr_copy;
 	}
+
 	err = zattr_set_create(&chan->head, chan->cset->zdev->s_op);
 	if (err)
 		goto out_zattr_create;
@@ -1856,6 +1857,7 @@ static int cset_register(struct zio_cset *cset, struct zio_cset *cset_t)
 	for (i = 0; i < cset->n_chan; i++) {
 		cset->chan[i].index = i;
 		cset->chan[i].cset = cset;
+		cset->chan[i].ti = cset->ti;
 		cset->chan[i].flags |= cset->flags & ZIO_DIR;
 		chan_tmp = NULL;
 		if (cset->chan_template)