diff --git a/sohstationviewer/model/general_data/general_data_helper.py b/sohstationviewer/model/general_data/general_data_helper.py
index 408407d1d92f86b643f0f1c963ff75fa2ec50a34..b689a6e97dda433c59a2ab8ddff4ebbd3469fc2a 100644
--- a/sohstationviewer/model/general_data/general_data_helper.py
+++ b/sohstationviewer/model/general_data/general_data_helper.py
@@ -1,5 +1,8 @@
 from typing import List, Dict, Optional, Union, Tuple
 import numpy as np
+import os
+from pathlib import Path
+
 from sohstationviewer.database.extract_data import get_convert_factor
 
 
@@ -207,3 +210,36 @@ def reset_data(selected_key: Union[str, Tuple[str, str]], data_dict: Dict):
                 del selected_data_dict[chan_id][k]
             except KeyError:
                 pass
+
+
+def read_text(path2file: Path) -> Union[bool, str]:
+    """
+    CHANGED FROM handling_data.read_text:
+        + Don't need to check binary because UnicodeDecodeError caught means
+            the file is binary
+
+    Read text file and add to log_data under channel TEXT.
+        + Raise exception if the file isn't a text file
+        + Remove empty lines in content
+    :param path2file: str - absolute path to text file
+    :param file_name: str - name of text file
+    :param text_logs: holder to keep log string, refer to
+        DataTypeModel.__init__.log_data['TEXT']
+    """
+    try:
+        with open(path2file, 'r') as file:
+            content = file.read().strip()
+    except UnicodeDecodeError:
+        return
+
+    if content != '':
+        # skip empty lines
+        no_empty_line_list = [
+            line for line in content.splitlines() if line]
+        no_empty_line_content = os.linesep.join(no_empty_line_list)
+
+        log_text = "\n\n** STATE OF HEALTH: %s\n" % path2file.name
+        log_text += no_empty_line_content
+    else:
+        log_text = ''
+    return log_text
diff --git a/sohstationviewer/model/general_data/general_record_helper.py b/sohstationviewer/model/general_data/general_record_helper.py
new file mode 100644
index 0000000000000000000000000000000000000000..5d1e0603f9175af1d114e576b277a8c98c4bd2c6
--- /dev/null
+++ b/sohstationviewer/model/general_data/general_record_helper.py
@@ -0,0 +1,27 @@
+import struct
+
+
+class Unpacker:
+    """
+    A wrapper around struct.unpack() to unpack binary data without having to
+    explicitly define the byte order in the format string. Also restrict the
+    type of format to str and buffer to bytes.
+    """
+    def __init__(self, byte_order_char: str = '') -> None:
+        self.byte_order_char = byte_order_char
+
+    def unpack(self, format: str, buffer: bytes):
+        """
+        Unpack a string of bytes into a tuple of values based on the given
+        format
+        :param format: the format used to unpack the byte string
+        :param buffer: the byte string
+        :return: a tuple containing the unpacked values.
+        """
+        default_byte_order_chars = ('@', '=', '>', '<', '!')
+        if format.startswith(default_byte_order_chars):
+            format = self.byte_order_char + format[:1]
+        else:
+            format = self.byte_order_char + format
+        return struct.unpack(format, buffer)
+
diff --git a/sohstationviewer/model/mseed_data/mseed.py b/sohstationviewer/model/mseed_data/mseed.py
index 19e515dbfc8f78380f9ce0e81b18e39db7b69f4c..c0481083024c9541cc6131a5de8baf69d6f0f5c7 100644
--- a/sohstationviewer/model/mseed_data/mseed.py
+++ b/sohstationviewer/model/mseed_data/mseed.py
@@ -8,16 +8,17 @@ from pathlib import Path
 from typing import Dict, Tuple, List
 
 from sohstationviewer.controller.util import validate_file, validate_dir
-from sohstationviewer.model.mseed_data.mseed_reader import MSeedReader
+from sohstationviewer.view.util.enums import LogType
+
 from sohstationviewer.model.general_data.general_data import \
     GeneralData, ThreadStopped, ProcessingDataError
-from sohstationviewer.view.util.enums import LogType
+from sohstationviewer.model.general_data.general_data_helper import read_text
 
 from sohstationviewer.model.mseed_data.mseed_helper import \
-    retrieve_nets_from_data_dict, read_text
+    retrieve_nets_from_data_dict
 from sohstationviewer.model.mseed_data.record_reader_helper import \
     MSeedReadError
-
+from sohstationviewer.model.mseed_data.mseed_reader import MSeedReader
 
 class MSeed(GeneralData):
     """
diff --git a/sohstationviewer/model/mseed_data/mseed_helper.py b/sohstationviewer/model/mseed_data/mseed_helper.py
index 32d237e2ec5a3dc353458691ff4abe5381d33a46..0b604b55d620c4a48a2e124b26a08c251740d6f8 100644
--- a/sohstationviewer/model/mseed_data/mseed_helper.py
+++ b/sohstationviewer/model/mseed_data/mseed_helper.py
@@ -18,36 +18,3 @@ def retrieve_nets_from_data_dict(data_dict: Dict,
         for c in data_dict[sta_id]:
             nets_by_sta[sta_id].update(
                 data_dict[sta_id][c]['nets'])
-
-
-def read_text(path2file: Path) -> Union[bool, str]:
-    """
-    CHANGED FROM handling_data.read_text:
-        + Don't need to check binary because UnicodeDecodeError caught means
-            the file is binary
-
-    Read text file and add to log_data under channel TEXT.
-        + Raise exception if the file isn't a text file
-        + Remove empty lines in content
-    :param path2file: str - absolute path to text file
-    :param file_name: str - name of text file
-    :param text_logs: holder to keep log string, refer to
-        DataTypeModel.__init__.log_data['TEXT']
-    """
-    try:
-        with open(path2file, 'r') as file:
-            content = file.read().strip()
-    except UnicodeDecodeError:
-        return
-
-    if content != '':
-        # skip empty lines
-        no_empty_line_list = [
-            line for line in content.splitlines() if line]
-        no_empty_line_content = os.linesep.join(no_empty_line_list)
-
-        log_text = "\n\n** STATE OF HEALTH: %s\n" % path2file.name
-        log_text += no_empty_line_content
-    else:
-        log_text = ''
-    return log_text
diff --git a/sohstationviewer/model/mseed_data/record_reader_helper.py b/sohstationviewer/model/mseed_data/record_reader_helper.py
index c9fa6ace53751c1487fd34ed678fda5cec38c862..4028d497cb3f48b426ed0371402eaa972bead41b 100644
--- a/sohstationviewer/model/mseed_data/record_reader_helper.py
+++ b/sohstationviewer/model/mseed_data/record_reader_helper.py
@@ -4,37 +4,14 @@ from enum import Enum
 
 from obspy import UTCDateTime
 
+from sohstationviewer.model.general_data.general_record_helper import Unpacker
+
 
 class MSeedReadError(Exception):
     def __init__(self, msg):
         self.message = msg
 
 
-class Unpacker:
-    """
-    A wrapper around struct.unpack() to unpack binary data without having to
-    explicitly define the byte order in the format string. Also restrict the
-    type of format to str and buffer to bytes.
-    """
-    def __init__(self, byte_order_char: str = '') -> None:
-        self.byte_order_char = byte_order_char
-
-    def unpack(self, format: str, buffer: bytes):
-        """
-        Unpack a string of bytes into a tuple of values based on the given
-        format
-        :param format: the format used to unpack the byte string
-        :param buffer: the byte string
-        :return: a tuple containing the unpacked values.
-        """
-        default_byte_order_chars = ('@', '=', '>', '<', '!')
-        if format.startswith(default_byte_order_chars):
-            format = self.byte_order_char + format[:1]
-        else:
-            format = self.byte_order_char + format
-        return struct.unpack(format, buffer)
-
-
 @dataclass
 class FixedHeader:
     """
diff --git a/sohstationviewer/model/reftek_data/reftek_reader/core.py b/sohstationviewer/model/reftek_data/reftek_reader/core.py
index ff647893448aeaca6a43c5232dbc40d615f39eb1..74d02952b7dff1119078bb0460b0e9cb38363c04 100644
--- a/sohstationviewer/model/reftek_data/reftek_reader/core.py
+++ b/sohstationviewer/model/reftek_data/reftek_reader/core.py
@@ -22,7 +22,7 @@ from obspy import Trace, Stream, UTCDateTime
 from obspy.core.util.obspy_types import ObsPyException
 from obspy.io.reftek.packet import PACKET_FINAL_DTYPE
 
-from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker
+from sohstationviewer.model.general_data.general_record_helper import Unpacker
 from sohstationviewer.model.reftek_data.reftek_reader.packet import EHPacket
 
 from sohstationviewer.model.reftek_data.reftek_reader.reftek_helper import (
diff --git a/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py b/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py
index ff9cc90a986356f3228117f5ef3861bc56f8cb5e..9e1b4f75b74b918dd67ad2f54fd3349d781572b7 100644
--- a/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py
+++ b/sohstationviewer/model/reftek_data/reftek_reader/packet_readers.py
@@ -3,7 +3,7 @@ from typing import Tuple, Any
 import numpy
 from obspy.io.reftek.util import bcd
 
-from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker
+from sohstationviewer.model.general_data.general_record_helper import Unpacker
 from sohstationviewer.model.reftek_data.reftek_reader.packet import \
     eh_et_payload_end_in_packet
 from sohstationviewer.model.reftek_data.reftek_reader.packets import (
diff --git a/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py b/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py
index 5f0e6cdc6a6aa15733d62abfe8d2517ed800554d..32b53080b94152e85e0af8a4c46102200d8839ef 100644
--- a/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py
+++ b/sohstationviewer/model/reftek_data/reftek_reader/reftek_helper.py
@@ -4,7 +4,7 @@ from typing import Any, Dict, Callable, Union, List, Tuple
 import numpy
 import numpy as np
 
-from sohstationviewer.model.mseed_data.record_reader_helper import Unpacker
+from sohstationviewer.model.general_data.general_record_helper import Unpacker
 from sohstationviewer.model.reftek_data.reftek_reader.packet import \
     eh_et_payload_end_in_packet
 from sohstationviewer.model.reftek_data.reftek_reader.packet_readers import (