diff --git a/src/cmdu.c b/src/cmdu.c
index a3b5db0ab6d678584a5ae99440158bb69fda6efc..8e85e2c3138689ba8719b221748d3bf6328f909e 100644
--- a/src/cmdu.c
+++ b/src/cmdu.c
@@ -141,7 +141,6 @@ struct cmdu_buff *cmdu_alloc(int size)
 	if (!p)
 		return NULL;
 
-	fprintf(stderr, "%s: %d\n", __func__, __LINE__);
 	n = (struct cmdu_buff *)p;
 	n->head = (uint8_t *)(n + 1) + CMDU_RESERVE_HEADSPACE;
 	n->end = n->head + size;
@@ -308,6 +307,11 @@ int cmdu_put(struct cmdu_buff *c, uint8_t *bytes, int len)
 	return 0;
 }
 
+int cmdu_put_eom(struct cmdu_buff *c)
+{
+	return cmdu_put(c, "\x00\x00\x00", 3);
+}
+
 int cmdu_parse_tlvs(struct cmdu_buff *c, struct tlv *tv[][16],
 		    struct tlv_policy *policy, int policy_len)
 {
diff --git a/src/cmdu.h b/src/cmdu.h
index 8d1fae0a1b9f00236b234464d6b78a144c3ec77e..6f2f174ef9526fa12e8b84a5cc866a0b5b9c8878 100644
--- a/src/cmdu.h
+++ b/src/cmdu.h
@@ -98,18 +98,36 @@ struct cmdu_buff *cmdu_alloc(int size);
 struct cmdu_buff *cmdu_alloc_default(void);
 void cmdu_free(struct cmdu_buff *c);
 
+static inline void cmdu_set_type(struct cmdu_buff *c, uint16_t type)
+{
+	if (c && c->cdata)
+		buf_put_be16((uint8_t *)&c->cdata->hdr.type, type);
+}
+
 static inline uint16_t cmdu_get_type(struct cmdu_buff *c)
 {
 	return (c && c->cdata) ?
 		buf_get_be16((uint8_t *)&c->cdata->hdr.type) : 0xffff;
 }
 
+static inline void cmdu_set_mid(struct cmdu_buff *c, uint16_t mid)
+{
+	if (c && c->cdata)
+		buf_put_be16((uint8_t *)&c->cdata->hdr.mid, mid);
+}
+
 static inline uint16_t cmdu_get_mid(struct cmdu_buff *c)
 {
 	return (c && c->cdata) ?
 		buf_get_be16((uint8_t *)&c->cdata->hdr.mid) : 0xffff;
 }
 
+static inline void cmdu_set_fid(struct cmdu_buff *c, uint8_t fid)
+{
+	if (c && c->cdata)
+		c->cdata->hdr.fid = fid;
+}
+
 static inline uint8_t cmdu_get_fid(struct cmdu_buff *c)
 {
 	return (c && c->cdata) ? c->cdata->hdr.fid : 0xff;
@@ -140,6 +158,7 @@ int cmdu_copy_tlvs(struct cmdu_buff *c, struct tlv *tv[], int tv_arrsize);
 
 int cmdu_put_tlv(struct cmdu_buff *c, struct tlv *t);
 int cmdu_put(struct cmdu_buff *c, uint8_t *bytes, int len);
+int cmdu_put_eom(struct cmdu_buff *c);
 
 struct tlv *cmdu_get_tlv(struct cmdu_buff *c, uint8_t tlv_type);
 struct tlv *cmdu_peek_tlv(struct cmdu_buff *c, uint8_t tlv_type);