--- ferret-0.11.4/ext/q_multi_term.c (revision 772)
+++ ferret-0.11.4/ext/q_multi_term.c (revision 773)
@@ -662,5 +662,5 @@
 void multi_tq_add_term_boost(Query *self, const char *term, float boost)
 {
-    if (boost > MTQ(self)->min_boost) {
+    if (boost > MTQ(self)->min_boost && term && term[0]) {
         BoostedTerm *bt = boosted_term_new(term, boost);
         PriorityQueue *bt_pq = MTQ(self)->boosted_terms;
--- ferret-0.11.4/ext/q_parser.c (revision 756)
+++ ferret-0.11.4/ext/q_parser.c (revision 773)
@@ -148,5 +148,5 @@
     char *str;
 }
-/* Line 193 of yacc.c.  */
+/* Line 187 of yacc.c.  */
 #line 152 "y.tab.c"
 	YYSTYPE;
@@ -2490,7 +2490,35 @@
         else {
             int i;
-            q = bq_new_max(false, qp->max_clauses);
+            int term_cnt = 0;
+            Token *token;
+            char *last_word;
+
             for (i = 0; i < word_count; i++) {
-                bq_add_query_nr(q, get_term_q(qp, field, words[i]), BC_SHOULD);
+                token = ts_next(get_cached_ts(qp, field, words[i]));
+                free(words[i]);
+                if (token) {
+                    last_word = words[i] = estrdup(token->text);
+                    ++term_cnt;
+                }
+                else {
+                    words[i] = estrdup("");
+                }
+            }
+
+            switch (term_cnt) {
+                case 0:
+                    q = bq_new(false);
+                    break;
+                case 1:
+                    q = tq_new(field, last_word);
+                    break;
+                default:
+                    q = multi_tq_new_conf(field, term_cnt, 0.0);
+                    for (i = 0; i < word_count; i++) {
+                        if (words[i][0]) {
+                            multi_tq_add_term(q, words[i]);
+                        }
+                    }
+                    break;
             }
         }
--- ferret-0.11.4/test/unit/query_parser/tc_query_parser.rb (revision 772)
+++ ferret-0.11.4/test/unit/query_parser/tc_query_parser.rb (revision 773)
@@ -23,5 +23,5 @@
       ['field:"one <> 222 <> three|four|five <>"', 'field:"one <> 222 <> three|four|five"'],
       ['field:"on1|tw2 THREE|four|five six|seven"', 'field:"on1|tw2 THREE|four|five six|seven"'],
-      ['field:"testing|trucks"', 'field:testing field:trucks'],
+      ['field:"testing|trucks"', 'field:"testing|trucks"'],
       ['[aaa bbb]', '[aaa bbb]'],
       ['{aaa bbb]', '{aaa bbb]'],
@@ -92,4 +92,6 @@
       ['*:"asdf <> xxx|yyy"', '"asdf <> xxx|yyy" field:"asdf <> xxx|yyy" f1:"asdf <> xxx|yyy" f2:"asdf <> xxx|yyy"'],
       ['f1|f2:"asdf <> xxx|yyy"', 'f1:"asdf <> xxx|yyy" f2:"asdf <> xxx|yyy"'],
+      ['f1|f2:"asdf <> do|yyy"', 'f1:"asdf <> yyy" f2:"asdf <> yyy"'],
+      ['f1|f2:"do|cat"', 'f1:cat f2:cat'],
 
       ['*:[bbb xxx]', '[bbb xxx] field:[bbb xxx] f1:[bbb xxx] f2:[bbb xxx]'],
