Index: kmail/headerlistquicksearch.h
===================================================================
--- kmail/headerlistquicksearch.h	(revision 515042)
+++ kmail/headerlistquicksearch.h	(working copy)
@@ -81,6 +81,7 @@
     QComboBox *mStatusCombo;
     KMMsgStatus mStatus;
     QValueVector<QString> statusList;
+	int mUnreadAndImportantIndex;
 };
 
 }
Index: kmail/headerlistquicksearch.cpp
===================================================================
--- kmail/headerlistquicksearch.cpp	(revision 515042)
+++ kmail/headerlistquicksearch.cpp	(working copy)
@@ -44,6 +44,8 @@
 #include "kmsearchpattern.h"
 #include "kmmainwidget.h"
 
+#include <kdebug.h>
+
 namespace KMail {
 
 HeaderListQuickSearch::HeaderListQuickSearch( QWidget *parent,
@@ -79,6 +81,9 @@
   insertStatus( StatusHasAttachment );
   insertStatus( StatusWatched );
   insertStatus( StatusIgnored );
+  mStatusCombo->insertItem( SmallIcon( "find" ), QString("%1 & (%2|%3)").arg( KMail::StatusValues[ StatusImportant ].text ).arg( KMail::StatusValues[ StatusNew ].text ).arg( KMail::StatusValues[ StatusUnread ].text ) );
+  mUnreadAndImportantIndex = mStatusCombo->count() - 1;
+
   mStatusCombo->setCurrentItem( 0 );
   mStatusCombo->installEventFilter( this );
   connect( mStatusCombo, SIGNAL ( activated( int ) ),
@@ -134,14 +139,26 @@
   return false;
 }
 
-
 bool HeaderListQuickSearch::itemMatches(const QListViewItem *item, const QString &s) const
 {
   if ( mStatus != 0 ) {
     KMHeaders *headers = static_cast<KMHeaders*>( item->listView() );
     const KMMsgBase *msg = headers->getMsgBaseForItem( item );
-    if ( !msg || ! ( msg->status() & mStatus ) )
+    if ( !msg )
       return false;
+    const unsigned int UnreadNewImportant = KMMsgStatusUnread | KMMsgStatusFlag | KMMsgStatusNew;
+    if ( mStatus == UnreadNewImportant )
+    {
+      const unsigned int UnreadImportant = KMMsgStatusUnread | KMMsgStatusFlag;
+      const unsigned int NewImportant = KMMsgStatusNew | KMMsgStatusFlag;
+      if ( !( ( ( msg->status() & UnreadNewImportant ) == UnreadImportant )
+                  || ( ( msg->status() & UnreadNewImportant ) == NewImportant ) )
+         )
+        return false;
+    }
+    else
+      if ( !( msg->status() & mStatus ) )
+        return false;
   }
   return KListViewSearchLine::itemMatches(item, s);
 }
@@ -158,6 +175,8 @@
 {
   if ( index == 0 )
     mStatus = 0;
+  else if ( index == mUnreadAndImportantIndex )
+    mStatus = KMMsgStatusUnread | KMMsgStatusFlag | KMMsgStatusNew;
   else
     mStatus = KMSearchRuleStatus::statusFromEnglishName( statusList[index - 1] );
   updateSearch();
