diff --git a/tests/test_query_version.py b/tests/test_query_version.py
index 74c1d6f4a7dc3db1c4a305ab7c3517d1c562a4bb..0f9d8b3e44c4424592fa6ee7920c7e957e919ec0 100644
--- a/tests/test_query_version.py
+++ b/tests/test_query_version.py
@@ -30,12 +30,14 @@ TEST_PROP_DOUBLE = db.Property("TestPropertyDouble", datatype=db.DOUBLE)
 TEST_PROP_INTEGER = db.Property("TestPropertyInteger", datatype=db.INTEGER)
 TEST_PROP_DATETIME = db.Property("TestPropertyDatetime", datatype=db.DATETIME)
 TEST_PROP_DATE = db.Property("TestPropertyDate", datatype=db.DATETIME)
-TEST_REF_RT = db.RecordType("TestRefRecordType")
 
+TEST_REF_RT = db.RecordType("TestRefRecordType")
 TEST_REF_1 = db.Record("TestRef1", description="ref1").add_parent(TEST_REF_RT)
 TEST_REF_2 = db.Record("TestRef2", description="ref2").add_parent(TEST_REF_RT)
 TEST_REF_3 = db.Record("TestRef3", description="ref3").add_parent(TEST_REF_RT)
+
 TEST_RT_1 = db.RecordType("TestRecordType1")
+
 TEST_REC_1 = db.Record(
     "TestRecord1",
     description="v1").add_parent(
@@ -53,6 +55,13 @@ TEST_REC_1 = db.Record(
                                 TEST_REF_RT,
                                 TEST_REF_1)
 
+TEST_PROP_TEXT_2 = db.Property("TestPropertyText2", datatype=db.TEXT)
+TEST_BACKREF_RT = db.RecordType("TestBackRefRecordType")
+TEST_BACKREF_0 = db.Record("TestBackRef0", description="bref0").add_parent(TEST_BACKREF_RT).add_property(TEST_RT_1, "TestRecord1").add_property(TEST_PROP_TEXT_2, "val0")
+TEST_BACKREF_1 = db.Record("TestBackRef1", description="bref1").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val1")
+TEST_BACKREF_2 = db.Record("TestBackRef2", description="bref2").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val2")
+TEST_BACKREF_3 = db.Record("TestBackRef3", description="bref3").add_parent(TEST_BACKREF_RT).add_property(TEST_PROP_TEXT_2, "val3")
+
 
 def teardown_module():
     CONTAINER.delete()
@@ -61,7 +70,11 @@ def teardown_module():
 def setup_module():
     CONTAINER.extend([TEST_RT_1, TEST_REC_1, TEST_PROP_TEXT, TEST_PROP_DOUBLE,
                       TEST_PROP_INTEGER, TEST_PROP_DATETIME, TEST_PROP_DATE,
-                      TEST_REF_RT, TEST_REF_1, TEST_REF_2, TEST_REF_3]).insert()
+                      TEST_REF_RT, TEST_REF_1, TEST_REF_2, TEST_REF_3,
+                      TEST_BACKREF_RT, TEST_BACKREF_0, TEST_PROP_TEXT_2,
+                     ]).insert()
+    CONTAINER.append(TEST_BACKREF_1)
+    TEST_BACKREF_1.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert()
 
     # update test_rec_1 two times
     TEST_REC_1.description = "v2"
@@ -73,6 +86,9 @@ def setup_module():
     TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_2
     TEST_REC_1.update()
 
+    CONTAINER.append(TEST_BACKREF_2)
+    TEST_BACKREF_2.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert()
+
     TEST_REC_1.description = "v3"
     TEST_REC_1.get_property(TEST_PROP_TEXT).value = "val3"
     TEST_REC_1.get_property(TEST_PROP_DOUBLE).value = 3.14
@@ -82,6 +98,9 @@ def setup_module():
     TEST_REC_1.get_property(TEST_REF_RT).value = TEST_REF_3
     TEST_REC_1.update()
 
+    CONTAINER.append(TEST_BACKREF_3)
+    TEST_BACKREF_3.add_property(TEST_RT_1, str(TEST_REC_1.id)+"@HEAD").insert()
+
 
 def test_normal_find_record():
     result = query("FIND RECORD TestRecord1")
@@ -172,14 +191,32 @@ def test_normal_find_record():
     assert len(result) == 0
 
     result = query("FIND RECORD WITH NOT TestPropertyText")
-    assert len(result) == 3
-    assert set(["ref1", "ref2", "ref3"]) == set([r.description for r in result])
+    assert len(result) == 7
+    assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3",]) == set([r.description for r in result])
+
+    result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRefRecordType")
+    assert len(result) == 1
+    assert result[0].description == "v3"
+
+    result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRef0")
+    assert len(result) == 1
+    assert result[0].description == "v3"
+
+    result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRefRecordType WITH TestPropertyText2=val0")
+    assert len(result) == 1
+    assert result[0].description == "v3"
+
+def test_todo():
+    # current version is not referenced
+    result = query("FIND RECORD WHICH IS REFERENCED BY TestBackRef1")
+    assert len(result) == 0
 
 
 def test_find_any_version_of_record():
     result = query("FIND ANY VERSION OF RECORD")
-    assert len(result) == 6
-    assert set(["v3", "v2", "v1", "ref1", "ref2", "ref3"]
+    assert len(result) == 10
+    assert set(["v3", "v2", "v1", "ref1", "ref2", "ref3", "bref0", "bref1",
+                "bref2", "bref3"]
                ) == set([r.description for r in result])
 
 
@@ -432,19 +469,64 @@ def test_find_any_version_of_record_with_disjunction_filter():
 
 def test_find_any_version_of_record_with_negation_filter():
     result = query("FIND ANY VERSION OF RECORD WHICH DOES NOT HAVE A TestPropertyText")
-    assert len(result) == 3
-    assert set(["ref1", "ref2", "ref3"]) == set([r.description for r in result])
+    assert len(result) == 7
+    assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3",]) == set([r.description for r in result])
 
     result = query("FIND ANY VERSION OF RECORD WHICH DOES NOT HAVE A TestPropertyText=val2")
-    assert len(result) == 5
-    assert set(["ref1", "ref2", "ref3", "v1", "v3"]) == set([r.description for r in result])
+    assert len(result) == 9
+    assert set(["ref1", "ref2", "ref3", "bref0", "bref1", "bref2", "bref3",
+                "v1", "v3"]) == set([r.description for r in result])
 
     result = query("FIND ANY VERSION OF RECORD TestRecord1 WHICH DOES NOT HAVE A TestPropertyText=val2")
     assert len(result) == 2
     assert set(["v1", "v3"]) == set([r.description for r in result])
 
+
 def test_find_any_version_of_record_with_complex_filter():
     result = query("FIND ANY VERSION OF RECORD WITH TestPropertyText=val2 OR (TestPropertyInteger=200 AND NOT TestPropertyInteger=400 AND TestRefRecordType = TestRef2)")
     assert len(result) == 1
     assert result[0].description == "v2"
 
+
+def test_find_any_version_of_record_with_backref_filter():
+    result = query("FIND ANY VERSION OF RECORD WHICH IS REFERENCED BY TestBackRefRecordType")
+    assert len(result) == 3
+    assert set(["v1", "v2", "v3"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF RECORD TestRecord1 WHICH IS REFERENCED BY TestBackRefRecordType")
+    assert len(result) == 3
+    assert set(["v1", "v2", "v3"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRefRecordType")
+    assert len(result) == 3
+    assert set(["v1", "v2", "v3"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef0")
+    assert len(result) == 3
+    assert set(["v1", "v2", "v3"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef0")
+    assert len(result) == 3
+    assert set(["v1", "v2", "v3"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef1")
+    assert len(result) == 1
+    assert set(["v1"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef2")
+    assert len(result) == 1
+    assert set(["v2"]) == set([r.description for r in result])
+
+    result = query("FIND ANY VERSION OF TestRecord1 WHICH IS REFERENCED BY TestBackRef3")
+    assert len(result) == 1
+    assert set(["v3"]) == set([r.description for r in result])
+
+def test_find_any_version_of_record_with_backref_and_subquery():
+    assert query("FIND ANY VERSION OF RECORD WHICH IS REFERENCED BY TestBackRefRecordType WITH name = TestBackRef0")
+    assert len(result) == 1
+    assert set(["v3"]) == set([r.description for r in result])
+
+def test_find_any_version_of_record_with_ref_and_subquery():
+    assert query("FIND ANY VERSION OF RECORD WHICH REFERENCES TestRefRecordType WITH name = TestRef2")
+    assert len(result) == 1
+    assert set(["v3"]) == set([r.description for r in result])