Index: java/org/apache/lucene/search/WildcardQuery.java
===================================================================
--- java/org/apache/lucene/search/WildcardQuery.java	(revision 476598)
+++ java/org/apache/lucene/search/WildcardQuery.java	(working copy)
@@ -31,8 +31,11 @@
  * @see WildcardTermEnum
  */
 public class WildcardQuery extends MultiTermQuery {
+  private boolean termContainsWildcard;
+    
   public WildcardQuery(Term term) {
     super(term);
+    this.termContainsWildcard = (term.text().indexOf('*') != -1) || (term.text().indexOf('?') != -1);
   }
 
   protected FilteredTermEnum getEnum(IndexReader reader) throws IOException {
@@ -45,4 +48,12 @@
 
     return false;
   }
+  
+  public Query rewrite(IndexReader reader) throws IOException {
+      if (this.termContainsWildcard) {
+          return super.rewrite(reader);
+      }
+      
+      return new TermQuery(getTerm());
+  }
 }
Index: test/org/apache/lucene/search/TestWildcard.java
===================================================================
--- test/org/apache/lucene/search/TestWildcard.java	(revision 476598)
+++ test/org/apache/lucene/search/TestWildcard.java	(working copy)
@@ -54,7 +54,22 @@
     assertFalse(wq1.equals(fq));
     assertFalse(fq.equals(wq1));
   }
+  
+  /**
+   * Tests if a WildcardQuery that has no wildcard in the term is rewritten to a single
+   * TermQuery.
+   */
+  public void testTermWithoutWildcard() throws IOException {
+      RAMDirectory indexStore = getIndexStore("field", new String[]{"nowildcard", "nowildcardx"});
+      IndexSearcher searcher = new IndexSearcher(indexStore);
 
+      Query wq = new WildcardQuery(new Term("field", "nowildcard"));
+      assertMatches(searcher, wq, 1);
+
+      wq = searcher.rewrite(wq);
+      assertTrue(wq instanceof TermQuery);
+  }
+
   /**
    * Tests Wildcard queries with an asterisk.
    */
