diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/AbstractExecuteExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/AbstractExecuteExecutor.java
index 830b6be38a815216bddd09a48a82cc58ed1c6dea..b3e50e589cfd16870370ae75c56fcc4c69f24171 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/AbstractExecuteExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/AbstractExecuteExecutor.java
@@ -34,7 +34,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 import ch.systemsx.cisd.openbis.plugin.query.server.DAO;
 import ch.systemsx.cisd.openbis.plugin.query.server.authorization.QueryAccessController;
 import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
-import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProvider;
 import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBindings;
 
 /**
@@ -52,9 +51,6 @@ public class AbstractExecuteExecutor
     @Autowired
     protected IMapQueryDatabaseByIdExecutor mapQueryDatabaseByIdExecutor;
 
-    @Autowired
-    protected IQueryDatabaseDefinitionProvider databaseDefinitionProvider;
-
     @Autowired
     protected IDAOFactory daoFactory;
 
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/MapQueryDatabaseByIdExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/MapQueryDatabaseByIdExecutor.java
index f8651504425e2a1b202a7e8ff07949ebfe31ddfa..fdcf5f77f60a5594ab59f0c483920f27fde66023 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/MapQueryDatabaseByIdExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/MapQueryDatabaseByIdExecutor.java
@@ -28,7 +28,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnsupportedObjectIdException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
-import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProvider;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProviderAutoInitialized;
 
 /**
  * @author pkupczyk
@@ -38,13 +38,11 @@ public class MapQueryDatabaseByIdExecutor implements IMapQueryDatabaseByIdExecut
 {
 
     @Autowired
-    private IQueryDatabaseDefinitionProvider databaseProvider;
+    private IQueryDatabaseDefinitionProviderAutoInitialized databaseProvider;
 
     @Override
     public Map<IQueryDatabaseId, DatabaseDefinition> map(IOperationContext context, Collection<? extends IQueryDatabaseId> ids)
     {
-        databaseProvider.initDatabaseDefinitions();
-
         Map<IQueryDatabaseId, DatabaseDefinition> result = new LinkedHashMap<IQueryDatabaseId, DatabaseDefinition>();
 
         for (IQueryDatabaseId id : ids)
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/QueryAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/QueryAuthorizationExecutor.java
index 3429ebfc9d380c12c398153a67ec2f32666131de..bf8ff10501d7693918e26bba0978eb8cbcd9672c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/QueryAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/QueryAuthorizationExecutor.java
@@ -16,10 +16,12 @@
 
 package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.query;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.IQueryId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
+import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.ObjectNotFoundException;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.roleassignment.RoleAssignmentUtils;
@@ -33,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 import ch.systemsx.cisd.openbis.plugin.query.server.authorization.QueryAccessController;
 import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProviderAutoInitialized;
 
 /**
  * @author pkupczyk
@@ -41,6 +44,9 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
 public class QueryAuthorizationExecutor implements IQueryAuthorizationExecutor
 {
 
+    @Autowired
+    private IQueryDatabaseDefinitionProviderAutoInitialized databaseProvider;
+
     @Override
     @RolesAllowed({ RoleWithHierarchy.PROJECT_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     @Capability("CREATE_QUERY")
@@ -72,6 +78,8 @@ public class QueryAuthorizationExecutor implements IQueryAuthorizationExecutor
     @RolesAllowed({ RoleWithHierarchy.PROJECT_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public void canExecute(IOperationContext context, IQueryId id, QueryPE query)
     {
+        checkDatabaseExists(query.getQueryDatabaseKey());
+
         if (query.isPublic() || context.getSession().tryGetPerson().equals(query.getRegistrator())
                 || RoleAssignmentUtils.isInstanceAdmin(context.getSession().tryGetPerson()))
         {
@@ -92,6 +100,8 @@ public class QueryAuthorizationExecutor implements IQueryAuthorizationExecutor
     @RolesAllowed({ RoleWithHierarchy.PROJECT_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public void canExecute(IOperationContext context, String sql, DatabaseDefinition database)
     {
+        checkDatabaseExists(database.getKey());
+
         try
         {
             QueryAccessController.checkWriteAccess(context.getSession(), database.getKey(), "create and perform");
@@ -117,6 +127,8 @@ public class QueryAuthorizationExecutor implements IQueryAuthorizationExecutor
 
     private void canWrite(IOperationContext context, IQueryId id, QueryPE query, String operation)
     {
+        checkDatabaseExists(query.getQueryDatabaseKey());
+
         if (query.isPublic() || context.getSession().tryGetPerson().equals(query.getRegistrator())
                 || RoleAssignmentUtils.isInstanceAdmin(context.getSession().tryGetPerson()))
         {
@@ -133,4 +145,14 @@ public class QueryAuthorizationExecutor implements IQueryAuthorizationExecutor
         }
     }
 
+    private void checkDatabaseExists(String databaseKey)
+    {
+        DatabaseDefinition database = databaseProvider.getDefinition(databaseKey);
+
+        if (database == null)
+        {
+            throw new ObjectNotFoundException(new QueryDatabaseName(databaseKey));
+        }
+    }
+
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/UpdateQueryDatabaseExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/UpdateQueryDatabaseExecutor.java
index 3d4159ebfffcab192dd8ac1812a3f40a8261054c..daaf94e5c57591cfff385538dd7da23fb7cb7ebb 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/UpdateQueryDatabaseExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/query/UpdateQueryDatabaseExecutor.java
@@ -30,7 +30,7 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractUpdateEntityToOneRelationExecutor;
 import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
-import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProvider;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProviderAutoInitialized;
 
 /**
  * @author pkupczyk
@@ -44,7 +44,7 @@ public class UpdateQueryDatabaseExecutor extends AbstractUpdateEntityToOneRelati
     private IMapQueryDatabaseByIdExecutor mapQueryDatabaseByIdExecutor;
 
     @Autowired
-    private IQueryDatabaseDefinitionProvider databaseDefinitionProvider;
+    private IQueryDatabaseDefinitionProviderAutoInitialized databaseDefinitionProvider;
 
     @Override
     protected String getRelationName()
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationRecord.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationRecord.java
index 46aeca3d430d49e5d8476f38d2948d2881a10b75..c33cdcb891dc9fd7d3f54cc79a98a8e14b09708c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationRecord.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationRecord.java
@@ -26,6 +26,8 @@ public class QueryAuthorizationRecord
 
     public boolean isPublic;
 
+    public String databaseKey;
+
     public Long registratorId;
 
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationValidator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationValidator.java
index 0e0b00739e7fb96354e512c2c75bdd7cc6a0e777..728e63aafb5b6fa907177957ebc0a590c50e931b 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationValidator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryAuthorizationValidator.java
@@ -21,10 +21,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.roleassignment.RoleAssignmentUtils;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProviderAutoInitialized;
 
 import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
 import net.lemnik.eodsql.QueryTool;
@@ -36,23 +39,27 @@ import net.lemnik.eodsql.QueryTool;
 public class QueryAuthorizationValidator implements IQueryAuthorizationValidator
 {
 
+    @Autowired
+    private IQueryDatabaseDefinitionProviderAutoInitialized databaseProvider;
+
     @Override
     public Set<Long> validate(PersonPE person, Collection<Long> queryIds)
     {
-        if (RoleAssignmentUtils.isInstanceAdmin(person))
-        {
-            return new HashSet<Long>(queryIds);
-        }
-
+        boolean isInstanceAdmin = RoleAssignmentUtils.isInstanceAdmin(person);
         QueryQuery query = QueryTool.getManagedQuery(QueryQuery.class);
         List<QueryAuthorizationRecord> records = query.getAuthorizations(new LongOpenHashSet(queryIds));
         Set<Long> result = new HashSet<Long>();
 
         for (QueryAuthorizationRecord record : records)
         {
-            if (record.isPublic || record.registratorId.equals(person.getId()))
+            DatabaseDefinition database = databaseProvider.getDefinition(record.databaseKey);
+
+            if (database != null)
             {
-                result.add(record.id);
+                if (record.isPublic || record.registratorId.equals(person.getId()) || isInstanceAdmin)
+                {
+                    result.add(record.id);
+                }
             }
         }
 
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryQuery.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryQuery.java
index 6c37c7e0f58df8764b0005d4deec3560362a969f..f87a63d47e06b7b066998484240c06825b07f97a 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryQuery.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/translator/query/QueryQuery.java
@@ -39,7 +39,7 @@ public interface QueryQuery extends ObjectQuery
             LongSetMapper.class }, fetchSize = FETCH_SIZE)
     public List<ObjectRelationRecord> getRegistratorIds(LongSet queryIds);
 
-    @Select(sql = "select q.id, q.is_public as isPublic, q.pers_id_registerer as registratorId from queries q where q.id = any(?{1})", parameterBindings = {
+    @Select(sql = "select q.id, q.is_public as isPublic, q.db_key as databaseKey, q.pers_id_registerer as registratorId from queries q where q.id = any(?{1})", parameterBindings = {
             LongSetMapper.class }, fetchSize = FETCH_SIZE)
     public List<QueryAuthorizationRecord> getAuthorizations(LongSet queryIds);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryDatabaseDefinitionProviderAutoInitialized.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryDatabaseDefinitionProviderAutoInitialized.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd1491e62c4c0e0128c07743f6d140eeefaccd9a
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryDatabaseDefinitionProviderAutoInitialized.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2018 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.query.server;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.openbis.plugin.query.shared.DatabaseDefinition;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProvider;
+import ch.systemsx.cisd.openbis.plugin.query.shared.IQueryDatabaseDefinitionProviderAutoInitialized;
+
+/**
+ * @author pkupczyk
+ */
+@Component
+public class QueryDatabaseDefinitionProviderAutoInitialized implements IQueryDatabaseDefinitionProviderAutoInitialized
+{
+
+    @Autowired
+    private IQueryDatabaseDefinitionProvider databaseProvider;
+
+    @Override
+    public DatabaseDefinition getDefinition(String dbKey) throws UserFailureException
+    {
+        databaseProvider.initDatabaseDefinitions();
+        return databaseProvider.getDefinition(dbKey);
+    }
+
+    @Override
+    public Collection<DatabaseDefinition> getAllDefinitions() throws UserFailureException
+    {
+        databaseProvider.initDatabaseDefinitions();
+        return databaseProvider.getAllDefinitions();
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/shared/IQueryDatabaseDefinitionProviderAutoInitialized.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/shared/IQueryDatabaseDefinitionProviderAutoInitialized.java
new file mode 100644
index 0000000000000000000000000000000000000000..dda27704d8fcfb1fcf1d5bec24fd029e902dd372
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/shared/IQueryDatabaseDefinitionProviderAutoInitialized.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.query.shared;
+
+import java.util.Collection;
+
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
+
+/**
+ * @author pkupczyk
+ */
+public interface IQueryDatabaseDefinitionProviderAutoInitialized
+{
+    DatabaseDefinition getDefinition(String dbKey) throws UserFailureException;
+
+    Collection<DatabaseDefinition> getAllDefinitions() throws UserFailureException;
+}
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractQueryTest.java
index 92b6f06e038c9f4bc429938ad6e501b25b71dd87..560a24a9abb75c25feeb1cdb4a178f1802d852b3 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractQueryTest.java
@@ -47,6 +47,8 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.update.QueryUpdate;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.Role;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.create.RoleAssignmentCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.ISpaceId;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 
 /**
  * @author pkupczyk
@@ -147,6 +149,38 @@ public class AbstractQueryTest extends AbstractTest
         return getQuery(user, password, ids.get(0));
     }
 
+    protected QueryPE createQueryWithExistingDB(String user)
+    {
+        PersonPE registrator = daoFactory.getPersonDAO().tryFindPersonByUserId(user);
+
+        QueryPE queryPE = new QueryPE();
+        queryPE.setName("my-database-exists");
+        queryPE.setQueryType(ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType.GENERIC);
+        queryPE.setQueryDatabaseKey(DB_OPENBIS_METADATA);
+        queryPE.setExpression(SELECT_SPACE_CODES_SQL);
+        queryPE.setRegistrator(registrator);
+
+        daoFactory.getQueryDAO().createQuery(queryPE);
+
+        return queryPE;
+    }
+
+    protected QueryPE createQueryWithNonExistentDB(String user)
+    {
+        PersonPE registrator = daoFactory.getPersonDAO().tryFindPersonByUserId(user);
+
+        QueryPE queryPE = new QueryPE();
+        queryPE.setName("my-database-does-not-exist");
+        queryPE.setQueryType(ch.systemsx.cisd.openbis.generic.shared.basic.dto.QueryType.GENERIC);
+        queryPE.setQueryDatabaseKey("idontexist");
+        queryPE.setExpression(SELECT_SPACE_CODES_SQL);
+        queryPE.setRegistrator(registrator);
+
+        daoFactory.getQueryDAO().createQuery(queryPE);
+
+        return queryPE;
+    }
+
     protected Query getQuery(String user, String password, IQueryId queryId)
     {
         String sessionToken = v3api.login(user, password);
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteQueryTest.java
index d456bebc77ed60ae75e62f943ae6f4dab3359dda..286e6d8c91630302c3fbfb9cedab22fd5c02cfa7 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteQueryTest.java
@@ -32,6 +32,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryTechId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 
 /**
  * @author pkupczyk
@@ -81,6 +82,21 @@ public class DeleteQueryTest extends AbstractQueryTest
             }, "Deletion options cannot be null");
     }
 
+    @Test
+    public void testDeleteWithQueryThatBelongsToNonexistentDatabase()
+    {
+        QueryPE queryWithNonExistentDB = createQueryWithNonExistentDB(TEST_USER);
+
+        assertObjectNotFoundException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    deleteQuery(TEST_USER, PASSWORD, new QueryName(queryWithNonExistentDB.getName()));
+                }
+            }, new QueryDatabaseName("idontexist"));
+    }
+
     @Test(dataProvider = PROVIDER_TRUE_FALSE)
     public void testDeleteWithOwner(boolean isPublic)
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteQueryTest.java
index 8703a235f77a85a88e7f6a559507166ecf02da19..35571eca81c37530b522314958fc68da0cf3a672 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteQueryTest.java
@@ -29,9 +29,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.Query;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.create.QueryCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.IQueryDatabaseId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.Role;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 
 /**
  * @author pkupczyk
@@ -127,6 +129,21 @@ public class ExecuteQueryTest extends AbstractQueryTest
         assertEquals(result.getRows().get(11).get(1).toString(), "/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST");
     }
 
+    @Test
+    public void testExecuteWithQueryThatBelongsToNonexistentDatabase()
+    {
+        QueryPE queryWithNonExistentDB = createQueryWithNonExistentDB(TEST_USER);
+
+        assertObjectNotFoundException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    executeQuery(TEST_USER, PASSWORD, new QueryName(queryWithNonExistentDB.getName()), null);
+                }
+            }, new QueryDatabaseName("idontexist"));
+    }
+
     @Test(dataProvider = PROVIDER_TRUE_FALSE)
     public void testExecuteWithOwner(boolean isPublic)
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteSqlTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteSqlTest.java
index 07a3536fcc453676da58fc647d8bfb4ea7256b96..184517bda91de4fadf5e03371486161a3566321e 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteSqlTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteSqlTest.java
@@ -25,6 +25,7 @@ import org.testng.annotations.Test;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.TableModel;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.Role;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
@@ -83,6 +84,19 @@ public class ExecuteSqlTest extends AbstractQueryTest
             }, "Unknown variable 'code'");
     }
 
+    @Test
+    public void testExecuteWithDatabaseNonexistent()
+    {
+        assertObjectNotFoundException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    executeSql(TEST_USER, PASSWORD, SELECT_SPACE_CODES_SQL, new QueryDatabaseName("idontexist"), null);
+                }
+            }, new QueryDatabaseName("idontexist"));
+    }
+
     @Test
     public void testExecuteWithDatabaseWithSpaceNullUsingSpaceObserver()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/GetQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/GetQueryTest.java
index 6ee05ae66c0e471a4658f199b9d6008eec80c28f..bd81b1beebed0fac6a135de6b6c70be48c9e9dfa 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/GetQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/GetQueryTest.java
@@ -36,6 +36,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryTechId;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUser;
 
 /**
@@ -231,6 +232,19 @@ public class GetQueryTest extends AbstractQueryTest
         assertEquals(query.getRegistrator().getUserId(), TEST_USER);
     }
 
+    @Test
+    public void testGetWithQueryThatBelongsToNonexistentDatabase()
+    {
+        QueryPE queryWithExistingDB = createQueryWithExistingDB(TEST_USER);
+        QueryPE queryWithNonExistentDB = createQueryWithNonExistentDB(TEST_USER);
+
+        Query query = getQuery(TEST_USER, PASSWORD, new QueryName(queryWithExistingDB.getName()));
+        assertEquals(query.getName(), queryWithExistingDB.getName());
+
+        query = getQuery(TEST_USER, PASSWORD, new QueryName(queryWithNonExistentDB.getName()));
+        assertNull(query);
+    }
+
     @Test(dataProvider = PROVIDER_TRUE_FALSE)
     public void testGetWithOwner(boolean isPublic)
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchQueryTest.java
index c041ee4bd733d3d2f428388ea5a2cc11005053b5..28f084c4ac03b5670a6491e59146326e538b6d57 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchQueryTest.java
@@ -31,6 +31,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryTechId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.search.QuerySearchCriteria;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUser;
 
 /**
@@ -144,6 +145,19 @@ public class SearchQueryTest extends AbstractQueryTest
         testSearch(TEST_USER, criteria);
     }
 
+    @Test
+    public void testSearchWithQueryThatBelongsToNonexistentDatabase()
+    {
+        QueryPE queryWithExistingDB = createQueryWithExistingDB(TEST_USER);
+        QueryPE queryWithNonExistentDB = createQueryWithNonExistentDB(TEST_USER);
+
+        QuerySearchCriteria criteria = new QuerySearchCriteria();
+        criteria.withOrOperator();
+        criteria.withName().thatEquals(queryWithExistingDB.getName());
+        criteria.withName().thatEquals(queryWithNonExistentDB.getName());
+        testSearch(TEST_USER, criteria, queryWithExistingDB.getName());
+    }
+
     @Test
     public void testSearchWithNameThatEquals()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateQueryTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateQueryTest.java
index 6e7a2fe6bdaadf41afe2a155cfba63799bcfa413..d29b7466f77fd159ad7f6cf768a7edd848e67e5a 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateQueryTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateQueryTest.java
@@ -27,6 +27,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryDatabaseName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.id.QueryName;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.query.update.QueryUpdate;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.dto.QueryPE;
 
 /**
  * @author pkupczyk
@@ -172,6 +173,24 @@ public class UpdateQueryTest extends AbstractQueryTest
             }, update.getDatabaseId().getValue());
     }
 
+    @Test
+    public void testUpdateWithQueryThatBelongsToNonexistentDatabase()
+    {
+        QueryPE queryWithNonExistentDB = createQueryWithNonExistentDB(TEST_USER);
+
+        QueryUpdate update = new QueryUpdate();
+        update.setQueryId(new QueryName(queryWithNonExistentDB.getName()));
+
+        assertObjectNotFoundException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    updateQuery(TEST_USER, PASSWORD, update);
+                }
+            }, new QueryDatabaseName("idontexist"));
+    }
+
     @Test
     public void testUpdateWithQueryTypeNull()
     {