diff --git a/Changes b/Changes
index 8a924fa..a3e09db 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,9 @@
-0.64.5 2025-11-21
+0.64.5 2025-12-03
     - [maintenance] Update to Java 21 (diewald)
     - [enhancement] Alter vcNamePattern to allow system VC names with less 
       than 3 characters (margaretha)
     - [bugfix] Making totalResult counter long to prevent overflows (diewald)
+    - [bugfix] Do not allow optional Lucene Regex extensions (diewald)
 
 0.64.4 2025-09-17
     - [feature] Added --progress option to Krill-Indexer (kupietz)
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 78aab5a..82d3086 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -6,7 +6,6 @@
 import java.util.List;
 import java.util.Iterator;
 
-import org.apache.lucene.search.RegexpQuery;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
index bc3c7ff..4464302 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
@@ -11,6 +11,7 @@
 import org.apache.lucene.search.PhraseQuery;
 import org.apache.lucene.search.QueryWrapperFilter;
 import org.apache.lucene.search.RegexpQuery;
+import org.apache.lucene.util.automaton.RegExp;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -215,7 +216,7 @@
             if (this.regex)
                 return new QueryWrapperFilter(
                         new RegexpQuery(new org.apache.lucene.index.Term(
-                                this.field, this.term)));
+                                            this.field, this.term), RegExp.NONE));
 
             // Simple term
             return new TermsFilter(
diff --git a/src/main/java/de/ids_mannheim/korap/query/QueryBuilder.java b/src/main/java/de/ids_mannheim/korap/query/QueryBuilder.java
index ab69754..7eb75a6 100644
--- a/src/main/java/de/ids_mannheim/korap/query/QueryBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/query/QueryBuilder.java
@@ -34,7 +34,7 @@
 
     // This advices the java compiler to ignore all loggings
     public static final boolean DEBUG = false;
-
+   
     // <legacy>
     public static final byte OVERLAP = SpanWithinQuery.OVERLAP,
             REAL_OVERLAP = SpanWithinQuery.REAL_OVERLAP,
@@ -69,7 +69,7 @@
      * @return A {@link SpanRegexQueryWrapper} object.
      */
     public SpanRegexQueryWrapper re (String re) {
-        return new SpanRegexQueryWrapper(this.field, re, RegExp.ALL, false);
+        return new SpanRegexQueryWrapper(this.field, re);
     };
 
 
@@ -154,7 +154,7 @@
      * @return A {@link SpanRegexQueryWrapper} object.
      */
     public SpanRegexQueryWrapper re (String re, boolean caseinsensitive) {
-        return new SpanRegexQueryWrapper(this.field, re, RegExp.ALL,
+        return new SpanRegexQueryWrapper(this.field, re,
                 caseinsensitive);
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
index 9f777c0..fad96d9 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
@@ -14,8 +14,10 @@
     private SpanQuery query;
     public String error = null;
 
+    private static int regexFlag = RegExp.NONE;
+
     public SpanRegexQueryWrapper (String field, String re) {
-        this(field, re, RegExp.ALL, false);
+        this(field, re, regexFlag, false);
     };
 
 
@@ -26,7 +28,7 @@
 
     public SpanRegexQueryWrapper (String field, String re,
                                   boolean caseinsensitive) {
-        this(field, re, RegExp.ALL, caseinsensitive);
+        this(field, re, regexFlag, caseinsensitive);
     };
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionIndex.java b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionIndex.java
index bc113ef..5877547 100644
--- a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionIndex.java
@@ -172,6 +172,10 @@
 		kcn.fromBuilder(cb.re("author", ".*an.*"));
         assertEquals(2, kcn.docCount());
 
+		// No optional regex support enabled
+		kcn.fromBuilder(cb.re("author", "@an@"));
+        assertEquals(0, kcn.docCount());
+        
 		// Kultur & Reisen,
 		// Reisen & Finanzen,
 		// Nachricht & Kultur & Reisen
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
index 477be58..3a10f1b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
@@ -318,6 +318,13 @@
         srquery = new RegexpQuery(new Term("text", "s:.*ng.*"));
         assertEquals(2, searcher.search(srquery, 10).totalHits);
 
+        // All docs containing "ng"/x (optional Regex enabled by default)
+        srquery = new RegexpQuery(new Term("text", "s:@ng@"));
+        assertEquals(2, searcher.search(srquery, 10).totalHits);
+
+        // All docs containing "@ng@" (no optional query operators enabled)
+        ssrquery = new SpanRegexQueryWrapper("text", "s:@ng@");
+        assertEquals(0, searcher.search(ssrquery.toQuery(), 10).totalHits);
 
         // Check http://comments.gmane.org/gmane.comp.jakarta.lucene.user/52283
         // for Carstens question on wildcards
