diff --git a/mcc-flow/merge_records.py b/mcc-flow/merge_records.py
index ce09ebfbda6125d2588c2746cf0fcc1faca3ae6a..a3183efd933cfbc207d75e292a699ebc4fee830b 100644
--- a/mcc-flow/merge_records.py
+++ b/mcc-flow/merge_records.py
@@ -5,6 +5,39 @@ from struct import unpack
 import numpy as np
 
 
+def _read_block_data(file, shape, format_, format_size):
+    sh = np.prod(shape)
+    data = unpack(format_ * sh, file.read(format_size * sh))
+    data = np.array(data)
+    data = data.reshape(shape)
+    return data
+
+
+class FlowPacket:
+
+    def __init__(self, date_, flow, hr, spo2, vbat_eeg, vbat_arm,
+                 eeg, eeg_giro, eeg_acc,
+                 emg, emg_giro, emg_acc,
+                 sound, gsr):
+        self.date = date_
+        self.flow = flow
+        self.hr = hr
+        self.spo2 = spo2
+        self.vbat_eeg = vbat_eeg
+        self.vbat_arm = vbat_arm
+        self.eeg = eeg
+        self.eeg_giro = eeg_giro
+        self.eeg_acc = eeg_acc
+        self.emg = emg
+        self.emg_giro = emg_giro
+        self.emg_acc = emg_acc
+        self.sound = sound
+        self.gsr = gsr
+
+    def __add__(self, other):
+        pass
+
+
 def process_packet(file):
     # header
     date_, time_, flow, hr, spo2, vbat_eeg, vbat_arm = unpack('>II10sBHHH', file.read(25))
@@ -16,11 +49,23 @@ def process_packet(file):
     print(date_, flow, hr, spo2, vbat_eeg, vbat_arm)
 
     # eeg
-    eeg = unpack('i' * 4 * 250, file.read(4 * 4 * 250))
-    eeg = np.array(eeg)
-    eeg = eeg.reshape((250, 4)).T
-    print(eeg, eeg.shape)
-    eeg_giro = unpack('h' * 3 * 50, file.read(2 * 3 * 50))
+    eeg = _read_block_data(file, (250, 4), 'i', 4).T
+    eeg_giro = _read_block_data(file, (50, 3), 'h', 2).T
+    eeg_acc = _read_block_data(file, (50, 3), 'h', 2).T
+    print(eeg.shape, eeg_giro.shape, eeg_acc.shape)
+
+    # emg
+    emg = _read_block_data(file, (250, 6), 'i', 4).T
+    emg_giro = _read_block_data(file, (50, 3), 'h', 2).T
+    emg_acc = _read_block_data(file, (50, 3), 'h', 2).T
+    print(emg.shape, emg_giro.shape, emg_acc.shape)
+
+    # extra
+    sound = _read_block_data(file, (6000, 1), 'h', 2).T
+    gsr = _read_block_data(file, (10, 1), 'h', 2).T
+    print(sound.shape, gsr.shape)
+
+    return date_, flow, hr, spo2, vbat_eeg, vbat_arm, eeg, eeg_giro, eeg_acc, emg, emg_giro
 
 
 def read_dat_file(file):