diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
index 6a40e00..f89eca0 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
@@ -54,9 +54,6 @@
     protected static final char CHAR_R = 'R';
     protected static final char CHAR_CLOSE = ')';
     protected static final char CHAR_OPEN = '(';
-    protected static final char CHAR_COMMA = ',';
-    protected static final char CHAR_DOT = '.';
-    protected static final char CHAR_HYPEN = '-';
 
     public State() {}
 
@@ -123,10 +120,8 @@
 
     static boolean isAllowedWord(final char character) {
       return Character.isUnicodeIdentifierStart(character)
-          || Character.DASH_PUNCTUATION == Character.getType(character)
-          || Character.DECIMAL_DIGIT_NUMBER == Character.getType(character) 
-          || (Character.OTHER_PUNCTUATION == Character.getType(character) && 
-          (character != ';' && character != '"'));
+          || isUnreserved(character)
+          || isOtherDelimsForWord(character);
     }
     
     /**
@@ -207,6 +202,26 @@
     }
 
     /**
+     * other-delims = "!" / "(" / ")" / "*" / "+" / "," / ";"
+     * @param character which is checked
+     * @return true if character is allowed
+     */
+    private static boolean isOtherDelimsForWord(final char character) {
+      return character == '!'
+          || character == '*'
+          || character == '+'
+          || character == ','
+          || character == ':'
+          || character == '@'
+          || character == '/'
+          || character == '?'
+          || character == '$'
+          || character == '='
+          || character == '%'
+          || character == '\'';
+    }
+    
+    /**
      * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
      * @param character which is checked
      * @return true if character is allowed
@@ -352,11 +367,7 @@
 
     @Override
     public State nextChar(final char c) throws SearchTokenizerException {
-      if (isAllowedWord(c) ||
-          ('0' <= c && c <= '9') ||
-          (c == CHAR_COMMA) ||
-          (c == CHAR_DOT) ||
-          (c == CHAR_HYPEN)) {
+      if (isAllowedWord(c)) {
         return allowed(c);
       } else if (c == CHAR_CLOSE) {
         finish();
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
index 216323d..47ac334 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
@@ -45,6 +45,7 @@
 
   @Test
   public void parseWords() throws Exception {
+    assertQuery("C++%20=$@:,*!/?'%27").resultsIn(WORD);
     assertQuery("somesimpleword").resultsIn(WORD);
     assertQuery("anotherWord\u1234").resultsIn(WORD);
     // special
