diff --git a/ebpfcat/ethercat.py b/ebpfcat/ethercat.py
index baccc387a53c246f70c8316b1ce8f07ac1abc0f3..982be46295164513de926bdf246fd9699392d1fc 100644
--- a/ebpfcat/ethercat.py
+++ b/ebpfcat/ethercat.py
@@ -968,7 +968,7 @@ class Terminal:
         oe.dataTypeOriginal = dataType
         if dataType < 2048:
             oe.dataType = ECDataType(dataType)
-        elif oe.bitLength == 8:
+        elif oe.bitLength <= 8:
             oe.dataType = ECDataType.UNSIGNED8
         else:
             oe.dataType = dataType
diff --git a/ebpfcat/serial.py b/ebpfcat/serial.py
index 408c7567f07907427bdcee16ecc3128f9887ff6f..9d98d11525587eed0fb5247b9adba49f3dcb26ec 100644
--- a/ebpfcat/serial.py
+++ b/ebpfcat/serial.py
@@ -20,11 +20,26 @@ from .ebpfcat import Device, TerminalVar
 
 
 class Serial(Device):
-    channel = TerminalVar()
+    transmit_accept = TerminalVar()
+    receive_request = TerminalVar()
+    init_accept = TerminalVar()
+    in_string = TerminalVar()
+    transmit_request = TerminalVar()
+    receive_accept = TerminalVar()
+    init_request = TerminalVar()
+    out_string = TerminalVar()
 
     def __init__(self, channel):
+        self.transmit_accept = channel.transmit_accept
+        self.receive_request = channel.receive_request
+        self.init_accept = channel.init_accept
+        self.in_string = channel.in_string
+        self.transmit_request = channel.transmit_request
+        self.receive_accept = channel.receive_accept
+        self.init_request = channel.init_request
+        self.out_string = channel.out_string
+
         self.buffer = Queue()
-        self.channel = channel
         self.data_arrived = Event()
 
     def write(self, data):
@@ -36,23 +51,23 @@ class Serial(Device):
         return self.reader, self
 
     async def run(self):
-        while not self.channel.init_accept:
-            self.channel.init_request = True
+        while not self.init_accept:
+            self.init_request = True
             await self.data_arrived.wait()
-        self.channel.init_request = False
-        while self.channel.init_accept:
+        self.init_request = False
+        while self.init_accept:
             await self.data_arrived.wait()
 
         await gather(self.receive(), self.transmit())
 
     async def receive(self):
-        ra = self.channel.receive_accept
+        ra = self.receive_accept
         while True:
-            rr = self.channel.receive_request
-            while rr == self.channel.receive_request:
-                self.channel.receive_accept = ra
+            rr = self.receive_request
+            while rr == self.receive_request:
+                self.receive_accept = ra
                 await self.data_arrived.wait()
-            self.reader.feed_data(self.channel.in_string)
+            self.reader.feed_data(self.in_string)
             ra = not ra
 
     async def transmit(self):
@@ -73,12 +88,12 @@ class Serial(Device):
                     s = await self.buffer.get()
 
         while True:
-            ta = self.channel.transmit_accept
-            tr = self.channel.transmit_request
+            ta = self.transmit_accept
+            tr = self.transmit_request
             chunk = b"".join([s async for s in inner()])
-            while ta == self.channel.transmit_accept:
-                self.channel.out_string = chunk
-                self.channel.transmit_request = not tr
+            while ta == self.transmit_accept:
+                self.out_string = chunk
+                self.transmit_request = not tr
                 await self.data_arrived.wait()
 
     def update(self):
diff --git a/ebpfcat/terminals.py b/ebpfcat/terminals.py
index 791ccb630926106f410da8c27b4cba6dfaf2f3a1..4385582db55b969dfcb544b321e15a0a3ad5d7d5 100644
--- a/ebpfcat/terminals.py
+++ b/ebpfcat/terminals.py
@@ -15,7 +15,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-from .ethercat import ServiceDesc, Struct
+from .ethercat import ServiceDesc, Struct, SyncManager
 from .ebpfcat import EBPFTerminal, PacketDesc, ProcessDesc
 
 
@@ -147,22 +147,33 @@ class EL5042(EBPFTerminal):
     channel1 = Channel(0)
     channel2 = Channel(0x10)
 
+
 class EL6022(EBPFTerminal):
+    compatibility = {(2, 0x17863052)}
+
     class Channel(Struct):
-        transmit_accept = PacketDesc(3, 0, 0)
-        receive_request = PacketDesc(3, 0, 1)
-        init_accept = PacketDesc(3, 0, 2)
-        status = PacketDesc(3, 0, "H")
-        in_string = PacketDesc(3, 1, "23p")
-
-        transmit_request = PacketDesc(2, 0, 0)
-        receive_accept = PacketDesc(2, 0, 1)
-        init_request = PacketDesc(2, 0, 2)
-        control = PacketDesc(2, 0, "H")
-        out_string = PacketDesc(2, 1, "23p")
-
-    channel1 = Channel(0, 0)
-    channel2 = Channel(24, 24)
+        transmit_accept = PacketDesc(SyncManager.IN, 0, 0)
+        receive_request = PacketDesc(SyncManager.IN, 0, 1)
+        init_accept = PacketDesc(SyncManager.IN, 0, 2)
+        in_string = PacketDesc(SyncManager.IN, 1, "23p")
+
+        transmit_request = PacketDesc(SyncManager.OUT, 0, 0)
+        receive_accept = PacketDesc(SyncManager.OUT, 0, 1)
+        init_request = PacketDesc(SyncManager.OUT, 0, 2)
+        out_string = PacketDesc(SyncManager.OUT, 1, "23p")
+
+        enableRtsCts = ServiceDesc(0x8000, 1)
+        enableXonXoffSend = ServiceDesc(0x8000, 2)
+        enableXonXoffReceive = ServiceDesc(0x8000, 3)
+        enableFIFOcontinuous = ServiceDesc(0x8000, 4)
+        enableTransferRateOptimization = ServiceDesc(0x8000, 5)
+        enableHalfDuplex = ServiceDesc(0x8000, 6)
+        enablePointToPoint = ServiceDesc(0x8000, 7)
+        baudRate = ServiceDesc(0x8000, 0x11)
+        dataFrame = ServiceDesc(0x8000, 0x15)
+
+    channel1 = Channel(0)
+    channel2 = Channel(0x10)
 
 
 class EL7041(EBPFTerminal):