diff --git a/ethercat.py b/ethercat.py
index 7354c4e1c3e4171f187a442a99155d6a29145078..c90ae22c18419455d45450362447a68a3575dfb2 100644
--- a/ethercat.py
+++ b/ethercat.py
@@ -120,14 +120,15 @@ class Packet:
         self.data = []
         self.size = 2
 
-    def append(self, cmd, idx, pos, offset, data):
-        self.data.append((cmd, idx, pos, offset, data))
+    def append(self, cmd, data, idx, *address):
+        self.data.append((cmd, data, idx) + address)
         self.size += len(data) + 12
 
     def assemble(self):
         ret = [pack("<H", self.size | 0x1000)]
-        for i, (cmd, *dgram, data) in enumerate(self.data, start=1):
-            ret.append(pack("<BBhHHH", cmd.value, *dgram,
+        for i, (cmd, data, *dgram) in enumerate(self.data, start=1):
+            ret.append(pack("<BBhHHH" if len(dgram) == 3 else "<BBhIH",
+                            cmd.value, *dgram,
                             len(data) | ((i < len(self.data)) << 15), 0))
             ret.append(data)
             ret.append(b"\0\0")
@@ -177,7 +178,7 @@ class EtherCat(Protocol, AsyncBase):
             out += b"\0" * data
         elif data is not None:
             out += data
-        self.send_queue.put_nowait((cmd, idx, pos, offset, out, future))
+        self.send_queue.put_nowait((cmd, out, idx, pos, offset, future))
         ret = await future
         if data is None:
             return unpack(fmt, ret)