diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
index d2d145e..dedde6a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
@@ -24,7 +24,6 @@
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.directory.api.ldap.model.filter.FilterParser;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
index 1e5d256..206720e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
@@ -27,7 +27,6 @@
 
 import java.text.ParseException;
 
-import org.apache.directory.api.ldap.model.filter.FilterParser;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
index 95d8a21..9a611b0 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
@@ -33,14 +33,12 @@
 import java.util.Locale;
 
 import org.apache.directory.api.ldap.model.entry.Value;
-import org.apache.directory.api.ldap.model.filter.FilterParser;
 import org.apache.directory.api.util.Strings;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
-
 /**
  * Tests the FilterParserImpl class.
  * 
@@ -411,6 +409,62 @@
     }
 
 
+    /**
+     * Test for DIRSTUDIO-1078/DIRAPI-365: unable to use # pound hash sign in LDAP filters
+     */
+    @Test
+    public void testEqualsFilterForDnWithLeadingHash() throws ParseException
+    {
+        String str = "(memberOf=CN=\\5c#SOME,OU=Groups,OU=EMEA,DC=example,DC=net)";
+        EqualityNode<?> node = ( EqualityNode<?> ) FilterParser.parse( str, true );
+        assertEquals( "memberOf", node.getAttribute() );
+        assertEquals( "CN=\\#SOME,OU=Groups,OU=EMEA,DC=example,DC=net", node.getValue().getString() );
+    }
+
+
+    /**
+     * Test for DIRSTUDIO-1078/DIRAPI-365: unable to use # pound hash sign in LDAP filters
+     */
+    @Test
+    public void testEqualsFilterForDnWithLeadingHashHex() throws ParseException
+    {
+        String str = "(memberOf=CN=\\5C23SOME,OU=Groups,OU=EMEA,DC=example,DC=net)";
+        EqualityNode<?> node = ( EqualityNode<?> ) FilterParser.parse( str, true );
+        assertEquals( "memberOf", node.getAttribute() );
+        assertEquals( "CN=\\23SOME,OU=Groups,OU=EMEA,DC=example,DC=net", node.getValue().getString() );
+    }
+
+
+    /**
+     * Test for DIRSTUDIO-1078/DIRAPI-365: unable to use # pound hash sign in LDAP filters
+     */
+    @Test
+    public void testExtensibleFilterForDnWithLeadingHash() throws ParseException
+    {
+        String str = "(memberOf:1.2.840.113556.1.4.1941:=CN=\\5c#SOME,OU=Groups,OU=EMEA,DC=example,DC=net)";
+        ExtensibleNode node = ( ExtensibleNode ) FilterParser.parse( str, true );
+        assertEquals( "memberOf", node.getAttribute() );
+        assertEquals( "CN=\\#SOME,OU=Groups,OU=EMEA,DC=example,DC=net", node.getValue().getString() );
+        assertEquals( "1.2.840.113556.1.4.1941", node.getMatchingRuleId() );
+        assertFalse( node.hasDnAttributes() );
+    }
+
+
+    /**
+     * Test for DIRSTUDIO-1078/DIRAPI-365: unable to use # pound hash sign in LDAP filters
+     */
+    @Test
+    public void testExtensibleFilterForDnWithLeadingHashHex() throws ParseException
+    {
+        String str = "(memberOf:1.2.840.113556.1.4.1941:=CN=\\5C23SOME,OU=Groups,OU=EMEA,DC=example,DC=net)";
+        ExtensibleNode node = ( ExtensibleNode ) FilterParser.parse( str, true );
+        assertEquals( "memberOf", node.getAttribute() );
+        assertEquals( "CN=\\23SOME,OU=Groups,OU=EMEA,DC=example,DC=net", node.getValue().getString() );
+        assertEquals( "1.2.840.113556.1.4.1941", node.getMatchingRuleId() );
+        assertFalse( node.hasDnAttributes() );
+    }
+
+
     @Test
     public void testReuseParser() throws ParseException
     {
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
index 5fd5b0a..eb2a1d9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
@@ -24,7 +24,6 @@
 
 import java.text.ParseException;
 
-import org.apache.directory.api.ldap.model.filter.FilterParser;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
index 47148b4..03860af 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
@@ -27,8 +27,6 @@
 
 import java.util.List;
 
-import org.apache.directory.api.ldap.model.filter.FilterVisitor;
-
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
