diff --git a/nmxact/nmp/image.go b/nmxact/nmp/image.go
index efc32d8..10b70b7 100644
--- a/nmxact/nmp/image.go
+++ b/nmxact/nmp/image.go
@@ -45,6 +45,12 @@
 	return r
 }
 
+func NewImageUploadReqWithSeq(seq uint8) *ImageUploadReq {
+	r := &ImageUploadReq{}
+	fillNmpReqWithSeq(r, NMP_OP_WRITE, NMP_GROUP_IMAGE, NMP_ID_IMAGE_UPLOAD, seq)
+	return r
+}
+
 func (r *ImageUploadReq) Msg() *NmpMsg { return MsgFromReq(r) }
 
 func NewImageUploadRsp() *ImageUploadRsp {
diff --git a/nmxact/nmp/nmp.go b/nmxact/nmp/nmp.go
index 2953949..acf7a40 100644
--- a/nmxact/nmp/nmp.go
+++ b/nmxact/nmp/nmp.go
@@ -150,15 +150,19 @@
 	return data, nil
 }
 
-func fillNmpReq(req NmpReq, op uint8, group uint16, id uint8) {
+func fillNmpReqWithSeq(req NmpReq, op uint8, group uint16, id uint8, seq uint8) {
 	hdr := NmpHdr{
 		Op:    op,
 		Flags: 0,
 		Len:   0,
 		Group: group,
-		Seq:   nmxutil.NextNmpSeq(),
+		Seq:   seq,
 		Id:    id,
 	}
 
 	req.SetHdr(&hdr)
 }
+
+func fillNmpReq(req NmpReq, op uint8, group uint16, id uint8) {
+	fillNmpReqWithSeq(req, op, group, id, nmxutil.NextNmpSeq())
+}
diff --git a/nmxact/xact/image.go b/nmxact/xact/image.go
index 07330ae..8ad616f 100644
--- a/nmxact/xact/image.go
+++ b/nmxact/xact/image.go
@@ -27,6 +27,7 @@
 
 	"mynewt.apache.org/newtmgr/nmxact/mgmt"
 	"mynewt.apache.org/newtmgr/nmxact/nmp"
+	"mynewt.apache.org/newtmgr/nmxact/nmxutil"
 	"mynewt.apache.org/newtmgr/nmxact/sesn"
 )
 
@@ -69,9 +70,9 @@
 }
 
 func buildImageUploadReq(imageSz int, hash []byte, upgrade bool, chunk []byte,
-	off int, imageNum int) *nmp.ImageUploadReq {
+	off int, imageNum int, seq uint8) *nmp.ImageUploadReq {
 
-	r := nmp.NewImageUploadReq()
+	r := nmp.NewImageUploadReqWithSeq(seq)
 
 	if off == 0 {
 		r.Len = uint32(imageSz)
@@ -93,26 +94,20 @@
 }
 
 func encodeUploadReq(s sesn.Sesn, hash []byte, upgrade bool, data []byte,
-	off int, chunklen int, imageNum int) ([]byte, error) {
+	off int, chunklen int, imageNum int, seq uint8) ([]byte, error) {
 
 	r := buildImageUploadReq(len(data), hash, upgrade, data[off:off+chunklen],
-		off, imageNum)
+		off, imageNum, seq)
 	enc, err := mgmt.EncodeMgmt(s, r.Msg())
 	if err != nil {
 		return nil, err
 	}
 
-	// If encoded length is larger than MTU, we need to make chunk shorter
-	if len(enc) > s.MtuOut() {
-		overflow := len(enc) - s.MtuOut()
-		chunklen -= overflow
-	}
-
 	return enc, nil
 }
 
 func findChunkLen(s sesn.Sesn, hash []byte, upgrade bool, data []byte,
-	off int, imageNum int) (int, error) {
+	off int, imageNum int, seq uint8) (int, error) {
 
 	// Let's start by encoding max allowed chunk len and we will see how many
 	// bytes we need to cut
@@ -120,7 +115,7 @@
 
 	// Keep reducing the chunk size until the request fits the MTU.
 	for {
-		enc, err := encodeUploadReq(s, hash, upgrade, data, off, chunklen, imageNum)
+		enc, err := encodeUploadReq(s, hash, upgrade, data, off, chunklen, imageNum, seq)
 		if err != nil {
 			return 0, err
 		}
@@ -147,8 +142,10 @@
 		hash = sha[:]
 	}
 
+	seq := nmxutil.NextNmpSeq()
+
 	// Find chunk length
-	chunklen, err := findChunkLen(s, hash, upgrade, data, off, imageNum)
+	chunklen, err := findChunkLen(s, hash, upgrade, data, off, imageNum, seq)
 	if err != nil {
 		return nil, err
 	}
@@ -157,7 +154,7 @@
 	// fit we'll recalculate without hash
 	if off == 0 && chunklen < IMAGE_UPLOAD_MIN_1ST_CHUNK {
 		hash = nil
-		chunklen, err = findChunkLen(s, hash, upgrade, data, off, imageNum)
+		chunklen, err = findChunkLen(s, hash, upgrade, data, off, imageNum, seq)
 		if err != nil {
 			return nil, err
 		}
@@ -172,7 +169,7 @@
 	}
 
 	r := buildImageUploadReq(len(data), hash, upgrade,
-		data[off:off+chunklen], off, imageNum)
+		data[off:off+chunklen], off, imageNum, seq)
 
 	// Request above should encode just fine since we calculate proper chunk
 	// length but (at least for now) let's double check it
