diff --git a/ebpfcat/ebpfcat.py b/ebpfcat/ebpfcat.py
index 34e364ce4126ab129edb95d95f7ad584858a8d94..84e2f2771233b51804f75f625c08bfa6f688eb39 100644
--- a/ebpfcat/ebpfcat.py
+++ b/ebpfcat/ebpfcat.py
@@ -20,6 +20,7 @@ from asyncio import (
     CancelledError, ensure_future, gather, sleep, wait_for, TimeoutError)
 from collections import defaultdict
 from contextlib import asynccontextmanager, AsyncExitStack, contextmanager
+from enum import Enum
 import os
 from struct import pack, unpack, calcsize, pack_into, unpack_from
 from time import time
@@ -267,18 +268,18 @@ class EBPFTerminal(Terminal):
         bases = {}
         if self.use_fmmu:
             if self.pdo_in_sz:
-                bases[3] = (1, packet.fmmu_in_size)
+                bases[3] = (BaseType.FMMU_IN, packet.fmmu_in_size)
                 packet.fmmu_in_size += self.pdo_in_sz
             if readwrite and self.pdo_out_sz:
-                bases[2] = (2, packet.fmmu_out_size)
+                bases[2] = (BaseType.FMMU_OUT, packet.fmmu_out_size)
                 packet.fmmu_out_size += self.pdo_out_sz
         else:
             if self.pdo_in_sz:
-                bases[3] = (0, packet.size)
+                bases[3] = (BaseType.NO_FMMU, packet.size)
                 packet.append(ECCmd.FPRD, b"\0" * self.pdo_in_sz, 0,
                               self.position, self.pdo_in_off)
             if readwrite and self.pdo_out_sz:
-                bases[2] = (0, packet.size)
+                bases[2] = (BaseType.NO_FMMU, packet.size)
                 packet.append_writer(ECCmd.FPWR, b"\0" * self.pdo_out_sz, 0,
                                      self.position, self.pdo_out_off)
         return bases
@@ -378,7 +379,7 @@ class FastEtherCat(SimpleEtherCat):
 
 
 class SterilePacket(Packet):
-    """a sterile packet has all its sets exchanges by NOPs"""
+    """a sterile packet has all its sets exchanged by NOPs"""
     next_logical_addr = 0  # global for all packets
     logical_addr_inc = 0x800
 
@@ -414,6 +415,11 @@ class SterilePacket(Packet):
         for pos, cmd in self.on_the_fly:
             ebpf.pB[pos + self.ETHERNET_HEADER] = cmd.value
 
+class BaseType(Enum):
+    NO_FMMU = 0
+    FMMU_IN = 1
+    FMMU_OUT = 2
+
 class SyncGroupBase:
     missed_counter = 0
 
@@ -480,13 +486,16 @@ class SyncGroupBase:
         terminals = {t: t.allocate(self.packet, rw)
                      for t, rw in self.terminals.items()}
         in_pos, out_pos, logical_in, logical_out = self.packet.append_fmmu()
-        offsets = (0, in_pos, out_pos)
+        offsets = {BaseType.NO_FMMU: 0,
+                   BaseType.FMMU_IN: in_pos, BaseType.FMMU_OUT: out_pos}
         self.terminals = {t: {sm: offsets[base] + off + Packet.DATAGRAM_HEADER
                               for sm, (base, off) in d.items()}
                           for t, d in terminals.items()}
-        offsets = (None, logical_in, logical_out)
+        offsets = {BaseType.FMMU_IN: logical_in,
+                   BaseType.FMMU_OUT: logical_out}
         self.fmmu_maps = {t: {sm: offsets[base] + off
-                              for sm, (base, off) in d.items() if base != 0}
+                              for sm, (base, off) in d.items()
+                              if base is not BaseType.NO_FMMU}
                           for t, d in terminals.items()}