diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 98008035a95874d678df722819979393f5692f0c..ec4dfb07f0695f14b1bd952f7f3c6da578de0423 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,10 +23,6 @@ variables:
   CI_REGISTRY_IMAGE: $CI_REGISTRY/caosdb-mysqlbackend-testenv:latest
   # When using dind, it's wise to use the overlayfs driver for
   # improved performance.
-  DOCKER_DRIVER: overlay2
-
-services:
-  - docker:19.03-dind
 
 image: $CI_REGISTRY_IMAGE
 stages:
@@ -39,20 +35,20 @@ trigger_build:
   stage: deploy
   script:
     - /usr/bin/curl -X POST
-      -F token=8f29e5eeb7db2123d9c2bb84634da2
+      -F token=$DEPLOY_TRIGGER_TOKEN
       -F "variables[MYSQLBACKEND]=$CI_COMMIT_REF_NAME"
       -F "variables[TriggerdBy]=MYSQLBACKEND"
       -F "variables[TriggerdByHash]=$CI_COMMIT_SHORT_SHA"
-      -F ref=master https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
+      -F ref=dev https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
 
 # Build a docker image in which tests for this repository can run
 build-testenv:
-  tags: [ docker ]
+  tags: [ cached-dind ]
   image: docker:19.03
   stage: setup
   script: 
     - cd .docker
-    - docker login -u testuser -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    - docker login -u indiscale -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
       # use here general latest or specific branch latest...
     - docker pull $CI_REGISTRY_IMAGE || true
     - docker build 
diff --git a/procedures/insertLinCon.sql b/procedures/insertLinCon.sql
index 878b70a176e7777fef323bdea2c1bdc74144ee83..7c03d509cc2d49e8ca1c1e601ee28e84e94dc196 100644
--- a/procedures/insertLinCon.sql
+++ b/procedures/insertLinCon.sql
@@ -50,7 +50,7 @@ delimiter //
 
 CREATE PROCEDURE db_2_0.updateLinCon(in sig_from BIGINT, in sig_to BIGINT, in new_a DECIMAL(65,30), in new_b_dividend BIGINT, in new_b_divisor BIGINT, in new_c DECIMAL(65,30))
 BEGIN
-	UPDATE units_ling_con SET signature_to=sig_to, a=new_a, b_dividend=new_b_dividend, b_divisor=new_b_divisor, c=new_c where signature_from=sig_from;
+    UPDATE units_lin_con SET signature_to=sig_to, a=new_a, b_dividend=new_b_dividend, b_divisor=new_b_divisor, c=new_c where signature_from=sig_from;
 
 END;
 //
diff --git a/procedures/query/applyBackReference.sql b/procedures/query/applyBackReference.sql
index f287408e98c053c1c73c2f1808199320565c131f..9a2450750b42963fcff5de1e02e0054097ecc7fa 100644
--- a/procedures/query/applyBackReference.sql
+++ b/procedures/query/applyBackReference.sql
@@ -38,7 +38,7 @@ BEGIN
 		EXECUTE createBackRefSubQueryTable;
 		DEALLOCATE PREPARE createBackRefSubQueryTable;
 
-		SET @backRefSubResultSetStmtStr = CONCAT('INSERT INTO `',newTableName,'` (id,entity_id) SELECT entity_id AS id, value AS entity_id FROM `reference_data` AS data WHERE EXISTS (SELECT 1 FROM `',sourceSet,'` AS source WHERE source.id=data.value LIMIT 1)', IF(propertiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',propertiesTable,'` AS p WHERE p.id=data.property_id LIMIT 1)')), IF(entitiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',entitiesTable,'` AS e WHERE e.id=data.entity_id LIMIT 1)')));
+		SET @backRefSubResultSetStmtStr = CONCAT('INSERT IGNORE INTO `',newTableName,'` (id,entity_id) SELECT entity_id AS id, value AS entity_id FROM `reference_data` AS data WHERE EXISTS (SELECT 1 FROM `',sourceSet,'` AS source WHERE source.id=data.value LIMIT 1)', IF(propertiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',propertiesTable,'` AS p WHERE p.id=data.property_id LIMIT 1)')), IF(entitiesTable IS NULL,'',CONCAT(' AND EXISTS (SELECT 1 FROM `',entitiesTable,'` AS e WHERE e.id=data.entity_id LIMIT 1)')));
 
 		PREPARE backRefSubResultSetStmt FROM @backRefSubResultSetStmtStr;
 		EXECUTE backRefSubResultSetStmt;
diff --git a/procedures/query/applyPOV.sql b/procedures/query/applyPOV.sql
index aab2eb19ca26c9393f7e972242a7649f1dd762d5..eefee066d8b72b7d13cc24ec6c56fa5b6150f061 100644
--- a/procedures/query/applyPOV.sql
+++ b/procedures/query/applyPOV.sql
@@ -21,10 +21,37 @@
  * ** end header
  */
 
+/* Documentation including (?) has to be checked by an expert. */
+/* Question: What is datetime dot notation? */
+
 DROP PROCEDURE IF EXISTS db_2_0.applyPOV;
 DELIMITER //
 
-CREATE PROCEDURE db_2_0.applyPOV(in sourceSet VARCHAR(255), in targetSet VARCHAR(255), in propertiesTable VARCHAR(255), in refIdsTable VARCHAR(255), in o CHAR(4), in vText VARCHAR(255), in vInt INT, in vDouble DOUBLE, in unit_sig BIGINT, in vDoubleStdUnit DOUBLE, in stdUnit_sig BIGINT, in vDateTime VARCHAR(255), in vDateTimeDotNotation VARCHAR(255), in agg CHAR(3), in pname VARCHAR(255))
+CREATE PROCEDURE db_2_0.applyPOV(in sourceSet VARCHAR(255), /* (?) Name of the table that the POV will be applied to. This can be a temporary table. */
+                                 in targetSet VARCHAR(255), /* (?) Name of the result table of this POV. */
+                                 in propertiesTable VARCHAR(255),
+                                 in refIdsTable VARCHAR(255),
+                                 in o CHAR(4), /* The operator for this operation. can be one of:
+                                                    0   check for "equals NULL"
+                                                    !0  check for "not NULL"
+                                                    ->  check whether a reference exists
+                                                    (   (?) check for datetime intervals
+                                                    !(  (?) check for being outside of datetime intervals
+                                                    other operators (all SQL operators (?))
+                                                      these other operators can be used either with or without an aggregation
+                                                      to use an aggregation set agg to non-zero
+                                                      all SQL aggregations can be used
+                                               */
+                                 in vText VARCHAR(255),  /* (?) the text value to be checked against using operator o */
+                                 in vInt INT,  /* the integer value to be checked against using operator o */
+                                 in vDouble DOUBLE,  /* the double value to be checked against using operator o */
+                                 in unit_sig BIGINT,
+                                 in vDoubleStdUnit DOUBLE,
+                                 in stdUnit_sig BIGINT,
+                                 in vDateTime VARCHAR(255),
+                                 in vDateTimeDotNotation VARCHAR(255),
+                                 in agg CHAR(3), /* an SQL aggregate function or NULL when no aggregation should be used */
+                                 in pname VARCHAR(255)) /* name of the property, this name is only used for reporting more meaningful warnings */
 POV_LABEL: BEGIN
     DECLARE data TEXT DEFAULT NULL; /*data subselect statement string*/
     DECLARE sTextData VARCHAR(20000) DEFAULT NULL; /*SELECT PREFIX for data subselect plus WHERE CLAUSE for text_data*/
@@ -51,15 +78,33 @@ POV_LABEL: BEGIN
         SET vText = NULL;
         SET sTextData = 'SELECT domain_id, entity_id, property_id FROM `null_data` AS subdata';
 
+        /* Question: in !0 the query is explicitly checked for NOT NULL. Aren't these NULL entries forgotten here? */
+
     ELSEIF o = '!0' THEN
         #-- special case: property IS NOT NULL
         #-- generate statement parts
         SET vText = NULL;
+        /* Union of the following tables:
+             text_data
+             enum_data
+             integer_data
+             date_data
+             datetime_data
+             reference_data
+             double_data
+           Notes:
+             SELECT DISTINCT -> No duplicate values
+             UNION ALL -> Allow also duplicate values
+        */
         SET sTextData = 'SELECT DISTINCT domain_id, entity_id, property_id FROM `text_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `enum_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `integer_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `double_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE subdata.value IS NOT NULL UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `reference_data` AS subdata WHERE subdata.value IS NOT NULL';
 
     ELSEIF o = "(" or o = "!(" THEN
-        SET sTextData = IF(vText IS NULL,' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data`', IF(vDateTimeDotNotation IS NULL, NULL, CONCAT(' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE ',getDateWhereClause(vDateTimeDotNotation,o))));
-        SET sDatetimeData = IF(vText IS NULL,' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data`', IF(vDateTime IS NULL, NULL, CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE ',getDateTimeWhereClause(vDateTime,o))));
+        SET sTextData = IF(vText IS NULL, ' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data`',
+                                          IF(vDateTimeDotNotation IS NULL, NULL,
+                                                                           CONCAT(' SELECT DISTINCT domain_id, entity_id, property_id FROM `date_data` AS subdata WHERE ', getDateWhereClause(vDateTimeDotNotation, o))));
+        SET sDatetimeData = IF(vText IS NULL, ' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data`',
+                                              IF(vDateTime IS NULL, NULL,
+                                                                    CONCAT(' UNION ALL SELECT DISTINCT domain_id, entity_id, property_id FROM `datetime_data` AS subdata WHERE ', getDateTimeWhereClause(vDateTime, o))));
         SET vText = NULL;
     ELSEIF agg IS NOT NULL THEN
         #-- find aggregated value (min/max...)
@@ -148,6 +193,8 @@ POV_LABEL: BEGIN
     DEALLOCATE PREPARE stmt3;
     DEALLOCATE PREPARE stmtPOVkeepTbl;
 
+    /* Question: why select AS and not select INTO? */
+
     SELECT @stmtPOVkeepTblStr as applyPOVStmt1, @stmtPOVStr as applyPOVStmt2, keepTabl as applyPOVIntermediateResultSet;
 
 
diff --git a/procedures/query/initSubEntity.sql b/procedures/query/initSubEntity.sql
index 0390fcc4f7a2674cdf529e95b15fe66c4f0e81cd..2c3aefb3f7061efed43a5c4d36d4e413dca97786 100644
--- a/procedures/query/initSubEntity.sql
+++ b/procedures/query/initSubEntity.sql
@@ -28,27 +28,39 @@ DELIMITER //
 
 CREATE PROCEDURE db_2_0.initSubEntity(in e_id INT UNSIGNED, in ename VARCHAR(255), in tableName VARCHAR(255))
 BEGIN
-	DECLARE ecount INT DEFAULT 0;
-   
-    SET @stmtStr = CONCAT('INSERT IGNORE INTO `', tableName, '` (id) SELECT id FROM entities WHERE name = ? UNION ALL SELECT entity_id FROM name_data WHERE value=? AND domain_id=0;');
+    DECLARE ecount INT DEFAULT 0;
+    DECLARE op VARCHAR(255) DEFAULT '=';
+
+    IF LOCATE("%", ename) > 0 THEN
+        SET op = "LIKE";
+    END IF;
+
+    SET @stmtStr = CONCAT('INSERT IGNORE INTO `',
+        tableName,
+        '` (id) SELECT id FROM entities WHERE name ',
+        op,
+        ' ? UNION ALL SELECT entity_id FROM name_data WHERE value ',
+        op,
+        ' ? AND domain_id=0;');
+
     PREPARE stmt FROM @stmtStr;
-	SET @ename = ename;
+    SET @ename = ename;
     EXECUTE stmt USING @ename, @ename;
     SET ecount = ROW_COUNT();
-	DEALLOCATE PREPARE stmt;
+    DEALLOCATE PREPARE stmt;
 
     IF e_id IS NOT NULL THEN
         SET @stmtStr = CONCAT('INSERT IGNORE INTO `', tableName, '` (id) VALUES (', e_id, ')');
         PREPARE stmt FROM @stmtStr;
         EXECUTE stmt;
         SET ecount = ecount + ROW_COUNT();
-		DEALLOCATE PREPARE stmt;
+        DEALLOCATE PREPARE stmt;
     END IF;
 
     IF ecount > 0 THEN
         call getChildren(tableName);
     END IF;
-    
+
 END;
-// 
+//
 DELIMITER ;