diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3fb12b079a2227fdc463dab05e588d54ae3d706..4a9528d7afa0847464c0d75e522977eeba046631 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added (for new features)
 
+* Tests for [linkahead-pylib#127](https://gitlab.com/linkahead/linkahead-pylib/-/issues/127)
 * Tests for [linkahead-server#280](https://gitlab.com/linkahead/linkahead-server/-/issues/280)
 * Test for [caosdb-pylib#119](https://gitlab.com/linkahead/linkahead-pylib/-/issues/119)
 * Test for [caosdb-pylib#89](https://gitlab.com/linkahead/linkahead-pylib/-/issues/89)
diff --git a/tests/test_issues_pylib.py b/tests/test_issues_pylib.py
index 32b2bdb2e1e5a8bf514e27517f7edff6767e219b..4b8deb04234cb08cb07e24efa7379b614e760f9d 100644
--- a/tests/test_issues_pylib.py
+++ b/tests/test_issues_pylib.py
@@ -29,6 +29,7 @@ import os
 import tempfile
 import time
 import warnings
+from pathlib import Path
 
 import linkahead as db
 import linkahead.common.utils
@@ -196,3 +197,44 @@ def test_gitlab_com_120():
     rt1_retrieved.update()
     # The update and addition of a new property must not change this, either.
     assert len(rt1_retrieved.get_property(rt2.name).properties) == 0
+
+
+def test_gitlab_com_127():
+    """
+    Test that the timeout option in pylinkahead.ini accepts separate
+    connect/read timeouts and timeout None.
+
+    See https://gitlab.com/linkahead/linkahead-pylib/-/issues/127 and
+    https://gitlab.indiscale.com/caosdb/customers/f-fit/management/-/issues/93
+    """
+    # Setup paths and save previous timeout
+    base_dir = Path(__file__).parent.parent
+    temp_pylinkahead_path = base_dir/'.pyla-temp-test.ini'
+    temp_pylinkahead_path.unlink(True)
+    prev_timeout = None
+    if db.get_config().has_option('Connection', 'timeout'):
+        prev_timeout = db.get_config().get('Connection', 'timeout')
+
+    # Parse various timeout strings and check successful connect
+    valid_timeout_strings = ["timeout = None", "timeout=null",
+                             "timeout = (4, 40)", "timeout=(4,4)",
+                             "timeout = (4, None)", "timeout= ( null , 4 )"]
+    for timeout_string in valid_timeout_strings:
+        try:
+            # Create temporary config with timeout option
+            with open(temp_pylinkahead_path, "x") as temp_pylinkahead:
+                temp_pylinkahead.write('[Connection]\n')
+                temp_pylinkahead.write(timeout_string)
+            # Parse temporary config and check successful connect
+            db.get_config().read(str(temp_pylinkahead_path))
+            db.configure_connection()
+            assert 'Connection to' in str(db.Info())
+        finally:
+            # Delete temporary config
+            temp_pylinkahead_path.unlink()
+
+    # Reset configuration
+    db.get_config().remove_option('Connection', 'timeout')
+    if prev_timeout is not None:
+        db.get_config().set('Connection', 'timeout', prev_timeout)
+    db.configure_connection()