diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/CommonQueryParserConfiguration.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/CommonQueryParserConfiguration.java
index 7c305f3..6a56f22 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/CommonQueryParserConfiguration.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/CommonQueryParserConfiguration.java
@@ -155,6 +155,21 @@ public interface CommonQueryParserConfiguration {
    */
   public void setDateResolution(DateTools.Resolution dateResolution);
   
+  /**
+   * Set to true if phrase queries will be automatically generated
+   * when the analyzer returns more than one term from whitespace
+   * delimited text.
+   * NOTE: this behavior may not be suitable for all languages.
+   * <p>
+   * Set to false if phrase queries should only be generated when
+   * surrounded by double quotes.
+   */
+  public void setAutoGeneratePhraseQueries(boolean autoGeneratePhraseQueries);
+
+  /**
+   * @see #setAutoGeneratePhraseQueries(boolean)
+   */
+  public boolean getAutoGeneratePhraseQueries();
   
   
 }
\ No newline at end of file
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/StandardQueryParser.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/StandardQueryParser.java
index 2abb6a7..e6afe16 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/StandardQueryParser.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/StandardQueryParser.java
@@ -541,4 +541,13 @@ public class StandardQueryParser extends QueryParserHelper implements CommonQuer
     getQueryConfigHandler().set(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP, dateRes);
   }
   
+  @Override
+  public void setAutoGeneratePhraseQueries(boolean autoGeneratePhraseQueries) {
+    getQueryConfigHandler().set(ConfigurationKeys.AUTO_GENERATE_PHRASE_QUERIES, autoGeneratePhraseQueries);
+  }
+  
+  @Override
+  public boolean getAutoGeneratePhraseQueries() {
+    return getQueryConfigHandler().get(ConfigurationKeys.AUTO_GENERATE_PHRASE_QUERIES);
+  }
 }
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/config/StandardQueryConfigHandler.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/config/StandardQueryConfigHandler.java
index a7fd34a..e3f237b 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/config/StandardQueryConfigHandler.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/config/StandardQueryConfigHandler.java
@@ -183,6 +183,13 @@ public class StandardQueryConfigHandler extends QueryConfigHandler {
      */
     final public static ConfigurationKey<Map<String,NumericConfig>> NUMERIC_CONFIG_MAP = ConfigurationKey.newInstance();
     
+    /**
+     * Key used to set whether phrase queries auto generation is supported
+     * 
+     * @see StandardQueryParser#setAutoGeneratePhraseQueries(boolean)
+     * @see StandardQueryParser#getAutoGeneratePhraseQueries()
+     */
+    final public static ConfigurationKey<Boolean> AUTO_GENERATE_PHRASE_QUERIES = ConfigurationKey.newInstance();
   }
   
   /**
@@ -210,6 +217,7 @@ public class StandardQueryConfigHandler extends QueryConfigHandler {
     set(ConfigurationKeys.LOCALE, Locale.getDefault());
     set(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD, MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT);
     set(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP, new HashMap<CharSequence, DateTools.Resolution>());
+    set(ConfigurationKeys.AUTO_GENERATE_PHRASE_QUERIES, false);
     
   }
 
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/processors/AnalyzerQueryNodeProcessor.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/processors/AnalyzerQueryNodeProcessor.java
index d11da54..73f6b9d 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/processors/AnalyzerQueryNodeProcessor.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/processors/AnalyzerQueryNodeProcessor.java
@@ -74,6 +74,8 @@ public class AnalyzerQueryNodeProcessor extends QueryNodeProcessorImpl {
 
   private boolean positionIncrementsEnabled;
 
+  private boolean autoGeneratePhraseQueries;
+
   public AnalyzerQueryNodeProcessor() {
     // empty constructor
   }
@@ -91,10 +93,12 @@ public class AnalyzerQueryNodeProcessor extends QueryNodeProcessorImpl {
           this.positionIncrementsEnabled = positionIncrementsEnabled;
       }
 
+      Boolean autoGeneratePhraseQueries = getQueryConfigHandler().get(ConfigurationKeys.AUTO_GENERATE_PHRASE_QUERIES);
+      this.autoGeneratePhraseQueries = (autoGeneratePhraseQueries != null ? autoGeneratePhraseQueries : false);
+
       if (this.analyzer != null) {
         return super.process(queryTree);
       }
-
     }
 
     return queryTree;
@@ -119,6 +123,8 @@ public class AnalyzerQueryNodeProcessor extends QueryNodeProcessorImpl {
       int numTokens = 0;
       int positionCount = 0;
       boolean severalTokensAtSamePosition = false;
+
+      boolean quoted = (node instanceof QuotedFieldQueryNode) || autoGeneratePhraseQueries;
       
       TokenStream source = null;
       try {
@@ -182,8 +188,8 @@ public class AnalyzerQueryNodeProcessor extends QueryNodeProcessorImpl {
 
         return fieldNode;
 
-      } else if (severalTokensAtSamePosition || !(node instanceof QuotedFieldQueryNode)) {
-        if (positionCount == 1 || !(node instanceof QuotedFieldQueryNode)) {
+      } else if (severalTokensAtSamePosition || !quoted) {
+        if (positionCount == 1 || !quoted) {
           // no phrase query:
           LinkedList<QueryNode> children = new LinkedList<QueryNode>();
 
diff --git a/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestQPHelper.java b/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestQPHelper.java
index 6555f48..103798a 100644
--- a/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestQPHelper.java
+++ b/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/standard/TestQPHelper.java
@@ -1345,4 +1345,26 @@ public class TestQPHelper extends LuceneTestCase {
 
   }
 
+  public void testAutoGeneratePhraseQueries() throws Exception {
+    // individual CJK chars as terms
+    SimpleCJKAnalyzer analyzer = new SimpleCJKAnalyzer();
+    StandardQueryParser parser = getParser(analyzer);
+    parser.setAutoGeneratePhraseQueries(true);
+
+    PhraseQuery expectedPQ = new PhraseQuery();
+    expectedPQ.add(new Term("field", "中"));
+    expectedPQ.add(new Term("field", "国"));
+
+    assertEquals(expectedPQ, parser.parse("中国", "field"));
+
+    BooleanQuery expectedBQ = new BooleanQuery();
+    expectedBQ.add(new TermQuery(new Term("field", "中")), BooleanClause.Occur.MUST);
+    PhraseQuery inner = new PhraseQuery();
+    inner.add(new Term("field", "中"));
+    inner.add(new Term("field", "国"));
+    expectedBQ.add(inner, BooleanClause.Occur.MUST);
+
+    assertEquals(expectedBQ, parser.parse("中 AND 中国", "field"));
+  }
+
 }
