Index: Alerts/AlertCustomizeForm.java
===================================================================
--- Alerts/AlertCustomizeForm.java	(revision 1074)
+++ Alerts/AlertCustomizeForm.java	(working copy)
@@ -67,6 +67,8 @@
     //private CheckBox flashBackLight;
     
     private CheckBox IQNotify;
+	
+	private CheckBox showHighLiteIcon;
     
     private TrackItem sndVol;
     
@@ -135,7 +137,10 @@
         itemsList.addElement(sndVol);
         
         itemsList.addElement(new SpacerItem(10));
-        IQNotify=new CheckBox(SR.MS_SHOW_IQ_REQUESTS, cf.IQNotify); itemsList.addElement(IQNotify);        
+        IQNotify=new CheckBox(SR.MS_SHOW_IQ_REQUESTS, cf.IQNotify); itemsList.addElement(IQNotify);    
+
+		showHighLiteIcon = new CheckBox(SR.MS_SHOW_HIGHLITE_ICON, cf.showHighLiteIcon);
+        itemsList.addElement(showHighLiteIcon);		
     }
     
     public void cmdSave() {
@@ -170,6 +175,8 @@
         cf.notifySound=soundBox.getValue();
         
         cf.IQNotify=IQNotify.getValue();
+		
+		cf.showHighLiteIcon=showHighLiteIcon.getValue();
 
         cf.saveToStorage();
 
Index: Client/Config.java
===================================================================
--- Client/Config.java	(revision 1074)
+++ Client/Config.java	(working copy)
@@ -235,6 +235,7 @@
 //#endif
     public boolean useQuickPrivacy = false;
     public int minItemHeight = rosterFont*3;
+    public boolean showHighLiteIcon = true;
     // End of "save to storage".
 
     public static Config getInstance() {
@@ -507,6 +508,7 @@
 //#         inputStream.readBoolean();
 //#endif
             minItemHeight = inputStream.readInt();
+            showHighLiteIcon = inputStream.readBoolean();
 
             inputStream.close();
             inputStream = null;
@@ -773,6 +775,7 @@
 //#         outputStream.writeBoolean(false);
 //#endif             
         outputStream.writeInt(minItemHeight);
+        outputStream.writeBoolean(showHighLiteIcon);
 
         } catch (IOException e) {
 //#ifdef DEBUG
Index: Client/Contact.java
===================================================================
--- Client/Contact.java	(revision 1074)
+++ Client/Contact.java	(working copy)
@@ -113,6 +113,7 @@
     public int activeMessage = -1;
     private int newMsgCnt = 0;
     private int newHighLitedMsgCnt = 0;
+    protected int newPrivateMsgCnt=0;
     public int unreadType;
     public int lastUnread;
     public int mark = -1;
@@ -299,6 +300,7 @@
     public void resetNewMsgCnt() {
         newMsgCnt = 0;
         newHighLitedMsgCnt = 0;
+        newPrivateMsgCnt=0;
     }
 
     public void setIncoming(int state) {
@@ -729,6 +731,10 @@
     }
 
     public int getSecImageIndex() {
+        if (newPrivateMsgCnt > 0 && newMsgCnt != 0) { 
+            return (cf.showHighLiteIcon) ? RosterIcons.ICON_APPEARING_INDEX : RosterIcons.ICON_MESSAGE_INDEX;
+        }
+
         if (getNewMsgsCount() > 0) {
             return (unreadType == Msg.MESSAGE_TYPE_AUTH) ? RosterIcons.ICON_AUTHRQ_INDEX : RosterIcons.ICON_MESSAGE_INDEX;
         }
@@ -740,6 +746,14 @@
         return -1;
     }
 
+    public int getThirdImageIndex() {
+        if (cf.showHighLiteIcon) {
+            if (getNewHighliteMsgsCount() > 0) 
+                return RosterIcons.ICON_APPEARING_INDEX;
+        }
+        return -1;
+    }
+
 //#ifdef PEP
 //#     public String getMoodString() {
 //#         StringBuffer mood = null;
@@ -835,6 +849,11 @@
             w -= ilHeight;
             il.drawImage(g, getSecImageIndex(), w, imgH);
         }
+        
+        if (getThirdImageIndex() > -1) {
+            w-=ilHeight;
+            il.drawImage(g, getThirdImageIndex(), w,imgH);
+        }
 
         int thisOfs = 0;
 
Index: Client/Group.java
===================================================================
--- Client/Group.java	(revision 1074)
+++ Client/Group.java	(working copy)
@@ -44,6 +44,7 @@
     public boolean visible=true;
     protected int nContacts;
     protected int onlines;
+	private Config cf=Config.getInstance();
     
     public int imageExpandedIndex=RosterIcons.ICON_EXPANDED_INDEX;
     public int imageCollapsedIndex=RosterIcons.ICON_COLLAPSED_INDEX;
@@ -54,6 +55,7 @@
     public int tonlines;
     private int tncontacts;
     public int unreadMessages=0;
+	public int unreadHighliteMessages=0;
     
     protected boolean collapsed;
 
@@ -86,6 +88,12 @@
             w -= il.getWidth();
             il.drawImage(g, RosterIcons.ICON_MESSAGE_INDEX, w, (getVHeight() - il.getWidth()) >> 1);
         }
+		if (cf.showHighLiteIcon) {
+			if (collapsed && unreadHighliteMessages > 0) {
+				w-=il.getWidth();
+				il.drawImage(g, RosterIcons.ICON_APPEARING_INDEX, w, 0);
+			}
+		}
         g.setClip(xo, yo, w, h);
         
         super.drawItem(g, ofs, sel);
@@ -112,6 +120,7 @@
 	tonlines=0;
         tncontacts=0;
         unreadMessages=0;
+		unreadHighliteMessages=0;
         contacts=null;
 	contacts=new Vector();
     }
@@ -124,9 +133,10 @@
 	}
 	// hide offlines whithout new messages
         unreadMessages+=c.getNewMsgsCount();
+		unreadHighliteMessages+=c.getNewHighliteMsgsCount();
         
-	if ( online || Config.getInstance().showOfflineContacts || c.getNewMsgsCount()>0 || type==Groups.TYPE_NOT_IN_LIST || type==Groups.TYPE_TRANSP || type==Groups.TYPE_VISIBLE || type==Groups.TYPE_SEARCH_RESULT || c.origin==Contact.ORIGIN_GROUPCHAT )
-            contacts.addElement(c);
+	if ( online || Config.getInstance().showOfflineContacts || c.getNewMsgsCount()>0 || c.getNewHighliteMsgsCount()>0 || type==Groups.TYPE_NOT_IN_LIST || type==Groups.TYPE_TRANSP || type==Groups.TYPE_VISIBLE || type==Groups.TYPE_SEARCH_RESULT || c.origin==Contact.ORIGIN_GROUPCHAT )
+             contacts.addElement(c);
     }
     
     void finishCount() {
Index: Client/Roster.java
===================================================================
--- Client/Roster.java	(revision 1074)
+++ Client/Roster.java	(working copy)
@@ -142,7 +142,7 @@
     public Jid myJid;
     public JabberStream theStream;
     public int messageCount;
-    int highliteMessageCount;
+    public int highliteMessageCount;
     public Object transferIcon;
     public final Vector hContacts = new Vector();
     //private Vector vContacts;
@@ -2098,6 +2098,7 @@
             else {
                 if (c.origin != Contact.ORIGIN_GROUPCHAT && c instanceof MucContact) {
                     playNotify(SOUND_MESSAGE); //private message
+                    c.newPrivateMsgCnt++;
                     autorespond = true;
 //#ifdef LIGHT_CONFIG        
 //#                     CustomLight.message();
Index: locale/SR.java
===================================================================
--- locale/SR.java	(revision 1074)
+++ locale/SR.java	(working copy)
@@ -730,6 +730,7 @@
     public static String L_MESSAGE_VALUE = loadString("Message value");
     public static String L_MESSAGE_TIMEOUT = loadString("Message timeout");
     public static String MS_COPY_TOPIC = loadString("Copy topic");
+	public static String MS_SHOW_HIGHLITE_ICON = loadString( "Show highlight icon" );
 
     
     private SR() { }
Index: ui/VirtualList.java
===================================================================
--- ui/VirtualList.java	(revision 1074)
+++ ui/VirtualList.java	(working copy)
@@ -634,6 +634,9 @@
             if (sd.roster.messageCount > 0) {
                 drawEnvelop(g);
             }
+            if (cf.showHighLiteIcon) {
+                if (sd.roster.highliteMessageCount > 0) drawEnvelopHighLite(g);
+            }
             if (System.currentTimeMillis() - sd.getTrafficIn() < 2000) {
                 drawTraffic(g, false);
             }
@@ -660,7 +663,15 @@
         g.drawLine(wpos-3,	hpos+5,	wpos-2,	hpos+4);
         g.drawLine(wpos+2,	hpos+4,	wpos+3,	hpos+5);
     }
-    
+    private void drawEnvelopHighLite(final Graphics g) {
+        g.setColor(getMainBarRGB());
+        int wpos= (width/2)-14;
+        int hpos= height-11;
+        g.drawLine(wpos,	hpos,	wpos,	hpos+4);
+        g.drawLine(wpos,	hpos+4,	wpos+5,	hpos-1);
+        g.drawLine(wpos,	hpos,	wpos,	hpos+4);
+        g.drawLine(wpos+1,	hpos+4,	wpos+6,	hpos-1);
+    }    
     protected void drawTraffic(final Graphics g, boolean up) {
         int pos=(up)?(width/2)+3:(width/2)-3;
         int pos2=(up)?height-4:height-2;
