diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 Usage
 -----
 
-Cgrep 6.6.10. Usage: cgrep [OPTION] [PATTERN] files...
+Cgrep 6.6.11. Usage: cgrep [OPTION] [PATTERN] files...
 
 cgrep [OPTIONS] [ITEM]
 
diff --git a/cgrep.cabal b/cgrep.cabal
--- a/cgrep.cabal
+++ b/cgrep.cabal
@@ -1,6 +1,6 @@
 Name:                cgrep
 Description:         Cgrep: a context-aware grep for source codes
-Version:             6.6.10
+Version:             6.6.11
 Synopsis:            Command line tool
 Homepage:            http://awgn.github.io/cgrep/
 License:             GPL-2
diff --git a/src/CGrep/Strategy/Cpp/Semantic.hs b/src/CGrep/Strategy/Cpp/Semantic.hs
--- a/src/CGrep/Strategy/Cpp/Semantic.hs
+++ b/src/CGrep/Strategy/Cpp/Semantic.hs
@@ -23,6 +23,7 @@
 
 import Control.Monad.Trans.Reader
 import Control.Monad.IO.Class
+import Control.Applicative (liftA2)
 import Data.List
 import Data.Function
 import Data.Maybe
@@ -76,7 +77,12 @@
     putStrLevel2 $ "multicards: " ++ show patterns'''
     putStrLevel2 $ "identif   : " ++ show identif
 
-    runQuickSearch filename (quickSearch opt (map C.pack identif) text') $ do
+    let text'' = contextFilter (getFileLang opt filename) filt text'
+        idpack = map C.pack identif
+        quick1 = quickSearch opt idpack text'
+        quick2 = quickSearch opt idpack text''
+
+    runQuickSearch filename (liftA2 (&&) quick1 quick2) $ do
 
         let [text''', _ , _] = scanr ($) text'  [ expandMultiline opt
                                                 , contextFilter (getFileLang opt filename) filt
diff --git a/src/CGrep/Strategy/Generic/Semantic.hs b/src/CGrep/Strategy/Generic/Semantic.hs
--- a/src/CGrep/Strategy/Generic/Semantic.hs
+++ b/src/CGrep/Strategy/Generic/Semantic.hs
@@ -29,6 +29,7 @@
 import CGrep.Parser.Token
 import CGrep.Parser.WildCard
 
+import Control.Applicative (liftA2)
 import Control.Monad.Trans.Reader
 import Control.Monad.IO.Class
 
@@ -52,7 +53,6 @@
     -- transform text
 
     let text' = ignoreCase opt text
-
         filt  = (mkContextFilter opt) { getFilterComment = False }
 
     -- pre-process patterns
@@ -63,7 +63,7 @@
 
     -- quickSearch ...
 
-        ps' = mapMaybe (\x -> case x of
+        identif = mapMaybe (\x -> case x of
                             TokenCard (Generic.TokenLiteral xs _) -> Just (rmQuote $ trim xs)
                             TokenCard (Generic.TokenAlpha "OR" _) -> Nothing
                             TokenCard t                           -> Just (tkToString t)
@@ -75,18 +75,18 @@
     putStrLevel1 $ "strategy  : running generic semantic search on " ++ filename ++ "..."
     putStrLevel2 $ "wildcards : " ++ show patterns'
     putStrLevel2 $ "multicards: " ++ show patterns''
-    putStrLevel2 $ "identif   : " ++ show ps'
-
-
-    runQuickSearch filename (quickSearch opt (map C.pack ps') text') $ do
+    putStrLevel2 $ "identif   : " ++ show identif
 
-        -- context filter
+    let text'' = contextFilter (getFileLang opt filename) filt text'
+        idpack = map C.pack identif
+        quick1 = quickSearch opt idpack text'
+        quick2 = quickSearch opt idpack text''
 
-        let text'' = contextFilter (getFileLang opt filename) filt text'
+    runQuickSearch filename (liftA2 (&&) quick1 quick2) $ do
 
         -- expand multi-line
 
-            text''' = expandMultiline opt text''
+        let text''' = expandMultiline opt text''
 
         -- parse source code, get the Generic.Token list...
 
