diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 68fb90fc027f1d706430358822b7aa8d5c4e2959..e594464c15eb28ea5c7b630c2c5045c2714c465b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,7 +25,7 @@ variables:
    CI_REGISTRY_IMAGE_BASE: $CI_REGISTRY/caosdb/src/caosdb-advanced-user-tools/base:latest
 
 
-stages: 
+stages:
   - setup
   - cert
   - style
@@ -53,15 +53,15 @@ test:
       - time docker load < /image-cache/mariadb.tar || true
       - time docker load < /image-cache/caosdb-dev.tar || true
       - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
-      - EXEPATH=`pwd` CAOSDB_TAG=$CAOSDB_TAG docker-compose 
+      - EXEPATH=`pwd` CAOSDB_TAG=$CAOSDB_TAG docker-compose
         -f .docker/docker-compose.yml up -d
-      - cd .docker 
+      - cd .docker
       - /bin/sh ./run.sh
-      - cd .. 
+      - cd ..
       - docker logs docker-caosdb-server-1 &> caosdb_log.txt
       - docker logs docker-sqldb-1 &> mariadb_log.txt
       - docker-compose -f .docker/docker-compose.yml down
-      - rc=`cat .docker/result`  
+      - rc=`cat .docker/result`
       - exit $rc
   dependencies: [cert]
   needs: [cert]
@@ -76,19 +76,19 @@ build-testenv:
   tags: [cached-dind]
   image: docker:18.09
   stage: setup
-  # Hint: do not use only here; the image needs always to be build since it 
+  # Hint: do not use only here; the image needs always to be build since it
   # contains the repo code
   #only:
-  script: 
+  script:
       - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
         # use here general latest or specific branch latest...
-      - docker build 
+      - docker build
         --file .docker/Dockerfile
         -t $CI_REGISTRY_IMAGE .
       - docker push $CI_REGISTRY_IMAGE
       - docker save $CI_REGISTRY_IMAGE > /image-cache/caosdb-advanced-testenv.tar
       - cd .docker-base
-      - docker build 
+      - docker build
         -t $CI_REGISTRY_IMAGE_BASE .
       - docker push $CI_REGISTRY_IMAGE_BASE
 
@@ -123,14 +123,32 @@ linting:
       - make lint
   allow_failure: true
 
-unittest:
+unittest_py39:
   tags: [docker]
   stage: unittest
   image: $CI_REGISTRY_IMAGE
   needs: [build-testenv]
   script:
-      - python3 -c "import caosdb; print('CaosDB Version:', caosdb.__version__)"
-      - tox
+    # First verify that system Python actually is 3.9
+    - python3 -c "import sys; assert sys.version.startswith('3.9')"
+    - python3 -c "import caosdb; print('CaosDB Version:', caosdb.__version__)"
+    - tox
+
+unittest_py38:
+  tags: [docker]
+  stage: unittest
+  image: python:3.8
+  script: &python_test_script
+    - pip install nose pandas pytest pytest-cov gitignore-parser openpyxl>=3.0.7 xlrd==1.2 h5py
+    - pip install git+https://gitlab.indiscale.com/caosdb/src/caosdb-pylib.git@dev
+    - pip install .
+    - pytest --cov=caosadvancedtools unittests
+
+unittest_py310:
+  tags: [docker]
+  stage: unittest
+  image: python:3.10
+  script: *python_test_script
 
 # Build the sphinx documentation and make it ready for deployment by Gitlab Pages
 # Special job for serving a static website. See https://docs.gitlab.com/ee/ci/yaml/README.html#pages
diff --git a/tox.ini b/tox.ini
index 42ff0df986d179ce9770937dba4886f3b4e7ad0f..11ee3202cbf416ffe388185a9a7c0f094bed0ad3 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist=py36, py37, py38, py39, py310
+envlist=py38, py39, py310
 skip_missing_interpreters = true
 [testenv]
 deps=nose