diff --git a/CHANGELOG.md b/CHANGELOG.md
index b72a38fb66f016966948c2799c25219737e0fad8..1d2e913ccc5443aa000f453fa697f99725d54596 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ## [Unreleased] ##
 
 ### Added ###
+- `check_reference_field` function to check whether entities with provided ids
+  exits (for example when importing data from a table)
 
 ### Changed ###
 
diff --git a/src/caosadvancedtools/table_importer.py b/src/caosadvancedtools/table_importer.py
index 830919a1f29d49c193c7ed74b50c7b1566bbdf69..26bb86b829c4444caf792697520d4733cae3e0bc 100755
--- a/src/caosadvancedtools/table_importer.py
+++ b/src/caosadvancedtools/table_importer.py
@@ -31,6 +31,7 @@ import logging
 import pathlib
 from datetime import datetime
 
+import caosdb as db
 import numpy as np
 import pandas as pd
 from xlrd import XLRDError
@@ -56,6 +57,21 @@ def assure_name_format(name):
     return name
 
 
+def check_reference_field(ent_id, recordtype):
+    if 1 != db.execute_query("COUNT {} WIHT id={}".format(
+            recordtype,
+            ent_id),
+            unique=True):
+        raise ValueError(
+            "No {} with the supplied id={} exists. \n"
+            "Please supply a valid ID.".format(
+                recordtype,
+                ent_id
+            ))
+
+    return ent_id
+
+
 def yes_no_converter(val):
     """
     converts a string to True or False if possible.
diff --git a/unittests/test_h5.py b/unittests/test_h5.py
index e5ae94686fe4542f6833e21e9a80f01e4257538d..360d4b28938492d0f2af6d696e39dffb1cc3fead 100644
--- a/unittests/test_h5.py
+++ b/unittests/test_h5.py
@@ -74,6 +74,9 @@ class H5CFoodTest(unittest.TestCase):
             self.assertEqual(i.name, "group_level2_aa")
 
     def test_collect_existing_structure(self):
+        # TODO this does probably break the code: The function will not be
+        # restored correctly.
+        # Change it to use the BaseMockUpTest
         real_retrieve = caosdb.apiutils.retrieve_entity_with_id
         caosdb.apiutils.retrieve_entity_with_id = dummy_get
 
diff --git a/unittests/test_table_importer.py b/unittests/test_table_importer.py
index fbfb13d52623e96770b535d5dd91e74d4748e2bb..9c8a379d8c12def32c04cf82c5e09c0f5f6f175c 100644
--- a/unittests/test_table_importer.py
+++ b/unittests/test_table_importer.py
@@ -23,6 +23,7 @@ import unittest
 from functools import partial
 from tempfile import NamedTemporaryFile
 
+import caosdb as db
 import numpy as np
 import pandas as pd
 import pytest
@@ -30,6 +31,7 @@ from caosadvancedtools.datainconsistency import DataInconsistencyError
 from caosadvancedtools.table_importer import (CSVImporter, TableImporter,
                                               TSVImporter, XLSImporter,
                                               assure_name_format,
+                                              check_reference_field,
                                               date_converter,
                                               datetime_converter,
                                               incomplete_date_converter,
@@ -38,6 +40,8 @@ from caosadvancedtools.table_importer import (CSVImporter, TableImporter,
                                               win_path_list_converter,
                                               yes_no_converter)
 
+from test_utils import BaseMockUpTest
+
 
 class ConverterTest(unittest.TestCase):
     def test_yes_no(self):
@@ -226,3 +230,34 @@ class TSVImporterTest(TableImporterTest):
         self.valid_df.to_csv(tmp.name, sep="\t")
         importer = TSVImporter(**self.importer_kwargs)
         importer.read_file(tmp.name)
+
+
+class CountQueryNoneConverterTest(BaseMockUpTest):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # simulate that 0 entity exists
+        self.entities = (
+            '<Response count="0">'
+            '<Query string="count record" results="0">'
+            '</Query>'
+            '</Response>'
+            )
+
+    def test_check_reference_field(self):
+        self.assertRaises(ValueError, check_reference_field, "1232",  "Max")
+
+
+class CountQuerySingleConverterTest(BaseMockUpTest):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # simulate that 1 entity exists
+        self.entities = (
+            '<Response count="1">'
+            '<Query string="count record" results="1">'
+            '</Query>'
+            '</Response>'
+            )
+
+    def test_check_reference_field(self):
+        self.assertEqual(check_reference_field("1232",  "Max"),
+                         "1232")
diff --git a/unittests/test_utils.py b/unittests/test_utils.py
index 054d7c99069f294e9975742c1c0261fd7ebc768c..7369931799b00eba5a835458a6fad474de1d9039 100644
--- a/unittests/test_utils.py
+++ b/unittests/test_utils.py
@@ -32,14 +32,7 @@ from caosdb.connection.mockup import MockUpResponse, MockUpServerConnection
 from caosdb.exceptions import TransactionError
 
 
-class ReferencesBaseTest(unittest.TestCase):
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-        self.entities = (
-            '<Response><File name="test.npy" path="/some/path/test.npy'
-            '" id="1234"/><Query string="find record" results="1">'
-            '</Query></Response>')
-
+class BaseMockUpTest(unittest.TestCase):
     def setUp(self):
         conlogger = logging.getLogger("connection")
         conlogger.setLevel(level=logging.ERROR)
@@ -70,6 +63,15 @@ class ReferencesBaseTest(unittest.TestCase):
 
         return log
 
+
+class ReferencesBaseTest(BaseMockUpTest):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.entities = (
+            '<Response><File name="test.npy" path="/some/path/test.npy'
+            '" id="1234"/><Query string="find record" results="1">'
+            '</Query></Response>')
+
     def test_ref(self):
         self.clear_log()
         files = get_referenced_files("test.npy", prefix=None, filename=None,