diff --git a/lib/fed/encoder.go b/lib/fed/encoder.go
index 4daf795f1446d1a2a942bbd96058ea5937e6efd8..62fe9e9e69a2713fc406cd0560ca0612b4a76647 100644
--- a/lib/fed/encoder.go
+++ b/lib/fed/encoder.go
@@ -43,6 +43,7 @@ func (T *Encoder) ReadFrom(r *Decoder) (int, error) {
 	for {
 		if T.bufferPos >= len(T.buffer) {
 			if err := T.Flush(); err != nil {
+				T.packetPos += n
 				return n, err
 			}
 		}
@@ -53,9 +54,11 @@ func (T *Encoder) ReadFrom(r *Decoder) (int, error) {
 			break
 		}
 		if err != nil {
+			T.packetPos += n
 			return n, err
 		}
 	}
+	T.packetPos += n
 	return n, nil
 }
 
diff --git a/lib/fed/packet.go b/lib/fed/packet.go
index 47e239490a015b134eacfecc8a601ac8f30a3943..eabc415e126715f740f6e422dbf0d0229af6b20f 100644
--- a/lib/fed/packet.go
+++ b/lib/fed/packet.go
@@ -26,13 +26,11 @@ func (T PendingPacket) Length() int {
 }
 
 func (T PendingPacket) WriteTo(encoder *Encoder) error {
-	count := T.Decoder.Length() - T.Decoder.Position()
 	for T.Decoder.Position() < T.Decoder.Length() {
 		if _, err := encoder.ReadFrom(T.Decoder); err != nil {
 			return err
 		}
 	}
-	encoder.packetPos += count
 	return nil
 }