Index: main.py
===================================================================
--- main.py	(revision 7894)
+++ main.py	(working copy)
@@ -731,8 +731,15 @@
             else:
                 return "%s__icontains" % field_name
 
-        if self.lookup_opts.admin.search_fields and self.query:
-            for bit in self.query.split():
+        def query_split(query):
+            first_bits = query.split('"')
+            result_bits = first_bits[1::2]
+                for bit in first_bits[0::2]:
+                result_bits.extend( bit.split() )
+            return result_bits
+
+        if self.lookup_opts.admin.search_fields and self.query:            
+            for bit in query_split(self.query):
                 or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields]
                 other_qs = QuerySet(self.model)
                 other_qs.dup_select_related(qs)
