diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/SecurityAwareFilter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/SecurityAwareFilter.java
index 481e1bf..1f15faa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/SecurityAwareFilter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/SecurityAwareFilter.java
@@ -53,6 +53,11 @@
 
     /** {@inheritDoc} */
     @Override public boolean evaluate(CacheEntryEvent<? extends K, ? extends V> evt) throws CacheEntryListenerException {
+        // Even if there is no custom filter, the platform filter is always present (for proper resource release),
+        // but only the custom filter is serialized.
+        if (original == null)
+            return true;
+
         IgniteSecurity security = ignite.context().security();
 
         try (OperationSecurityContext c = security.withContext(subjectId)) {
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTest.cs
index d49469f..b645233 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Continuous/ContinuousQueryTest.cs
@@ -21,17 +21,50 @@
     using System;
     using System.Collections.Concurrent;
     using System.Collections.Generic;
+    using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Event;
     using Apache.Ignite.Core.Cache.Query.Continuous;
+    using Apache.Ignite.Core.Configuration;
+    using Apache.Ignite.Core.Log;
+    using Apache.Ignite.Core.Tests.Client.Cache;
     using NUnit.Framework;
 
     /// <summary>
-    /// Tests continuous queries.
+    /// Tests continuous queries with security enabled and disabled.
     /// </summary>
+    [TestFixture(false)]
+    [TestFixture(true)]
     [Category(TestUtils.CategoryIntensive)]
     public class ContinuousQueryTest
     {
+        /** Flag to enable Ignite security. */
+        private readonly bool _enableSecurity;
+
+        /** Logger for tracking errors. */
+        private readonly ListLogger _logger = new ListLogger(new ConsoleLogger())
+        {
+            EnabledLevels = new[] {LogLevel.Error}
+        };
+
+        /// <summary>
+        /// Initializes a new instance of <see cref="ContinuousQueryTest"/>. 
+        /// </summary>
+        public ContinuousQueryTest(bool enableSecurity)
+        {
+            _enableSecurity = enableSecurity;
+        }
+        
+        /// <summary>
+        /// Clears persistence directory before and after the test.
+        /// </summary>
+        [TestFixtureSetUp]
+        [TestFixtureTearDown]
+        public void FixtureTearDown()
+        {
+            TestUtils.ClearWorkDir();
+        }
+
         /// <summary>
         /// Tests same query on multiple nodes.
         /// This tests verifies that there are no exception on Java side during event delivery.
@@ -42,6 +75,8 @@
         {
             using (var ignite = StartIgnite())
             {
+                ignite.GetCluster().SetActive(true);
+
                 var cache = ignite.GetOrCreateCache<Guid, Data>("data");
                 cache.QueryContinuous(new ContinuousQuery<Guid, Data>(new Listener()));
 
@@ -57,6 +92,9 @@
                     }
                 }
             }
+
+            Assert.AreEqual(0,
+                _logger.Entries.FindAll(e => e.Message.Contains("CacheEntryEventFilter failed")).Count);
         }
 
         /// <summary>
@@ -84,13 +122,28 @@
         /// <summary>
         /// Starts the ignite.
         /// </summary>
-        private static IIgnite StartIgnite()
+        private IIgnite StartIgnite()
         {
-            return Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            var ignite = Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration())
             {
-                BinaryConfiguration = new Core.Binary.BinaryConfiguration(typeof(Data)),
-                AutoGenerateIgniteInstanceName = true
+                BinaryConfiguration = new BinaryConfiguration(typeof(Data)),
+                AutoGenerateIgniteInstanceName = true,
+                DataStorageConfiguration = new DataStorageConfiguration
+                {
+                    DefaultDataRegionConfiguration = new DataRegionConfiguration
+                    {
+                        PersistenceEnabled = _enableSecurity,
+                        Name = DataStorageConfiguration.DefaultDataRegionName,
+                    }
+                },
+                AuthenticationEnabled = _enableSecurity,
+                Logger = _logger,
+                IsActiveOnStart = false
             });
+            
+            ignite.GetCluster().SetBaselineAutoAdjustEnabledFlag(true);
+
+            return ignite;
         }
 
         private class Data
