diff --git a/.gitlab/issue_templates/Default.md b/.gitlab/issue_templates/Default.md
new file mode 100644
index 0000000000000000000000000000000000000000..aa1a65aca363b87aff50280e1a86824009d2098b
--- /dev/null
+++ b/.gitlab/issue_templates/Default.md
@@ -0,0 +1,28 @@
+## Summary
+
+*Please give a short summary of what the issue is.*
+
+## Expected Behavior
+
+*What did you expect how the software should behave?*
+
+## Actual Behavior
+
+*What did the software actually do?*
+
+## Steps to Reproduce the Problem
+
+*Please describe, step by step, how others can reproduce the problem.  Please try these steps for yourself on a clean system.*
+
+1.
+2.
+3.
+
+## Specifications
+
+- Version: *Which version of this software?*
+- Platform: *Which operating system, which other relevant software versions?*
+
+## Possible fixes
+
+*Do you have ideas how the issue can be resolved?*
diff --git a/.gitlab/merge_request_templates/Default.md b/.gitlab/merge_request_templates/Default.md
new file mode 100644
index 0000000000000000000000000000000000000000..35c6d01c5904289b77fc7f1de9419ef91a1510e9
--- /dev/null
+++ b/.gitlab/merge_request_templates/Default.md
@@ -0,0 +1,54 @@
+# Summary
+
+*Insert a meaningful description for this merge request here:  What is the new/changed behavior?
+Which bug has been fixed? Are there related issues?*
+
+
+# Focus
+
+*Point the reviewer to the core of the code change. Where should they start reading? What should
+they focus on (e.g. security, performance, maintainability, user-friendliness, compliance with the
+specs, finding more corner cases, concrete questions)?*
+
+
+# Test Environment
+
+*How to set up a test environment for manual testing?*
+
+
+# Check List for the Author
+
+Please, prepare your MR for a review. Be sure to write a summary and a focus and create gitlab
+comments for the reviewer. They should guide the reviewer through the changes, explain your changes
+and also point out open questions. For further good practices have a look at [our review
+guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md)
+
+- [ ] All automated tests pass
+- [ ] Reference related issues
+- [ ] Up-to-date CHANGELOG.md (or not necessary)
+- [ ] Up-to-date JSON schema (or not necessary)
+- [ ] Appropriate user and developer documentation (or not necessary)
+  - How do I use the software?  Assume "stupid" users.
+  - How do I develop or debug the software?  Assume novice developers.
+- [ ] Annotations in code (Gitlab comments)
+  - Intent of new code
+  - Problems with old code
+  - Why this implementation?
+
+
+# Check List for the Reviewer
+
+- [ ] I understand the intent of this MR
+- [ ] All automated tests pass
+- [ ] Up-to-date CHANGELOG.md (or not necessary)
+- [ ] Appropriate user and developer documentation (or not necessary)
+- [ ] The test environment setup works and the intended behavior is reproducible in the test
+  environment
+- [ ] In-code documentation and comments are up-to-date.
+- [ ] Check: Are there specifications? Are they satisfied?
+
+For further good practices have a look at [our review guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md).
+
+
+/assign me
+/target_branch dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e3de2cbf85eaede8621f616d3d6d878acce0275b..3abb914664a657e6ee89c83350fd7fe52459b3ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 * Test for [caosdb-server#136](https://gitlab.com/caosdb/caosdb-server/-/issues/136)
 * Test for [caosdb-server#141](https://gitlab.com/caosdb/caosdb-server/-/issues/141)
 * Test for [caosdb-server#145](https://gitlab.com/caosdb/caosdb-server/-/issues/145)
+* Tests for [caosdb-pylib#90](https://gitlab.com/caosdb/caosdb-pylib/-/issues/90): `Entity.get_parents_recursively()` did not work for unretrieved
+  parents.
+* Test for [caosdb-server#192](https://gitlab.com/caosdb/caosdb-server/-/issues/192)
 
 ### Changed (for changes in existing functionality)
 
diff --git a/README.md b/README.md
index 260aec860ea53681f1cfb8b93b0ef6f899311cb7..459755632c7fa75caa08f627ce21f26ac49d4f17 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,9 @@ CaosDB project.
   - Server-side scripting paths must be given, otherwise server-side scripting will be omitted.
 - Run the tests with `pytest` or `pytest-3` (depending on your system).
 - If you want to run just a single test, you can also select a single test file:  
-  `pytest-3 tests/test_issues.py`
+  `pytest-3 tests/test_issues.py`  
+  or a test matching a regular expression:  
+  `pytest-3 tests/test_issues.py -k issue_123`
 
 ## Requirements ##
 
@@ -57,7 +59,7 @@ By participating, you are expected to uphold our [Code of Conduct](https://gitla
 request in GitLab and choose this repository as target. Make sure to select
 "Allow commits from members who can merge the target branch" under Contribution
 when creating the merge request. This allows our team to work with you on your request.
-- You can also contact us at **info (AT) caosdb.de**.
+- You can also contact us at **info (AT) caosdb.org**.
 
 ## License
 
diff --git a/pytest.ini b/pytest.ini
deleted file mode 100644
index 529a96a81c76e6d2607e1cddcc79024981d3cc56..0000000000000000000000000000000000000000
--- a/pytest.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[pytest]
-markers =
-    local_server: mark a test as requiring a local caosdb server
-    slow: mark a test as slow (execution regularly takes 5s or longer)
diff --git a/tests/test_administration.py b/tests/test_administration.py
index a6f44bae4577789617ee16e69ed53086ebf90ae3..34c0797100068ee7171986d2ace3221c7de92b6c 100644
--- a/tests/test_administration.py
+++ b/tests/test_administration.py
@@ -30,7 +30,7 @@ from caosdb import administration as admin, Info, get_config
 from caosdb.connection.connection import configure_connection, get_connection
 from caosdb.exceptions import (HTTPClientError, HTTPForbiddenError,
                                LoginFailedError, HTTPResourceNotFoundError)
-from pytest import raises
+from pytest import raises, mark
 
 test_role = "test_role"
 test_user = "test_user"
@@ -67,6 +67,10 @@ def teardown_function(function):
         admin._delete_user(name=test_user + "2")
     except Exception as e:
         print(e)
+    try:
+        admin._delete_user(name="first.last")
+    except Exception as e:
+        print(e)
     try:
         admin._delete_role(name=test_role)
     except Exception as e:
@@ -84,6 +88,17 @@ def switch_to_admin_user():
     assert Info().user_info.roles == ["administration"]
 
 
+def test_create_user_with_dot():
+    admin._insert_user(
+        name="first.last",
+        password=test_pw,
+        status="ACTIVE",
+        email=None,
+        entity=None)
+    configure_connection(username="first.last", password=test_pw, password_method="plain")
+    get_connection()._login()
+
+
 def test_get_server_properties():
     props = admin.get_server_properties()
     assert isinstance(props, dict)
diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py
index 135c3d4a7e7ea9c6738c9bff069cb475bc694fd3..b0380fbfbe66e3246be83a37455c5d70773f8c3a 100644
--- a/tests/test_issues_server.py
+++ b/tests/test_issues_server.py
@@ -1,9 +1,10 @@
 # -*- coding: utf-8 -*-
 # This file is a part of the CaosDB Project.
 #
-# Copyright (c) 2022 IndiScale GmbH <info@indiscale.com>
+# Copyright (c) 2020 - 2022 IndiScale GmbH <info@indiscale.com>
 # Copyright (c) 2022 Daniel Hornung <d.hornung@indiscale.com>
 # Copyright (c) 2020 Florian Spreckelsen <f.spreckelsen@indiscale.com>
+# Copyright (c) 2021 - 2022 Timm Fitschen <t.fitschen@indiscale.com>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as
@@ -804,7 +805,41 @@ def test_136():
 
     te = err.value
     assert te.has_error(db.UnqualifiedPropertiesError)
-    assert "Cannot parse value to integer" in str(te)
+    assert "This data type does not accept collections of values (e.g. Lists)" in str(te)
+
+
+@pytest.mark.xfail(reason="Fix https://gitlab.com/caosdb/caosdb-pylib/-/issues/81")
+def test_136_b():
+    """Faulty creation of a multi-property when updating a non-list property
+    with a list value.
+
+    https://gitlab.com/caosdb/caosdb-server/-/issues/136
+
+    """
+    # @author Florian Spreckelsen
+    # @date 2022-05-23
+
+    # Insert data model:
+    rt = db.RecordType(name="TestBug")
+    p = db.Property(name="TestBugProperty", datatype=db.TEXT)
+    db.Container().extend([rt, p]).insert()
+
+    # Insert test record:
+    r = db.Record(name="TestRecord")
+    r.add_parent(rt)
+    r.add_property(p, value="val1")
+    r.insert()
+
+    # Update the record:
+    test_r = db.Record(id=r.id).retrieve()
+    test_r.add_parent(rt)
+    test_r.add_property(id=p.id, value=["val1", "val2"])
+    with pytest.raises(db.TransactionError) as err:
+        test_r.update()
+
+    te = err.value
+    assert te.has_error(db.UnqualifiedPropertiesError)
+    assert "This data type does not accept collections of values (e.g. Lists)" in str(te)
 
 
 def test_141():
@@ -1081,3 +1116,63 @@ def test_142():
         assert cm.value.status == 400
         assert cm.value.msg.startswith(
             "The user name does not comply with the current policies for user names")
+
+
+@pytest.mark.xfail(reason="Fix https://gitlab.com/caosdb/caosdb-server/-/issues/177")
+def test_177():
+    db.RecordType("TestRT").insert()
+    db.RecordType("TestRT").insert(unique=False)
+    db.Property("TestProp", datatype=db.TEXT).insert()
+
+    db.RecordType("TestSubRT").add_property("TestProp").add_parent("TestRT").insert()
+
+
+@pytest.mark.xfail(reason="Fix https://gitlab.com/caosdb/caosdb-server/-/issues/135")
+def test_135():
+    db.RecordType("TestRT1").insert()
+    db.Property("TestProp", datatype=db.LIST("TestRT1")).insert()
+    r1 = db.Record().add_parent("TestRT1").insert()
+    r2 = db.Record().add_parent("TestRT1").add_property("TestProp", r1).insert()
+    assert len(db.execute_query("FIND ENTITY WHICH IS REFERENCED BY A TestRT1 AS TestProp")) == 1
+
+
+def test_192():
+    """Testing queries with Property by name.
+
+    See https://gitlab.com/caosdb/caosdb-server/-/issues/192
+
+    COUNT Record WHICH HAS price -> Results: 19
+    COUNT Record WHICH HAS Property price -> Results: 19
+    COUNT Record WITH price -> Results: 19
+    COUNT Record WITH Property price -> Results: 0
+    """
+    db.Property(name="testprop", datatype=db.DOUBLE).insert()
+    db.RecordType(name="TestRT").add_property("testprop").insert()
+    db.Record(name="Rec1").add_parent("TestRT").add_property("testprop", value=3.1).insert()
+
+    query1 = "COUNT RECORD WHICH HAS testprop"
+    query2 = "COUNT RECORD WHICH HAS A testprop"
+    query3 = "COUNT RECORD WHICH HAS Property testprop"
+    query4 = "COUNT RECORD WHICH HAS A Property testprop"
+    query5 = "COUNT RECORD WITH testprop"
+    query6 = "COUNT RECORD WITH A testprop"
+    query7 = "COUNT RECORD WITH Property testprop"
+    query8 = "COUNT RECORD WITH A Property testprop"
+
+    count1 = db.execute_query(query1)
+    count2 = db.execute_query(query2)
+    count3 = db.execute_query(query3)
+    count4 = db.execute_query(query4)
+    count5 = db.execute_query(query5)
+    count6 = db.execute_query(query6)
+    count7 = db.execute_query(query7)
+    count8 = db.execute_query(query8)
+
+    assert count1 == 1
+    assert count2 == 1
+    assert count3 == 1
+    assert count4 == 1
+    assert count5 == 1
+    assert count6 == 1
+    assert count7 == 1
+    assert count8 == 1
diff --git a/tests/test_query.py b/tests/test_query.py
index 33e8220e660a73b3b75e6dac5a63bb64db203925..b3d0d0197cda3f115986711b561e95cbd95b035d 100644
--- a/tests/test_query.py
+++ b/tests/test_query.py
@@ -170,13 +170,15 @@ def test_query2():
 def test_query3():
     body = get_connection().retrieve(
         entity_uri_segments=["Entity"], query_dict={
-            "query": None}, reconnect=True).read()
+            "query": "bla"}, reconnect=True).read()
+    print(body)
     xml = etree.fromstring(body)
     assert xml.xpath("/Response/TransactionBenchmark")
     assert xml.xpath("/Response/Query")
     assert xml.xpath("/Response/UserInfo")
     assert xml.xpath("/Response/noscript")
-    assert 4 == len(xml)
+    assert xml.xpath("/Response/Error")
+    assert 5 == len(xml)
 
 
 @mark.slow
diff --git a/tests/test_recursive_parents.py b/tests/test_recursive_parents.py
index 76178cee37db9ebeb2d249837bdfde80baa58141..c262e7ceef1e777e91dc6c88601b74f06590a999 100644
--- a/tests/test_recursive_parents.py
+++ b/tests/test_recursive_parents.py
@@ -48,7 +48,26 @@ def teardown_function(function):
     setup_module()
 
 
-@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
+def test_get_parents_recursively():
+    """Test for https://gitlab.com/caosdb/caosdb-pylib/-/issues/90
+
+> Entity.get_parents_recursively() does not work unless the full ancestry has been retrieved from
+> the server.
+"""
+    # Setup
+    rt_A = db.RecordType(name="TestA")
+    rt_B = db.RecordType(name="TestB").add_parent(rt_A)
+    rt_C = db.RecordType(name="TestC").add_parent(rt_B)
+    db.Container().extend([rt_A, rt_B, rt_C]).insert()
+
+    # Retrieve only C
+    retrieved_C = db.RecordType(name="TestC").retrieve()
+    parents = retrieved_C.get_parents_recursively(retrieve=True)
+    assert len(parents) == 2
+    assert "TestB" in [p.name for p in parents]
+    assert "TestA" in [p.name for p in parents]
+
+
 def test_recursive_parents():
     # inheritance structure:
     #    A
@@ -66,29 +85,31 @@ def test_recursive_parents():
 
     parents = C.get_parents_recursively()
     assert len(parents) == 3
-    assert A in parents
-    assert B in parents
-    assert B2 in parents
+    parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
+    assert (A.id, A.name) in parent_identifiers
+    assert (B.id, B.name) in parent_identifiers
+    assert (B2.id, B2.name) in parent_identifiers
 
     parents = c.get_parents_recursively()
     assert len(parents) == 4
-    assert A in parents
-    assert B in parents
-    assert B2 in parents
-    assert C in parents
+    parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
+    assert (A.id, A.name) in parent_identifiers
+    assert (B.id, B.name) in parent_identifiers
+    assert (B2.id, B2.name) in parent_identifiers
+    assert (C.id, C.name) in parent_identifiers
 
     # Now do a time travel and great-grand-parentize yourself...
     A.add_parent(C).update()
 
     parents = C.get_parents_recursively()
     assert len(parents) == 4
-    assert A in parents
-    assert B in parents
-    assert B2 in parents
-    assert C in parents
+    parent_identifiers = [(all_p.id, all_p.name) for all_p in parents]
+    assert (A.id, A.name) in parent_identifiers
+    assert (B.id, B.name) in parent_identifiers
+    assert (B2.id, B2.name) in parent_identifiers
+    assert (C.id, C.name) in parent_identifiers
 
 
-@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
 def test_entity_has_parent():
     # inheritance structure:
     #    A
@@ -137,8 +158,8 @@ def test_entity_has_parent():
     assert not c.has_parent(fake_C_id, check_name=False,
                             check_id=True)
 
-    fake_B_name_id = RecordType(name="TestTypeB", id=B.id)
-    fake_C_name_id = RecordType(name="not C", id=C.id * 5)
+    fake_B_name_id = db.RecordType(name="TestTypeB", id=B.id)
+    fake_C_name_id = db.RecordType(name="not C", id=C.id * 5)
 
     assert c.has_parent(fake_B_name_id, check_name=True,
                         check_id=True)
diff --git a/tests/test_select.py b/tests/test_select.py
index 803c79803a59066d0201de25e3b55ba9a1c73e11..80e380ab04ed9268059347a57787ab286b300483 100644
--- a/tests/test_select.py
+++ b/tests/test_select.py
@@ -27,6 +27,7 @@
 
 @author: tf
 """
+import os
 from pytest import mark, raises
 
 import caosdb as db
@@ -94,6 +95,10 @@ def teardown_module():
 
     if len(d) > 0:
         d.delete()
+    try:
+        os.remove("test.dat")
+    except Exception as e:
+        print(e)
 
 
 def test_id1():
@@ -576,3 +581,24 @@ def test_select_update_with_force():
     # only name has been selected and updated, so no properties remain:
     rec = db.Record(name=select_result.name).retrieve()
     assert len(rec.properties) == 0
+
+
+def test_select_path():
+    with open("test.dat", "w") as upload_file:
+        upload_file.write("hello world\n")
+
+    file_ = db.File(name="TestFile",
+                    description="Testfile Desc",
+                    path="testfiles/test.dat",
+                    file="test.dat")
+    file_.insert()
+    qfile = db.execute_query("FIND FILE TestFile", unique=True)
+    assert qfile.path == "/testfiles/test.dat"
+    assert db.execute_query("SELECT path FROM FILE TestFile")[0].path == "/testfiles/test.dat"
+
+
+def test_select_datatype():
+    p = db.Property("TestProp", datatype=db.DOUBLE).insert()
+    qprop = db.execute_query("FIND PROPERTY TestProp", unique=True)
+    assert qprop.datatype == db.DOUBLE
+    assert db.execute_query("SELECT datatype FROM PROPERTY TestProp")[0].datatype == db.DOUBLE
diff --git a/tests/test_version.py b/tests/test_version.py
index 0f18ab2c22d27a1716b01b1e9641096d4bb3e9e6..cedd710f16575dc530b2b8d0708cffc1681523e6 100644
--- a/tests/test_version.py
+++ b/tests/test_version.py
@@ -429,6 +429,7 @@ def test_bug_parent_name_in_old_version():
     assert [OLD_NAME] == [p.name for p in rec_v1.get_parents()]
 
 
+@mark.xfail(reason="fix https://gitlab.com/caosdb/caosdb-server/-/issues/178")
 def test_reference_deleted_in_old_version():
     ref_rt = insertion("TestReferencedObject")
     rt = insertion("TestRT")
@@ -491,14 +492,23 @@ def test_reference_deleted_in_old_version():
     assert test_rec.get_property(ref_rt) is None
     assert test_rec.version.predecessors[0].id == old_version
 
-    # retrieve old version again. the reference (to the now deleted entity)
-    # is still there.
+    # retrieve old version again (cache on). the reference (to the now deleted
+    # entity) is still there.
     old_rec = c.Container().retrieve(str(test_rec.id) + "@HEAD~1",
                                      sync=False)[0]
     assert old_rec.version.id == old_version
     assert old_rec.version.successors[0].id == test_rec.version.id
     assert old_rec.get_property(p).value == "blablabla"
-    assert old_rec.get_property(ref_rt).value == referenced_id
+    assert old_rec.get_property(ref_rt).value is None, "TODO this fails"
+
+    # retrieve old version again (cache off). the reference (to the now deleted
+    # entity) is NOT there
+    old_rec = c.Container().retrieve(str(test_rec.id) + "@HEAD~1",
+                                     sync=False, flags={"cache": "false"})[0]
+    assert old_rec.version.id == old_version
+    assert old_rec.version.successors[0].id == test_rec.version.id
+    assert old_rec.get_property(p).value == "blablabla"
+    assert old_rec.get_property(ref_rt).value is None
 
     with raises(c.EmptyUniqueQueryError) as exc:
         c.execute_query("FIND ENTITY WITH ID = {}".format(referenced_id),
diff --git a/tox.ini b/tox.ini
index 2b326539ffb4c129bbda8705b341148e92960a14..8723e96d8a2bee33639d2bea3530f25ff8e62712 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist=py38, py39, py310
+envlist=py37, py38, py39, py310, py311
 skip_missing_interpreters = true
 
 [pycodestyle]
@@ -17,3 +17,9 @@ commands_pre=pip install ../caosdb-pylib/
     python -c "import caosdb; print(caosdb.version.version)"
 # Add "-x" to stop at first error.
 commands=pytest --cov=caosdb -vv {posargs}
+
+[pytest]
+markers =
+    local_server: mark a test as requiring a local caosdb server
+    slow: mark a test as slow (execution regularly takes 5s or longer)
+xfail_strict = True