diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py
index a1eef6702be51c8229ffb6c23432ee2795c4855c..91445ed010184affe8cdb5bc7da37539a6781bc6 100644
--- a/Ccs/ccs_function_lib.py
+++ b/Ccs/ccs_function_lib.py
@@ -76,16 +76,21 @@ personal_fmtlist = ['uint', 'ascii', 'oct']
 fmtlengthlist = {'b': 1, 'B': 1, 'h': 2, 'H': 2, 'i': 4, 'I': 4, 'q': 8,
                  'Q': 8, 'f': 4, 'd': 8, 'i24': 3, 'I24': 3}
 
-# get format and offset of HK SID
-SID_FORMAT = {1: '>B', 2: '>H', 4: '>I'}
-_sidfmt = scoped_session_idb.execute('SELECT PIC_PI1_OFF,PIC_PI1_WID FROM {}.pic where PIC_TYPE=3 and PIC_STYPE=25'.format(cfg.get('ccs-database', 'idb_schema'))).fetchall()
-if len(_sidfmt) != 0:
-    SID_OFFSET, SID_BITSIZE = _sidfmt[0]
-    SID_SIZE = int(SID_BITSIZE / 8)
-else:
-    SID_SIZE = 2
-    SID_OFFSET = TM_HEADER_LEN
-    logger.warning('HK SID definition not found in MIB, using default: OFFSET={}, SIZE={}!'.format(SID_OFFSET, SID_SIZE))
+# get format and offset of SIDs/discriminants
+SID_FORMAT = {8: '>B', 16: '>H', 32: '>I'}
+try:
+    _sidfmt = scoped_session_idb.execute('SELECT PIC_TYPE,PIC_STYPE,PIC_APID,PIC_PI1_OFF,PIC_PI1_WID FROM pic').fetchall()
+    if len(_sidfmt) != 0:
+        SID_LUT = {tuple(k[:3]): tuple(k[3:]) for k in _sidfmt}
+    else:
+        SID_LUT = {}
+        logger.warning('SID definitions not found in MIB!')
+except SQLOperationalError:
+    APID_FALLBACK = 322
+    _sidfmt = scoped_session_idb.execute('SELECT PIC_TYPE,PIC_STYPE,PIC_PI1_OFF,PIC_PI1_WID FROM pic').fetchall()
+    SID_LUT = {tuple([*k[:2], APID_FALLBACK]): tuple(k[2:]) for k in _sidfmt}
+    logger.warning('MIB structure not compatible, using fallback APID ({}). This will impact packet decoding.'.format(APID_FALLBACK))
+
 
 # get names of TC parameters that carry data pool IDs, i.e. have CPC_CATEG=P
 DATA_POOL_ID_PARAMETERS = [par[0] for par in scoped_session_idb.execute('SELECT cpc_pname FROM cpc WHERE cpc_categ="P"').fetchall()]
diff --git a/Ccs/packet_config_CHEOPS.py b/Ccs/packet_config_CHEOPS.py
index f5388d9668dc7e3424e44e7fa6685eeb9016fc54..3aca67cfdb6b024056118f0f6f054617877bf7ec 100644
--- a/Ccs/packet_config_CHEOPS.py
+++ b/Ccs/packet_config_CHEOPS.py
@@ -28,6 +28,9 @@ rmapcrc = crcmod.mkCrcFun(0x107, rev=True, initCrc=0, xorOut=0)
 PEC_LEN = 2  # in bytes
 RMAP_PEC_LEN = 1
 
+# PUS packet structure definition
+
+PUS_PKT_VERS_NUM = 0  # 0 for space packets
 PUS_VERSION = 1
 MAX_PKT_LEN = 1024  # bytes
 
@@ -126,6 +129,16 @@ def calc_timestamp(time, sync=0, return_bytes=False):
 # TM_HEADER_LEN = sum([x[2] for x in PRIMARY_HEADER + TM_SECONDARY_HEADER]) // 8
 # TC_HEADER_LEN = sum([x[2] for x in PRIMARY_HEADER + TC_SECONDARY_HEADER]) // 8
 
+class RawGetterSetter:
+
+    @property
+    def raw(self):
+        return bytes(self.bin)
+
+    @raw.setter
+    def raw(self, rawdata):
+        self.bin[:] = rawdata
+
 
 class PHeaderBits(ctypes.BigEndianStructure):
     _pack_ = 1
@@ -135,7 +148,7 @@ class PHeaderBits(ctypes.BigEndianStructure):
 P_HEADER_LEN = ctypes.sizeof(PHeaderBits)
 
 
-class PHeader(ctypes.Union):
+class PHeader(ctypes.Union, RawGetterSetter):
     _pack_ = 1
     _fields_ = [
         ('bits', PHeaderBits),
@@ -151,13 +164,19 @@ class TMHeaderBits(ctypes.BigEndianStructure):
 TM_HEADER_LEN = ctypes.sizeof(TMHeaderBits)
 
 
-class TMHeader(ctypes.Union):
+class TMHeader(ctypes.Union, RawGetterSetter):
     _pack_ = 1
     _fields_ = [
         ('bits', TMHeaderBits),
         ('bin', ctypes.c_ubyte * TM_HEADER_LEN)
     ]
 
+    def __init__(self):
+        super(TMHeader, self).__init__()
+        self.bits.PKT_VERS_NUM = PUS_PKT_VERS_NUM
+        self.bits.PKT_TYPE = 0
+        self.bits.PUS_VERSION = PUS_VERSION
+
 
 class TCHeaderBits(ctypes.BigEndianStructure):
     _pack_ = 1
@@ -167,13 +186,19 @@ class TCHeaderBits(ctypes.BigEndianStructure):
 TC_HEADER_LEN = ctypes.sizeof(TCHeaderBits)
 
 
-class TCHeader(ctypes.Union):
+class TCHeader(ctypes.Union, RawGetterSetter):
     _pack_ = 1
     _fields_ = [
         ('bits', TCHeaderBits),
         ('bin', ctypes.c_ubyte * TC_HEADER_LEN)
     ]
 
+    def __init__(self, *args, **kw):
+        super(TCHeader, self).__init__(*args, **kw)
+        self.bits.PKT_VERS_NUM = PUS_PKT_VERS_NUM
+        self.bits.PKT_TYPE = 1
+        self.bits.PUS_VERSION = PUS_VERSION
+
 
 CUC_OFFSET = TMHeaderBits.CTIME.offset
 
@@ -183,18 +208,6 @@ SPW_PROTOCOL_IDS = {
     "CCSDS": 0x02
 }
 
-
-class RawGetterSetter:
-
-    @property
-    def raw(self):
-        return bytes(self.bin)
-
-    @raw.setter
-    def raw(self, rawdata):
-        self.bin[:] = rawdata
-
-
 # RMAP packet structure definitions
 
 RMAP_MAX_PKT_LEN = 2 ** 15
@@ -271,13 +284,19 @@ FEEDATA_TRANSFER_HEADER = [
 
 
 class RMapCommandHeaderBits(ctypes.BigEndianStructure):
+    _pack_ = 1
+    _fields_ = [(label, ctype, bits) for label, ctype, bits in RMAP_COMMAND_HEADER]
 
     def __init__(self):
         raise NotImplementedError('Not available in project CHEOPS')
 
 
+RMAP_COMMAND_HEADER_LEN = ctypes.sizeof(RMapCommandHeaderBits)  # sum([x[2] for x in RMAP_COMMAND_HEADER]) // 8
+
+
 class RMapCommandHeader(ctypes.Union, RawGetterSetter):
 
+
     def __init__(self):
         raise NotImplementedError('Not available in project CHEOPS')
 
diff --git a/Ccs/pus_datapool.py b/Ccs/pus_datapool.py
index 4f8506843d161d1b496f4893b75b854afc536d9e..ea272c80397a77d922f6267a7799df4ca15cdd49 100644
--- a/Ccs/pus_datapool.py
+++ b/Ccs/pus_datapool.py
@@ -42,13 +42,15 @@ TMHeader, TCHeader, PHeader, TM_HEADER_LEN, TC_HEADER_LEN, P_HEADER_LEN, PEC_LEN
      packet_config.TC_HEADER_LEN, packet_config.P_HEADER_LEN, packet_config.PEC_LEN, packet_config.MAX_PKT_LEN,
      packet_config.timepack, packet_config.timecal]
 
-RMapCommandHeader, RMapReplyWriteHeader, RMapReplyReadHeader = packet_config.RMapCommandHeader, \
-                                                               packet_config.RMapReplyWriteHeader, \
-                                                               packet_config.RMapReplyReadHeader
-
-RMAP_COMMAND_HEADER_LEN, RMAP_REPLY_WRITE_HEADER_LEN, RMAP_REPLY_READ_HEADER_LEN, RMAP_PEC_LEN = \
-    packet_config.RMAP_COMMAND_HEADER_LEN, packet_config.RMAP_REPLY_WRITE_HEADER_LEN, \
-    packet_config.RMAP_REPLY_READ_HEADER_LEN, packet_config.RMAP_PEC_LEN
+# RMAP and FEE protocols are only supported in SMILE
+if project.endswith('SMILE'):
+    RMapCommandHeader, RMapReplyWriteHeader, RMapReplyReadHeader = packet_config.RMapCommandHeader, \
+                                                                   packet_config.RMapReplyWriteHeader, \
+                                                                   packet_config.RMapReplyReadHeader
+
+    RMAP_COMMAND_HEADER_LEN, RMAP_REPLY_WRITE_HEADER_LEN, RMAP_REPLY_READ_HEADER_LEN, RMAP_PEC_LEN = \
+        packet_config.RMAP_COMMAND_HEADER_LEN, packet_config.RMAP_REPLY_WRITE_HEADER_LEN, \
+        packet_config.RMAP_REPLY_READ_HEADER_LEN, packet_config.RMAP_PEC_LEN
 
 PLM_PKT_PREFIX_TM = packet_config.PLM_PKT_PREFIX_TM
 PLM_PKT_PREFIX_TC = packet_config.PLM_PKT_PREFIX_TC