diff --git a/lib/Doctrine/ORM/Query/Lexer.php b/lib/Doctrine/ORM/Query/Lexer.php
index f3cc6713906dcfb7a07342b1c52d100b5c3457d3..7e015a5aadaebaf5216a0af42b27d899dd2a9ad3 100644
--- a/lib/Doctrine/ORM/Query/Lexer.php
+++ b/lib/Doctrine/ORM/Query/Lexer.php
@@ -34,6 +34,63 @@ namespace Doctrine\ORM\Query;
  */
 class Lexer
 {
+    const T_NONE                = 1;
+    const T_IDENTIFIER          = 2;
+    const T_INTEGER             = 3;
+    const T_STRING              = 4;
+    const T_INPUT_PARAMETER     = 5;
+    const T_FLOAT               = 6;
+
+    const T_ALL                 = 101;
+    const T_AND                 = 102;
+    const T_ANY                 = 103;
+    const T_AS                  = 104;
+    const T_ASC                 = 105;
+    const T_AVG                 = 106;
+    const T_BETWEEN             = 107;
+    const T_BY                  = 108;
+    const T_COMMA				= 109;
+    const T_COUNT               = 110;
+    const T_DELETE              = 111;
+    const T_DESC                = 112;
+    const T_DISTINCT            = 113;
+    const T_DOT                 = 114;
+    const T_ESCAPE              = 115;
+    const T_EXISTS              = 116;
+    const T_FROM                = 117;
+    const T_GROUP               = 118;
+    const T_HAVING              = 119;
+    const T_IN                  = 120;
+    const T_INDEX               = 121;
+    const T_INNER               = 122;
+    const T_IS                  = 123;
+    const T_JOIN                = 124;
+    const T_LEFT                = 125;
+    const T_LIKE                = 126;
+    const T_LIMIT               = 127;
+    const T_MAX                 = 128;
+    const T_MIN                 = 129;
+    const T_MOD                 = 130;
+    const T_NOT                 = 131;
+    const T_NULL                = 132;
+    const T_OFFSET              = 133;
+    const T_ON                  = 134;
+    const T_OR                  = 135;
+    const T_ORDER               = 136;
+    const T_OUTER               = 137;
+    const T_SELECT              = 138;
+    const T_SET                 = 139;
+    const T_SIZE                = 140;
+    const T_SOME                = 141;
+    const T_SUM                 = 142;
+    const T_UPDATE              = 143;
+    const T_WHERE               = 144;
+    const T_WITH                = 145;
+    const T_TRUE                = 146;
+    const T_FALSE               = 147;
+
+    private $_keywordsTable;
+
     /**
      * Array of scanned tokens.
      *
@@ -134,7 +191,7 @@ class Lexer
      */
     public function _checkLiteral($identifier)
     {
-        $name = 'Doctrine\ORM\Query\Token::T_' . strtoupper($identifier);
+        $name = 'Doctrine\ORM\Query\Lexer::T_' . strtoupper($identifier);
 
         if (defined($name)) {
             $type = constant($name);
@@ -144,7 +201,7 @@ class Lexer
             }
         }
 
-        return Token::T_IDENTIFIER;
+        return self::T_IDENTIFIER;
     }
 
     /**
@@ -187,23 +244,23 @@ class Lexer
     {
         // $value is referenced because it can be changed if it is numeric.
         // [TODO] Revisit the _isNumeric and _getNumeric methods to reduce overhead.
-        $type = Token::T_NONE;
+        $type = self::T_NONE;
 
         $newVal = $this->_getNumeric($value);
         if ($newVal !== false){
             $value = $newVal;
             if (strpos($value, '.') !== false || stripos($value, 'e') !== false) {
-                $type = Token::T_FLOAT;
+                $type = self::T_FLOAT;
             } else {
-                $type = Token::T_INTEGER;
+                $type = self::T_INTEGER;
             }
         }
         if ($value[0] === "'" && $value[strlen($value) - 1] === "'") {
-            $type = Token::T_STRING;
+            $type = self::T_STRING;
         } else if (ctype_alpha($value[0]) || $value[0] === '_') {
             $type = $this->_checkLiteral($value);
         } else if ($value[0] === '?' || $value[0] === ':') {
-            $type = Token::T_INPUT_PARAMETER;
+            $type = self::T_INPUT_PARAMETER;
         }
 
         return $type;
@@ -289,4 +346,65 @@ class Lexer
     {
         $this->_position = $position;
     }
+
+    private function _addKeyword($token, $value)
+    {
+        $this->_keywordsTable[$token] = $value;
+    }
+
+    public function getLiteral($token)
+    {
+        if ( ! $this->_keywordsTable) {
+            $this->_addKeyword(self::T_ALL, "ALL");
+            $this->_addKeyword(self::T_AND, "AND");
+            $this->_addKeyword(self::T_ANY, "ANY");
+            $this->_addKeyword(self::T_AS, "AS");
+            $this->_addKeyword(self::T_ASC, "ASC");
+            $this->_addKeyword(self::T_AVG, "AVG");
+            $this->_addKeyword(self::T_BETWEEN, "BETWEEN");
+            $this->_addKeyword(self::T_BY, "BY");
+            $this->_addKeyword(self::T_COMMA, ",");
+            $this->_addKeyword(self::T_COUNT, "COUNT");
+            $this->_addKeyword(self::T_DELETE, "DELETE");
+            $this->_addKeyword(self::T_DESC, "DESC");
+            $this->_addKeyword(self::T_DISTINCT, "DISTINCT");
+            $this->_addKeyword(self::T_DOT, ".");
+            $this->_addKeyword(self::T_ESCAPE, "ESPACE");
+            $this->_addKeyword(self::T_EXISTS, "EXISTS");
+            $this->_addKeyword(self::T_FALSE, "FALSE");
+            $this->_addKeyword(self::T_FROM, "FROM");
+            $this->_addKeyword(self::T_GROUP, "GROUP");
+            $this->_addKeyword(self::T_HAVING, "HAVING");
+            $this->_addKeyword(self::T_IN, "IN");
+            $this->_addKeyword(self::T_INDEX, "INDEX");
+            $this->_addKeyword(self::T_INNER, "INNER");
+            $this->_addKeyword(self::T_IS, "IS");
+            $this->_addKeyword(self::T_JOIN, "JOIN");
+            $this->_addKeyword(self::T_LEFT, "LEFT");
+            $this->_addKeyword(self::T_LIKE, "LIKE");
+            $this->_addKeyword(self::T_LIMIT, "LIMIT");
+            $this->_addKeyword(self::T_MAX, "MAX");
+            $this->_addKeyword(self::T_MIN, "MIN");
+            $this->_addKeyword(self::T_MOD, "MOD");
+            $this->_addKeyword(self::T_NOT, "NOT");
+            $this->_addKeyword(self::T_NULL, "NULL");
+            $this->_addKeyword(self::T_OFFSET, "OFFSET");
+            $this->_addKeyword(self::T_ON, "ON");
+            $this->_addKeyword(self::T_OR, "OR");
+            $this->_addKeyword(self::T_ORDER, "ORDER");
+            $this->_addKeyword(self::T_OUTER, "OUTER");
+            $this->_addKeyword(self::T_SELECT, "SELECT");
+            $this->_addKeyword(self::T_SET, "SET");
+            $this->_addKeyword(self::T_SIZE, "SIZE");
+            $this->_addKeyword(self::T_SOME, "SOME");
+            $this->_addKeyword(self::T_SUM, "SUM");
+            $this->_addKeyword(self::T_TRUE, "TRUE");
+            $this->_addKeyword(self::T_UPDATE, "UPDATE");
+            $this->_addKeyword(self::T_WHERE, "WHERE");
+            $this->_addKeyword(self::T_WITH, "WITH");
+        }
+        return isset($this->_keywordsTable[$token])
+                ? $this->_keywordsTable[$token]
+                : (is_string($token) ? $token : '');
+    }
 }
\ No newline at end of file
diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php
index e1d0b256098e7a4e171f001ba4ef2fee263d69c5..5ae60bfe1c21923ea6e139c2a19ed95c9ec4d29d 100644
--- a/lib/Doctrine/ORM/Query/Parser.php
+++ b/lib/Doctrine/ORM/Query/Parser.php
@@ -68,13 +68,6 @@ class Parser
      * @var Doctrine_ORM_Query_ParserResult
      */
     protected $_parserResult;
-
-    /**
-     * Keyword symbol table
-     *
-     * @var Token
-     */
-    protected $_keywordTable;
     
     /**
      * The EntityManager.
@@ -93,7 +86,6 @@ class Parser
     {
         $this->_em = $query->getEntityManager();
         $this->_lexer = new Lexer($query->getDql());
-        $this->_keywordTable = new Token();
         
         $defaultQueryComponent = ParserRule::DEFAULT_QUERYCOMPONENT;
 
@@ -136,7 +128,7 @@ class Parser
 
         if ( ! $isMatch) {
             // No definition for value checking.
-            $this->syntaxError($this->_keywordTable->getLiteral($token));
+            $this->syntaxError($this->_lexer->getLiteral($token));
         }
 
         $this->_lexer->next();
@@ -320,7 +312,7 @@ class Parser
     {
         $la = $this->_lexer->lookahead;
         $next = $this->_lexer->glimpse();
-        return ($la['value'] === '(' && $next['type'] === Token::T_SELECT);
+        return ($la['value'] === '(' && $next['type'] === Lexer::T_SELECT);
     }
 
     /* Parse methods */
@@ -334,15 +326,15 @@ class Parser
     {
         $this->_lexer->next();
         switch ($this->_lexer->lookahead['type']) {
-            case Token::T_SELECT:
+            case Lexer::T_SELECT:
                 return $this->_SelectStatement();
                 break;
 
-            case Token::T_UPDATE:
+            case Lexer::T_UPDATE:
                 return $this->_UpdateStatement();
                 break;
 
-            case Token::T_DELETE:
+            case Lexer::T_DELETE:
                 return $this->_DeleteStatement();
                 break;
 
@@ -363,16 +355,16 @@ class Parser
         $fromClause = $this->_FromClause();
         $this->_processPendingPathExpressionsInSelect();
 
-        $whereClause = $this->_lexer->isNextToken(Token::T_WHERE) ?
+        $whereClause = $this->_lexer->isNextToken(Lexer::T_WHERE) ?
                 $this->_WhereClause() : null;
 
-        $groupByClause = $this->_lexer->isNextToken(Token::T_GROUP) ?
+        $groupByClause = $this->_lexer->isNextToken(Lexer::T_GROUP) ?
                 $this->_GroupByClause() : null;
 
-        $havingClause = $this->_lexer->isNextToken(Token::T_HAVING) ?
+        $havingClause = $this->_lexer->isNextToken(Lexer::T_HAVING) ?
                 $this->_HavingClause() : null;
 
-        $orderByClause = $this->_lexer->isNextToken(Token::T_ORDER) ?
+        $orderByClause = $this->_lexer->isNextToken(Lexer::T_ORDER) ?
                 $this->_OrderByClause() : null;
 
         return new AST\SelectStatement(
@@ -451,11 +443,11 @@ class Parser
     private function _SelectClause()
     {
         $isDistinct = false;
-        $this->match(Token::T_SELECT);
+        $this->match(Lexer::T_SELECT);
 
         // Inspecting if we are in a DISTINCT query
-        if ($this->_lexer->isNextToken(Token::T_DISTINCT)) {
-            $this->match(Token::T_DISTINCT);
+        if ($this->_lexer->isNextToken(Lexer::T_DISTINCT)) {
+            $this->match(Lexer::T_DISTINCT);
             $isDistinct = true;
         }
 
@@ -475,7 +467,7 @@ class Parser
      */
     private function _FromClause()
     {
-        $this->match(Token::T_FROM);
+        $this->match(Lexer::T_FROM);
         $identificationVariableDeclarations = array();
         $identificationVariableDeclarations[] = $this->_IdentificationVariableDeclaration();
         while ($this->_lexer->isNextToken(',')) {
@@ -497,14 +489,14 @@ class Parser
         $fieldIdentificationVariable = null;
         $peek = $this->_lexer->glimpse();
         // First we recognize for an IdentificationVariable (DQL class alias)
-        if ($peek['value'] != '.' && $this->_lexer->lookahead['type'] === Token::T_IDENTIFIER) {
+        if ($peek['value'] != '.' && $this->_lexer->lookahead['type'] === Lexer::T_IDENTIFIER) {
             $expression = $this->_IdentificationVariable();
         } else if (($isFunction = $this->_isFunction()) !== false || $this->_isSubselect()) {
             $expression = $isFunction ? $this->_AggregateExpression() : $this->_Subselect();
-            if ($this->_lexer->isNextToken(Token::T_AS)) {
-                $this->match(Token::T_AS);
+            if ($this->_lexer->isNextToken(Lexer::T_AS)) {
+                $this->match(Lexer::T_AS);
                 $fieldIdentificationVariable = $this->_FieldAliasIdentificationVariable();
-            } elseif ($this->_lexer->isNextToken(Token::T_IDENTIFIER)) {
+            } elseif ($this->_lexer->isNextToken(Lexer::T_IDENTIFIER)) {
                 $fieldIdentificationVariable = $this->_FieldAliasIdentificationVariable();
             }
         } else {
@@ -519,7 +511,7 @@ class Parser
      */
     private function _IdentificationVariable()
     {
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         return $this->_lexer->token['value'];
     }
 
@@ -529,13 +521,13 @@ class Parser
     private function _IdentificationVariableDeclaration()
     {
         $rangeVariableDeclaration = $this->_RangeVariableDeclaration();
-        $indexBy = $this->_lexer->isNextToken(Token::T_INDEX) ?
+        $indexBy = $this->_lexer->isNextToken(Lexer::T_INDEX) ?
                 $this->_IndexBy() : null;
         $joinVariableDeclarations = array();
         while (
-            $this->_lexer->isNextToken(Token::T_LEFT) ||
-            $this->_lexer->isNextToken(Token::T_INNER) ||
-            $this->_lexer->isNextToken(Token::T_JOIN)
+            $this->_lexer->isNextToken(Lexer::T_LEFT) ||
+            $this->_lexer->isNextToken(Lexer::T_INNER) ||
+            $this->_lexer->isNextToken(Lexer::T_JOIN)
         ) {
             $joinVariableDeclarations[] = $this->_JoinVariableDeclaration();
         }
@@ -552,8 +544,8 @@ class Parser
     {
         $abstractSchemaName = $this->_AbstractSchemaName();
 
-        if ($this->_lexer->isNextToken(Token::T_AS)) {
-            $this->match(Token::T_AS);
+        if ($this->_lexer->isNextToken(Lexer::T_AS)) {
+            $this->match(Lexer::T_AS);
         }
         $aliasIdentificationVariable = $this->_AliasIdentificationVariable();
         $classMetadata = $this->_em->getClassMetadata($abstractSchemaName);
@@ -578,7 +570,7 @@ class Parser
      */
     private function _AbstractSchemaName()
     {
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         return $this->_lexer->token['value'];
     }
 
@@ -587,7 +579,7 @@ class Parser
      */
     private function _AliasIdentificationVariable()
     {
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         return $this->_lexer->token['value'];
     }
 
@@ -596,11 +588,11 @@ class Parser
      */
     private function _PathExpression()
     {
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         $parts = array($this->_lexer->token['value']);
         while ($this->_lexer->isNextToken('.')) {
             $this->match('.');
-            $this->match(Token::T_IDENTIFIER);
+            $this->match(Lexer::T_IDENTIFIER);
             $parts[] = $this->_lexer->token['value'];
         }
         $pathExpression = new AST\PathExpression($parts);
@@ -625,7 +617,7 @@ class Parser
     private function _JoinVariableDeclaration()
     {
         $join = $this->_Join();
-        $indexBy = $this->_lexer->isNextToken(Token::T_INDEX) ?
+        $indexBy = $this->_lexer->isNextToken(Lexer::T_INDEX) ?
                 $this->_IndexBy() : null;
         return new AST\JoinVariableDeclaration($join, $indexBy);
     }
@@ -638,24 +630,24 @@ class Parser
     {
         // Check Join type
         $joinType = AST\Join::JOIN_TYPE_INNER;
-        if ($this->_lexer->isNextToken(Token::T_LEFT)) {
-            $this->match(Token::T_LEFT);
+        if ($this->_lexer->isNextToken(Lexer::T_LEFT)) {
+            $this->match(Lexer::T_LEFT);
             // Possible LEFT OUTER join
-            if ($this->_lexer->isNextToken(Token::T_OUTER)) {
-                $this->match(Token::T_OUTER);
+            if ($this->_lexer->isNextToken(Lexer::T_OUTER)) {
+                $this->match(Lexer::T_OUTER);
                 $joinType = AST\Join::JOIN_TYPE_LEFTOUTER;
             } else {
                 $joinType = AST\Join::JOIN_TYPE_LEFT;
             }
-        } else if ($this->_lexer->isNextToken(Token::T_INNER)) {
-            $this->match(Token::T_INNER);
+        } else if ($this->_lexer->isNextToken(Lexer::T_INNER)) {
+            $this->match(Lexer::T_INNER);
         }
 
-        $this->match(Token::T_JOIN);
+        $this->match(Lexer::T_JOIN);
 
         $joinPathExpression = $this->_JoinPathExpression();
-        if ($this->_lexer->isNextToken(Token::T_AS)) {
-            $this->match(Token::T_AS);
+        if ($this->_lexer->isNextToken(Lexer::T_AS)) {
+            $this->match(Lexer::T_AS);
         }
 
         $aliasIdentificationVariable = $this->_AliasIdentificationVariable();
@@ -686,14 +678,14 @@ class Parser
 
         // Check Join where type
         if (
-            $this->_lexer->isNextToken(Token::T_ON) ||
-            $this->_lexer->isNextToken(Token::T_WITH)
+            $this->_lexer->isNextToken(Lexer::T_ON) ||
+            $this->_lexer->isNextToken(Lexer::T_WITH)
         ) {
-            if ($this->_lexer->isNextToken(Token::T_ON)) {
-                $this->match(Token::T_ON);
+            if ($this->_lexer->isNextToken(Lexer::T_ON)) {
+                $this->match(Lexer::T_ON);
                 $join->setWhereType(AST\Join::JOIN_WHERE_ON);
             } else {
-                $this->match(Token::T_WITH);
+                $this->match(Lexer::T_WITH);
             }
             $join->setConditionalExpression($this->_ConditionalExpression());
         }
@@ -738,7 +730,7 @@ class Parser
     {
         $identificationVariable = $this->_IdentificationVariable();
         $this->match('.');
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         $assocField = $this->_lexer->token['value'];
         return new AST\JoinPathExpression(
             $identificationVariable, $assocField
@@ -750,8 +742,8 @@ class Parser
      */
     private function _IndexBy()
     {
-        $this->match(Token::T_INDEX);
-        $this->match(Token::T_BY);
+        $this->match(Lexer::T_INDEX);
+        $this->match(Lexer::T_BY);
         $pathExp = $this->_SimpleStateFieldPathExpression();
         // Add the INDEX BY info to the query component
         $qComp = $this->_parserResult->getQueryComponent($pathExp->getIdentificationVariable());
@@ -767,7 +759,7 @@ class Parser
     {
         $identificationVariable = $this->_IdentificationVariable();
         $this->match('.');
-        $this->match(Token::T_IDENTIFIER);
+        $this->match(Lexer::T_IDENTIFIER);
         $simpleStateField = $this->_lexer->token['value'];
         return new AST\SimpleStateFieldPathExpression($identificationVariable, $simpleStateField);
     }
@@ -830,19 +822,19 @@ class Parser
     {
         $isDistinct = false;
         $functionName = '';
-        if ($this->_lexer->isNextToken(Token::T_COUNT)) {
-            $this->match(Token::T_COUNT);
+        if ($this->_lexer->isNextToken(Lexer::T_COUNT)) {
+            $this->match(Lexer::T_COUNT);
             $functionName = $this->_lexer->token['value'];
             $this->match('(');
-            if ($this->_lexer->isNextToken(Token::T_DISTINCT)) {
-                $this->match(Token::T_DISTINCT);
+            if ($this->_lexer->isNextToken(Lexer::T_DISTINCT)) {
+                $this->match(Lexer::T_DISTINCT);
                 $isDistinct = true;
             }
             // For now we only support a PathExpression here...
             $pathExp = $this->_PathExpression();
             $this->match(')');
-        } else if ($this->_lexer->isNextToken(Token::T_AVG)) {
-            $this->match(Token::T_AVG);
+        } else if ($this->_lexer->isNextToken(Lexer::T_AVG)) {
+            $this->match(Lexer::T_AVG);
             $functionName = $this->_lexer->token['value'];
             $this->match('(');
             //...
@@ -858,8 +850,8 @@ class Parser
      */
     private function _GroupByClause()
     {
-        $this->match(Token::T_GROUP);
-        $this->match(Token::T_BY);
+        $this->match(Lexer::T_GROUP);
+        $this->match(Lexer::T_BY);
         $groupByItems = array();
         $groupByItems[] = $this->_PathExpression();
         while ($this->_lexer->isNextToken(',')) {
@@ -874,7 +866,7 @@ class Parser
      */
     private function _WhereClause()
     {
-        $this->match(Token::T_WHERE);
+        $this->match(Lexer::T_WHERE);
         return new AST\WhereClause($this->_ConditionalExpression());
     }
 
@@ -885,8 +877,8 @@ class Parser
     {
         $conditionalTerms = array();
         $conditionalTerms[] = $this->_ConditionalTerm();
-        while ($this->_lexer->isNextToken(Token::T_OR)) {
-            $this->match(Token::T_OR);
+        while ($this->_lexer->isNextToken(Lexer::T_OR)) {
+            $this->match(Lexer::T_OR);
             $conditionalTerms[] = $this->_ConditionalTerm();
         }
         return new AST\ConditionalExpression($conditionalTerms);
@@ -899,8 +891,8 @@ class Parser
     {
         $conditionalFactors = array();
         $conditionalFactors[] = $this->_ConditionalFactor();
-        while ($this->_lexer->isNextToken(Token::T_AND)) {
-            $this->match(Token::T_AND);
+        while ($this->_lexer->isNextToken(Lexer::T_AND)) {
+            $this->match(Lexer::T_AND);
             $conditionalFactors[] = $this->_ConditionalFactor();
         }
         return new AST\ConditionalTerm($conditionalFactors);
@@ -912,8 +904,8 @@ class Parser
     private function _ConditionalFactor()
     {
         $not = false;
-        if ($this->_lexer->isNextToken(Token::T_NOT)) {
-            $this->match(Token::T_NOT);
+        if ($this->_lexer->isNextToken(Lexer::T_NOT)) {
+            $this->match(Lexer::T_NOT);
             $not = true;
         }
         return new AST\ConditionalFactor($this->_ConditionalPrimary(), $not);
@@ -963,17 +955,17 @@ class Parser
      */
     private function _SimpleConditionalExpression()
     {
-        if ($this->_lexer->isNextToken(Token::T_NOT)) {
+        if ($this->_lexer->isNextToken(Lexer::T_NOT)) {
             $token = $this->_lexer->glimpse();
         } else {
             $token = $this->_lexer->lookahead;
         }
-        if ($token['type'] === Token::T_EXISTS) {
+        if ($token['type'] === Lexer::T_EXISTS) {
             return $this->_ExistsExpression();
         }
 
         $stateFieldPathExpr = false;
-        if ($token['type'] === Token::T_IDENTIFIER) {
+        if ($token['type'] === Lexer::T_IDENTIFIER) {
             // Peek beyond the PathExpression
             $stateFieldPathExpr = true;
             $peek = $this->_lexer->peek();
@@ -987,15 +979,15 @@ class Parser
 
         if ($stateFieldPathExpr) {
             switch ($token['type']) {
-                case Token::T_BETWEEN:
+                case Lexer::T_BETWEEN:
                     return $this->_BetweenExpression();
-                case Token::T_LIKE:
+                case Lexer::T_LIKE:
                     return $this->_LikeExpression();
-                case Token::T_IN:
+                case Lexer::T_IN:
                     return $this->_InExpression();
-                case Token::T_IS:
+                case Lexer::T_IS:
                     return $this->_NullComparisonExpression();
-                case Token::T_NONE:
+                case Lexer::T_NONE:
                     return $this->_ComparisonExpression();
                 default:
                     $this->syntaxError();
@@ -1004,10 +996,10 @@ class Parser
             return $this->_ComparisonExpression();
         } else {
             switch ($token['type']) {
-                case Token::T_INTEGER:
+                case Lexer::T_INTEGER:
                     // IF it turns out its a ComparisonExpression, then it MUST be ArithmeticExpression
                     break;
-                case Token::T_STRING:
+                case Lexer::T_STRING:
                     // IF it turns out its a ComparisonExpression, then it MUST be StringExpression
                     break;
                 default:
@@ -1024,9 +1016,9 @@ class Parser
     {
         $leftExpr = $this->_ArithmeticExpression();
         $operator = $this->_ComparisonOperator();
-        if ($this->_lexer->lookahead['type'] === Token::T_ALL ||
-                $this->_lexer->lookahead['type'] === Token::T_ANY ||
-                $this->_lexer->lookahead['type'] === Token::T_SOME) {
+        if ($this->_lexer->lookahead['type'] === Lexer::T_ALL ||
+                $this->_lexer->lookahead['type'] === Lexer::T_ANY ||
+                $this->_lexer->lookahead['type'] === Lexer::T_SOME) {
             $rightExpr = $this->_QuantifiedExpression();
         } else {
             $rightExpr = $this->_ArithmeticExpression();
@@ -1042,7 +1034,7 @@ class Parser
         $expr = new AST\ArithmeticExpression;
         if ($this->_lexer->lookahead['value'] === '(') {
             $peek = $this->_lexer->glimpse();
-            if ($peek['type'] === Token::T_SELECT) {
+            if ($peek['type'] === Lexer::T_SELECT) {
                 $expr->setSubselect($this->_Subselect());
                 return $expr;
             }
@@ -1117,7 +1109,7 @@ class Parser
             return $expr;
         }
         switch ($this->_lexer->lookahead['type']) {
-            case Token::T_IDENTIFIER:
+            case Lexer::T_IDENTIFIER:
                 $peek = $this->_lexer->glimpse();
                 if ($peek['value'] == '(') {
                     if ($this->_isAggregateFunction($peek['type'])) {
@@ -1126,12 +1118,12 @@ class Parser
                     return $this->_FunctionsReturningStrings();
                 }
                 return $this->_StateFieldPathExpression();
-            case Token::T_INPUT_PARAMETER:
+            case Lexer::T_INPUT_PARAMETER:
                 $this->match($this->_lexer->lookahead['value']);
                 return new AST\InputParameter($this->_lexer->token['value']);
-            case Token::T_STRING:
-            case Token::T_INTEGER:
-            case Token::T_FLOAT:
+            case Lexer::T_STRING:
+            case Lexer::T_INTEGER:
+            case Lexer::T_FLOAT:
                 $this->match($this->_lexer->lookahead['value']);
                 return $this->_lexer->token['value'];
             default:
@@ -1177,11 +1169,11 @@ class Parser
     private function _isAggregateFunction($tokenType)
     {
         switch ($tokenType) {
-            case Token::T_AVG:
-            case Token::T_MIN:
-            case Token::T_MAX:
-            case Token::T_SUM:
-            case Token::T_COUNT:
+            case Lexer::T_AVG:
+            case Lexer::T_MIN:
+            case Lexer::T_MAX:
+            case Lexer::T_SUM:
+            case Lexer::T_COUNT:
                 return true;
             default:
                 return false;
@@ -1233,18 +1225,18 @@ class Parser
     {
         $stringExpr = $this->_StringExpression();
         $isNot = false;
-        if ($this->_lexer->lookahead['type'] === Token::T_NOT) {
-            $this->match(Token::T_NOT);
+        if ($this->_lexer->lookahead['type'] === Lexer::T_NOT) {
+            $this->match(Lexer::T_NOT);
             $isNot = true;
         }
-        $this->match(Token::T_LIKE);
-        $this->match(Token::T_STRING);
+        $this->match(Lexer::T_LIKE);
+        $this->match(Lexer::T_STRING);
         $stringPattern = $this->_lexer->token['value'];
         $escapeChar = null;
-        if ($this->_lexer->lookahead['type'] === Token::T_ESCAPE) {
-            $this->match(Token::T_ESCAPE);
+        if ($this->_lexer->lookahead['type'] === Lexer::T_ESCAPE) {
+            $this->match(Lexer::T_ESCAPE);
             var_dump($this->_lexer->lookahead);
-            //$this->match(Token::T_)
+            //$this->match(Lexer::T_)
             //$escapeChar =
         }
         return new AST\LikeExpression($stringExpr, $stringPattern, $isNot, $escapeChar);
@@ -1257,7 +1249,7 @@ class Parser
     {
         if ($this->_lexer->lookahead['value'] === '(') {
             $peek = $this->_lexer->glimpse();
-            if ($peek['type'] === Token::T_SELECT) {
+            if ($peek['type'] === Lexer::T_SELECT) {
                 return $this->_Subselect();
             }
         }
@@ -1269,7 +1261,7 @@ class Parser
      */
     private function _StringPrimary()
     {
-        if ($this->_lexer->lookahead['type'] === Token::T_IDENTIFIER) {
+        if ($this->_lexer->lookahead['type'] === Lexer::T_IDENTIFIER) {
             $peek = $this->_lexer->glimpse();
             if ($peek['value'] == '.') {
                 return $this->_StateFieldPathExpression();
@@ -1278,9 +1270,9 @@ class Parser
             } else {
                 $this->syntaxError("'.' or '('");
             }
-        } else if ($this->_lexer->lookahead['type'] === Token::T_STRING) {
+        } else if ($this->_lexer->lookahead['type'] === Lexer::T_STRING) {
             //TODO...
-        } else if ($this->_lexer->lookahead['type'] === Token::T_INPUT_PARAMETER) {
+        } else if ($this->_lexer->lookahead['type'] === Lexer::T_INPUT_PARAMETER) {
             //TODO...
         } else {
             $this->syntaxError('StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression');
diff --git a/lib/Doctrine/ORM/Query/Token.php b/lib/Doctrine/ORM/Query/Token.php
deleted file mode 100644
index ea886416dae8bfccb90d513ae9bb2445b5dbee36..0000000000000000000000000000000000000000
--- a/lib/Doctrine/ORM/Query/Token.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-/*
- *  $Id$
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many individuals
- * and is licensed under the LGPL. For more information, see
- * <http://www.phpdoctrine.org>.
- */
-
-namespace Doctrine\ORM\Query;
-
-/**
- * Container for token type constants of Doctrine Query Language.
- *
- * @author      Guilherme Blanco <guilhermeblanco@hotmail.com>
- * @author      Janne Vanhala <jpvanhal@cc.hut.fi>
- * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link        http://www.phpdoctrine.org
- * @since       2.0
- * @version     $Revision$
- */
-final class Token
-{
-    const T_NONE                = 1;
-    const T_IDENTIFIER          = 2;
-    const T_INTEGER             = 3;
-    const T_STRING              = 4;
-    const T_INPUT_PARAMETER     = 5;
-    const T_FLOAT               = 6;
-
-    const T_ALL                 = 101;
-    const T_AND                 = 102;
-    const T_ANY                 = 103;
-    const T_AS                  = 104;
-    const T_ASC                 = 105;
-    const T_AVG                 = 106;
-    const T_BETWEEN             = 107;
-    const T_BY                  = 108;
-    const T_COMMA				= 109;
-    const T_COUNT               = 110;
-    const T_DELETE              = 111;
-    const T_DESC                = 112;
-    const T_DISTINCT            = 113;
-    const T_DOT                 = 114;
-    const T_ESCAPE              = 115;
-    const T_EXISTS              = 116;
-    const T_FROM                = 117;
-    const T_GROUP               = 118;
-    const T_HAVING              = 119;
-    const T_IN                  = 120;
-    const T_INDEX               = 121;
-    const T_INNER               = 122;
-    const T_IS                  = 123;
-    const T_JOIN                = 124;
-    const T_LEFT                = 125;
-    const T_LIKE                = 126;
-    const T_LIMIT               = 127;
-    const T_MAX                 = 128;
-    const T_MIN                 = 129;
-    const T_MOD                 = 130;
-    const T_NOT                 = 131;
-    const T_NULL                = 132;
-    const T_OFFSET              = 133;
-    const T_ON                  = 134;
-    const T_OR                  = 135;
-    const T_ORDER               = 136;
-    const T_OUTER               = 137;
-    const T_SELECT              = 138;
-    const T_SET                 = 139;
-    const T_SIZE                = 140;
-    const T_SOME                = 141;
-    const T_SUM                 = 142;
-    const T_UPDATE              = 143;
-    const T_WHERE               = 144;
-    const T_WITH                = 145;
-    const T_TRUE                = 146;
-    const T_FALSE               = 147;
-
-    protected $_keywordsTable;
-
-    public function __construct()
-    {
-    }
-
-    protected function addKeyword($token, $value)
-    {
-        $this->_keywordsTable[$token] = $value;
-    }
-
-    public function getLiteral($token)
-    {
-        if ( ! $this->_keywordsTable) {
-            $this->addKeyword(self::T_ALL, "ALL");
-            $this->addKeyword(self::T_AND, "AND");
-            $this->addKeyword(self::T_ANY, "ANY");
-            $this->addKeyword(self::T_AS, "AS");
-            $this->addKeyword(self::T_ASC, "ASC");
-            $this->addKeyword(self::T_AVG, "AVG");
-            $this->addKeyword(self::T_BETWEEN, "BETWEEN");
-            $this->addKeyword(self::T_BY, "BY");
-            $this->addKeyword(self::T_COMMA, ",");
-            $this->addKeyword(self::T_COUNT, "COUNT");
-            $this->addKeyword(self::T_DELETE, "DELETE");
-            $this->addKeyword(self::T_DESC, "DESC");
-            $this->addKeyword(self::T_DISTINCT, "DISTINCT");
-            $this->addKeyword(self::T_DOT, ".");
-            $this->addKeyword(self::T_ESCAPE, "ESPACE");
-            $this->addKeyword(self::T_EXISTS, "EXISTS");
-            $this->addKeyword(self::T_FALSE, "FALSE");
-            $this->addKeyword(self::T_FROM, "FROM");
-            $this->addKeyword(self::T_GROUP, "GROUP");
-            $this->addKeyword(self::T_HAVING, "HAVING");
-            $this->addKeyword(self::T_IN, "IN");
-            $this->addKeyword(self::T_INDEX, "INDEX");
-            $this->addKeyword(self::T_INNER, "INNER");
-            $this->addKeyword(self::T_IS, "IS");
-            $this->addKeyword(self::T_JOIN, "JOIN");
-            $this->addKeyword(self::T_LEFT, "LEFT");
-            $this->addKeyword(self::T_LIKE, "LIKE");
-            $this->addKeyword(self::T_LIMIT, "LIMIT");
-            $this->addKeyword(self::T_MAX, "MAX");
-            $this->addKeyword(self::T_MIN, "MIN");
-            $this->addKeyword(self::T_MOD, "MOD");
-            $this->addKeyword(self::T_NOT, "NOT");
-            $this->addKeyword(self::T_NULL, "NULL");
-            $this->addKeyword(self::T_OFFSET, "OFFSET");
-            $this->addKeyword(self::T_ON, "ON");
-            $this->addKeyword(self::T_OR, "OR");
-            $this->addKeyword(self::T_ORDER, "ORDER");
-            $this->addKeyword(self::T_OUTER, "OUTER");
-            $this->addKeyword(self::T_SELECT, "SELECT");
-            $this->addKeyword(self::T_SET, "SET");
-            $this->addKeyword(self::T_SIZE, "SIZE");
-            $this->addKeyword(self::T_SOME, "SOME");
-            $this->addKeyword(self::T_SUM, "SUM");
-            $this->addKeyword(self::T_TRUE, "TRUE");
-            $this->addKeyword(self::T_UPDATE, "UPDATE");
-            $this->addKeyword(self::T_WHERE, "WHERE");
-            $this->addKeyword(self::T_WITH, "WITH");
-        }
-        return isset($this->_keywordsTable[$token]) 
-            ? $this->_keywordsTable[$token] 
-            : (is_string($token) ? $token : '');
-    }
-}
\ No newline at end of file