diff --git a/neo/io/neuralynxio.py b/neo/io/neuralynxio.py
index 463ede1e..8469c6a4 100644
--- a/neo/io/neuralynxio.py
+++ b/neo/io/neuralynxio.py
@@ -26,7 +26,26 @@ class NeuralynxIO(NeuralynxRawIO, BaseFromRaw):
     _prefered_signal_group_mode = 'group-by-same-units'
     mode = 'dir'
 
-    def __init__(self, dirname, use_cache=False, cache_path='same_as_resource'):
-        NeuralynxRawIO.__init__(self, dirname=dirname,
-                                use_cache=use_cache, cache_path=cache_path)
+    def __init__(self, dirname, use_cache=False, cache_path='same_as_resource',
+                 keep_original_times=False):
+        """
+        Initialise IO instance
+
+        Parameters
+        ----------
+        dirname : str
+            Directory containing data files
+        use_cache : bool, optional
+            Cache results of initial file scans for faster loading in subsequent runs.
+            Default: False
+        cache_path : str, optional
+            Folder path to use for cache files.
+            Default: 'same_as_resource'
+        keep_original_times : bool
+            Preserve original time stamps as in data files. By default datasets are
+            shifted to begin at t_start = 0*pq.second.
+            Default: False
+        """
+        NeuralynxRawIO.__init__(self, dirname=dirname, use_cache=use_cache,
+                                cache_path=cache_path, keep_original_times=keep_original_times)
         BaseFromRaw.__init__(self, dirname)
diff --git a/neo/rawio/neuralynxrawio.py b/neo/rawio/neuralynxrawio.py
index 2d4bfd28..6f6f1221 100644
--- a/neo/rawio/neuralynxrawio.py
+++ b/neo/rawio/neuralynxrawio.py
@@ -50,8 +50,9 @@ class NeuralynxRawIO(BaseRawIO):
     extensions = ['nse', 'ncs', 'nev', 'ntt']
     rawmode = 'one-dir'
 
-    def __init__(self, dirname='', **kargs):
+    def __init__(self, dirname='', keep_original_times=False, **kargs):
         self.dirname = dirname
+        self.keep_original_times = keep_original_times
         BaseRawIO.__init__(self, **kargs)
 
     def _source_name(self):
@@ -239,7 +240,11 @@ class NeuralynxRawIO(BaseRawIO):
             self.global_t_start = self._sigs_t_start[0]
             self.global_t_stop = self._sigs_t_stop[-1]
 
-        # fille into header dict
+        if self.keep_original_times:
+            self.global_t_stop = self.global_t_stop - self.global_t_start
+            self.global_t_start = 0
+
+        # fill into header dict
         self.header = {}
         self.header['nb_block'] = 1
         self.header['nb_segment'] = [self._nb_segment]

Neuralynx loader output for a given file differs depending on what other files are present in folder
When loading a Neuralynx data file, the timestamps assigned by neo depend on what other files are present in the same folder. 

For instance, loading a .ntt file with no other files present gives a first timestamp of 0.0 s, but loading that same file with some .ncs files also present gives a first timestamp of ~0.12 s.

Minimal working example [here](https://github.com/vandermeerlab/data-formats/blob/master/neo-nept-loading.ipynb).

I would consider this behavior undesirable because of the considerable potential for inconsistencies. The same code can now give different results depending on what files are present at the time of loading, and it is unclear how any timestamped data from different sources (e.g. spike sorters) could be aligned with the neo timestamps.

I would prefer an option, maybe even the default, to have the loader output the timestamps actually reported by the Neuralynx recording system.
diff --git a/neo/test/iotest/test_neuralynxio.py b/neo/test/iotest/test_neuralynxio.py
index 6cba7426..927ae6b3 100644
--- a/neo/test/iotest/test_neuralynxio.py
+++ b/neo/test/iotest/test_neuralynxio.py
@@ -267,6 +267,29 @@ class TestData(CommonNeuralynxIOTest, unittest.TestCase):
                                            anasig.magnitude[:overlap, 0] * gain_factor_0,
                                            rtol=0.01)
 
+    def test_keep_original_spike_times(self):
+        for session in self.files_to_test:
+            dirname = self.get_filename_path(session)
+            nio = NeuralynxIO(dirname=dirname, keep_original_times=True)
+            block = nio.read_block()
+
+            for st in block.segments[0].spiketrains:
+                filename = st.file_origin.replace('original_data', 'plain_data')
+                if '.nse' in st.file_origin:
+                    filename = filename.replace('.nse', '.txt')
+                    times_column = 0
+                    plain_data = np.loadtxt(filename)[:, times_column]
+                elif '.ntt' in st.file_origin:
+                    filename = filename.replace('.ntt', '.txt')
+                    times_column = 2
+                    plain_data = np.loadtxt(filename)[:, times_column]
+                    # ntt files contain 4 rows per spike time
+                    plain_data = plain_data[::4]
+
+                times = st.rescale(pq.microsecond).magnitude
+                overlap = min(len(plain_data), len(times))
+                np.testing.assert_allclose(plain_data[:overlap], times[:overlap], rtol=1e-10)
+
 
 class TestIncompleteBlocks(CommonNeuralynxIOTest, unittest.TestCase):
     def test_incomplete_block_handling_v632(self):

pip install -e .
parse_log_pytest
requirements.txt
nose pytest
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
exceptiongroup==1.2.2
importlib-metadata==6.7.0
iniconfig==2.0.0
-e git+https://github.com/NeuralEnsemble/python-neo.git@ebc3c51e73310b8f7921a4c4ac4f992e202f3a4e#egg=neo
nose==1.3.7
numpy==1.21.6
packaging==24.0
pluggy==1.2.0
pytest==7.4.4
quantities==0.13.0
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0

name: python-neo
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - exceptiongroup==1.2.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - nose==1.3.7
      - numpy==1.21.6
      - packaging==24.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - quantities==0.13.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/python-neo

neo/test/iotest/test_neuralynxio.py::TestData::test_keep_original_spike_times
neo/test/iotest/test_neuralynxio.py::TestData::test_ncs
neo/test/iotest/test_neuralynxio.py::CommonNeuralynxIOTest::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::CommonNeuralynxIOTest::test_read_then_write neo/test/iotest/test_neuralynxio.py::CommonNeuralynxIOTest::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::CommonNeuralynxIOTest::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_read_block neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_read_segment neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v551::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_read_block neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_read_segment neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v563::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestCheetah_v574::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v574::test_read_block neo/test/iotest/test_neuralynxio.py::TestCheetah_v574::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestCheetah_v574::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestCheetah_v574::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestPegasus_v211::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestPegasus_v211::test_read_block neo/test/iotest/test_neuralynxio.py::TestPegasus_v211::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestPegasus_v211::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestPegasus_v211::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestData::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestData::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestData::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestData::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestIncompleteBlocks::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestIncompleteBlocks::test_incomplete_block_handling_v632 neo/test/iotest/test_neuralynxio.py::TestIncompleteBlocks::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestIncompleteBlocks::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestIncompleteBlocks::test_write_then_read neo/test/iotest/test_neuralynxio.py::TestGaps::test_assert_readed_neo_object_is_compliant neo/test/iotest/test_neuralynxio.py::TestGaps::test_gap_handling_v551 neo/test/iotest/test_neuralynxio.py::TestGaps::test_gap_handling_v563 neo/test/iotest/test_neuralynxio.py::TestGaps::test_read_then_write neo/test/iotest/test_neuralynxio.py::TestGaps::test_readed_with_lazy_is_compliant neo/test/iotest/test_neuralynxio.py::TestGaps::test_write_then_read
neo/io/neuralynxio.py neo/rawio/neuralynxrawio.py
neo/io/neuralynxio.py neo/rawio/neuralynxrawio.py