diff -urN -X psidiff.ignore sources/src/moodcatalog.cpp work/src/moodcatalog.cpp
--- sources/src/moodcatalog.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/moodcatalog.cpp	2009-05-01 18:06:24.136511280 +0600
@@ -53,11 +53,22 @@
 	return type_ == Mood::Unknown && text_.isNull() && value_.isNull();
 }
 
+bool MoodCatalog::Entry::operator<(const MoodCatalog::Entry &m) const
+{
+	if ( type_ == Mood::Undefined )
+		return false;
+	if ( m.type_ == Mood::Undefined )
+		return true;
+	int result = QString::localeAwareCompare ( text_, m.text_ );
+	return result<0;
+}
+
 MoodCatalog::MoodCatalog() : QObject(QCoreApplication::instance())
 {
 	entries_ += Entry(Mood::Afraid, "afraid", QObject::tr("Afraid"));
 	entries_ += Entry(Mood::Amazed, "amazed", QObject::tr("Amazed"));
 	entries_ += Entry(Mood::Angry, "angry", QObject::tr("Angry"));
+	entries_ += Entry(Mood::Amorous, "amorous", QObject::tr("Amorous"));
 	entries_ += Entry(Mood::Annoyed, "annoyed", QObject::tr("Annoyed"));
 	entries_ += Entry(Mood::Anxious, "anxious", QObject::tr("Anxious"));
 	entries_ += Entry(Mood::Aroused, "aroused", QObject::tr("Aroused"));
@@ -65,22 +76,31 @@
 	entries_ += Entry(Mood::Bored, "bored", QObject::tr("Bored"));
 	entries_ += Entry(Mood::Brave, "brave", QObject::tr("Brave"));
 	entries_ += Entry(Mood::Calm, "calm", QObject::tr("Calm"));
+	entries_ += Entry(Mood::Cautious, "cautious", QObject::tr("Cautious"));
 	entries_ += Entry(Mood::Cold, "cold", QObject::tr("Cold"));
+	entries_ += Entry(Mood::Confident, "confident", QObject::tr("Confident"));
 	entries_ += Entry(Mood::Confused, "confused", QObject::tr("Confused"));
+	entries_ += Entry(Mood::Contemplative, "contemplative", QObject::tr("Contemplative"));
 	entries_ += Entry(Mood::Contented, "contented", QObject::tr("Contented"));
 	entries_ += Entry(Mood::Cranky, "cranky", QObject::tr("Cranky"));
+	entries_ += Entry(Mood::Crazy, "crazy", QObject::tr("Crazy"));
+	entries_ += Entry(Mood::Creative, "creative", QObject::tr("Creative"));
 	entries_ += Entry(Mood::Curious, "curious", QObject::tr("Curious"));
+	entries_ += Entry(Mood::Dejected, "dejected", QObject::tr("Dejected"));
 	entries_ += Entry(Mood::Depressed, "depressed", QObject::tr("Depressed"));
 	entries_ += Entry(Mood::Disappointed, "disappointed", QObject::tr("Disappointed"));
 	entries_ += Entry(Mood::Disgusted, "disgusted", QObject::tr("Disgusted"));
+	entries_ += Entry(Mood::Dismayed, "dismayed", QObject::tr("Dismayed"));
 	entries_ += Entry(Mood::Distracted, "distracted", QObject::tr("Distracted"));
 	entries_ += Entry(Mood::Embarrassed, "embarrassed", QObject::tr("Embarrassed"));
+	entries_ += Entry(Mood::Envious, "envious", QObject::tr("Envious"));
 	entries_ += Entry(Mood::Excited, "excited", QObject::tr("Excited"));
 	entries_ += Entry(Mood::Flirtatious, "flirtatious", QObject::tr("Flirtatious"));
 	entries_ += Entry(Mood::Frustrated, "frustrated", QObject::tr("Frustrated"));
 	entries_ += Entry(Mood::Grumpy, "grumpy", QObject::tr("Grumpy"));
 	entries_ += Entry(Mood::Guilty, "guilty", QObject::tr("Guilty"));
 	entries_ += Entry(Mood::Happy, "happy", QObject::tr("Happy"));
+	entries_ += Entry(Mood::Hopeful, "hopeful", QObject::tr("Hopeful"));
 	entries_ += Entry(Mood::Hot, "hot", QObject::tr("Hot"));
 	entries_ += Entry(Mood::Humbled, "humbled", QObject::tr("Humbled"));
 	entries_ += Entry(Mood::Humiliated, "humiliated", QObject::tr("Humiliated"));
@@ -95,13 +115,16 @@
 	entries_ += Entry(Mood::Invincible, "invincible", QObject::tr("Invincible"));
 	entries_ += Entry(Mood::Jealous, "jealous", QObject::tr("Jealous"));
 	entries_ += Entry(Mood::Lonely, "lonely", QObject::tr("Lonely"));
+	entries_ += Entry(Mood::Lucky, "lucky", QObject::tr("Lucky"));
 	entries_ += Entry(Mood::Mean, "mean", QObject::tr("Mean"));
 	entries_ += Entry(Mood::Moody, "moody", QObject::tr("Moody"));
 	entries_ += Entry(Mood::Nervous, "nervous", QObject::tr("Nervous"));
 	entries_ += Entry(Mood::Neutral, "neutral", QObject::tr("Neutral"));
 	entries_ += Entry(Mood::Offended, "offended", QObject::tr("Offended"));
+	entries_ += Entry(Mood::Outraged, "outraged", QObject::tr("Outraged"));
 	entries_ += Entry(Mood::Playful, "playful", QObject::tr("Playful"));
 	entries_ += Entry(Mood::Proud, "proud", QObject::tr("Proud"));
+	entries_ += Entry(Mood::Relaxed, "relaxed", QObject::tr("Relaxed"));
 	entries_ += Entry(Mood::Relieved, "relieved", QObject::tr("Relieved"));
 	entries_ += Entry(Mood::Remorseful, "remorseful", QObject::tr("Remorseful"));
 	entries_ += Entry(Mood::Restless, "restless", QObject::tr("Restless"));
@@ -112,10 +135,17 @@
 	entries_ += Entry(Mood::Shy, "shy", QObject::tr("Shy"));
 	entries_ += Entry(Mood::Sick, "sick", QObject::tr("Sick"));
 	entries_ += Entry(Mood::Sleepy, "sleepy", QObject::tr("Sleepy"));
+	entries_ += Entry(Mood::Spontaneous, "spontaneous", QObject::tr("Spontaneous"));
 	entries_ += Entry(Mood::Stressed, "stressed", QObject::tr("Stressed"));
+	entries_ += Entry(Mood::Strong, "strong", QObject::tr("Strong"));
 	entries_ += Entry(Mood::Surprised, "surprised", QObject::tr("Surprised"));
+	entries_ += Entry(Mood::Thankful, "thankful", QObject::tr("Thankful"));
 	entries_ += Entry(Mood::Thirsty, "thirsty", QObject::tr("Thirsty"));
+	entries_ += Entry(Mood::Tired, "tired", QObject::tr("Tired"));
+	entries_ += Entry(Mood::Undefined, "undefined", QObject::tr("Else"));
+	entries_ += Entry(Mood::Weak, "weak", QObject::tr("Weak"));
 	entries_ += Entry(Mood::Worried, "worried", QObject::tr("Worried"));
+	qSort(entries_);
 }
 
 MoodCatalog* MoodCatalog::instance()
diff -urN -X psidiff.ignore sources/src/moodcatalog.h work/src/moodcatalog.h
--- sources/src/moodcatalog.h	2009-04-24 12:44:22.000000000 +0600
+++ work/src/moodcatalog.h	2009-05-01 18:06:24.137667853 +0600
@@ -39,6 +39,7 @@
 			const QString& value() const;
 			const QString& text() const;
 			bool isNull() const;
+			bool operator<(const MoodCatalog::Entry &m) const;
 
 		private:
 			Mood::Type type_;
diff -urN -X psidiff.ignore sources/src/mood.cpp work/src/mood.cpp
--- sources/src/mood.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/mood.cpp	2009-05-01 18:06:24.137667853 +0600
@@ -48,6 +48,11 @@
 	return MoodCatalog::instance()->findEntryByType(type_).text();
 }
 
+QString Mood::typeValue() const
+{
+	return MoodCatalog::instance()->findEntryByType(type_).value();
+}
+
 const QString& Mood::text() const
 {
 	return text_;
diff -urN -X psidiff.ignore sources/src/mooddlg.cpp work/src/mooddlg.cpp
--- sources/src/mooddlg.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/mooddlg.cpp	2009-05-01 18:06:24.139984908 +0600
@@ -25,6 +25,7 @@
 #include "moodcatalog.h"
 #include "psiaccount.h"
 #include "pepmanager.h"
+#include "psiiconset.h"
 
 MoodDlg::MoodDlg(PsiAccount* pa)
 	: QDialog(0), pa_(pa)
@@ -36,8 +37,14 @@
 	connect(ui_.pb_ok, SIGNAL(clicked()), SLOT(setMood()));	
 
 	ui_.cb_type->addItem(tr("<unset>"));
+	Mood::Type mt = pa->mood().type();
+	int i=1;
 	foreach(MoodCatalog::Entry e, MoodCatalog::instance()->entries()) {
-		ui_.cb_type->addItem(e.text());
+        	ui_.cb_type->addItem(IconsetFactory::icon("mood/"+e.value()).icon(), e.text());
+		if (e.type() == mt) {
+			ui_.cb_type->setCurrentIndex(i);
+		}
+		i++;
 	}
 }
 
diff -urN -X psidiff.ignore sources/src/mood.h work/src/mood.h
--- sources/src/mood.h	2009-04-24 12:44:22.000000000 +0600
+++ work/src/mood.h	2009-05-01 18:06:24.141141200 +0600
@@ -31,14 +31,16 @@
 public:
 	enum Type { 
 		Unknown,
-		Afraid, Amazed, Angry, Annoyed, Anxious, Aroused, Ashamed, Bored,
-    	Brave, Calm, Cold, Confused, Contented, Cranky, Curious, Depressed,
-    	Disappointed, Disgusted, Distracted, Embarrassed, Excited, Flirtatious,
-		Frustrated, Grumpy, Guilty, Happy, Hot, Humbled, Humiliated, Hungry,
+		Afraid, Amazed, Angry, Amorous, Annoyed, Anxious, Aroused, Ashamed, Bored,
+		Brave, Calm, Cautious, Cold, Confident, Confused, Contemplative, Contented,
+		Cranky, Crazy, Creative, Curious, Dejected, Depressed, Disappointed,
+		Disgusted, Dismayed, Distracted, Embarrassed, Envious, Excited, Flirtatious,
+		Frustrated, Grumpy, Guilty, Happy, Hopeful, Hot, Humbled, Humiliated, Hungry,
 		Hurt, Impressed, In_awe, In_love, Indignant, Interested, Intoxicated,
-		Invincible, Jealous, Lonely, Mean, Moody, Nervous, Neutral, Offended,
-		Playful, Proud, Relieved, Remorseful, Restless, Sad, Sarcastic, Serious,
-		Shocked, Shy, Sick, Sleepy, Stressed, Surprised, Thirsty, Worried
+		Invincible, Jealous, Lonely, Lucky, Mean, Moody, Nervous, Neutral, Offended,
+		Outraged, Playful, Proud, Relaxed, Relieved, Remorseful, Restless, Sad,
+		Sarcastic, Serious, Shocked, Shy, Sick, Sleepy, Spontaneous, Stressed, Strong,
+		Surprised, Thankful, Thirsty, Tired, Undefined, Weak, Worried
 	};
 
 	Mood();
@@ -47,6 +49,7 @@
 
 	Type type() const;
 	QString typeText() const;
+	QString typeValue() const;
 	const QString& text() const;
 	bool isNull() const;
 
diff -urN -X psidiff.ignore sources/src/options/opt_appearance.cpp work/src/options/opt_appearance.cpp
--- sources/src/options/opt_appearance.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/options/opt_appearance.cpp	2009-05-01 18:06:24.156255698 +0600
@@ -73,6 +73,7 @@
 {    
 	addTab( new OptionsTabAppearanceGeneral(this) );
 	addTab( new OptionsTabIconsetEmoticons(this) );
+	addTab( new OptionsTabIconsetMoods(this) );
 	addTab( new OptionsTabIconsetRoster(this) );
 	addTab( new OptionsTabIconsetSystem(this) );
 	addTab( new OptionsTabAppearanceMisc(this) );
diff -urN -X psidiff.ignore sources/src/options/opt_iconset.cpp work/src/options/opt_iconset.cpp
--- sources/src/options/opt_iconset.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/options/opt_iconset.cpp	2009-05-01 18:06:24.172389322 +0600
@@ -23,6 +23,7 @@
 #include <QTreeWidget>
 
 #include "ui_opt_iconset_emo.h"
+#include "ui_opt_iconset_mood.h"
 #include "ui_opt_iconset_system.h"
 #include "ui_opt_iconset_roster.h"
 #include "ui_ui_isdetails.h"
@@ -33,6 +34,12 @@
 	IconsetEmoUI() : QWidget() { setupUi(this); }
 };
 
+class IconsetMoodUI : public QWidget, public Ui::IconsetMood
+{
+public:
+	IconsetMoodUI() : QWidget() { setupUi(this); }
+};
+
 class IconsetSystemUI : public QWidget, public Ui::IconsetSystem
 {
 public:
@@ -716,6 +723,155 @@
 	}
 }
 
+
+//----------------------------------------------------------------------------
+// OptionsTabIconsetMoods
+//----------------------------------------------------------------------------
+
+OptionsTabIconsetMoods::OptionsTabIconsetMoods(QObject *parent)
+: OptionsTab(parent, "iconset_moods", "", tr("Moods"), tr("Select your mood iconset"))
+{
+	w = 0;
+	thread = 0;
+}
+
+OptionsTabIconsetMoods::~OptionsTabIconsetMoods()
+{
+	cancelThread();
+}
+
+QWidget *OptionsTabIconsetMoods::widget()
+{
+	if ( w )
+		return 0;
+
+	w = new IconsetMoodUI;
+	IconsetMoodUI *d = (IconsetMoodUI *)w;
+
+	connect(d->pb_moodDetails, SIGNAL(clicked()), SLOT(previewIconset()));
+
+	return w;
+}
+
+void OptionsTabIconsetMoods::applyOptions()
+{
+	if ( !w || thread )
+		return;
+
+	IconsetMoodUI *d = (IconsetMoodUI *)w;
+
+	const Iconset *is = d->iss_moods->iconset();
+	if ( is ) {
+		QFileInfo fi( is->fileName() );
+		PsiOptions::instance()->setOption("options.iconsets.moods", fi.fileName());
+	}
+}
+
+void OptionsTabIconsetMoods::restoreOptions()
+{
+	if ( !w || thread )
+		return;
+
+	IconsetMoodUI *d = (IconsetMoodUI *)w;
+
+	d->iss_moods->clear();
+	QStringList loaded;
+
+	d->setCursor(Qt::WaitCursor);
+
+	QPalette customPal = d->palette();
+	customPal.setDisabled(customPal.inactive());
+	d->iss_moods->setEnabled(false);
+	d->iss_moods->setPalette(customPal);
+
+	d->pb_moodDetails->setEnabled(false);
+	d->pb_moodDetails->setPalette(customPal);
+
+	d->progress->show();
+	d->progress->setValue( 0 );
+
+	numIconsets = countIconsets("/moods", loaded);
+	iconsetsLoaded = 0;
+
+	cancelThread();
+
+	thread = new IconsetLoadThread(this, "/moods");
+	thread->start();
+}
+
+bool OptionsTabIconsetMoods::event(QEvent *e)
+{
+	IconsetMoodUI *d = (IconsetMoodUI *)w;
+	if ( e->type() == QEvent::User ) { // iconset load event
+		IconsetLoadEvent *le = (IconsetLoadEvent *)e;
+
+		if ( thread != le->thread() )
+			return false;
+
+		if ( !numIconsets )
+			numIconsets = 1;
+		d->progress->setValue( (int)((float)100 * ++iconsetsLoaded / numIconsets) );
+
+		Iconset *i = le->iconset();
+		if ( i ) {
+			PsiIconset::instance()->stripFirstAnimFrame(i);
+			d->iss_moods->insert(*i);
+
+			QFileInfo fi( i->fileName() );
+			if ( fi.fileName() == PsiOptions::instance()->getOption("options.iconsets.moods").toString() )
+				d->iss_moods->setItemSelected(d->iss_moods->lastItem(), true);
+
+			delete i;
+		}
+
+		return true;
+	}
+	else if ( e->type() == QEvent::User + 1 ) { // finish event
+		d->iss_moods->setEnabled(true);
+		d->iss_moods->unsetPalette();
+
+		d->pb_moodDetails->setEnabled(true);
+		d->pb_moodDetails->unsetPalette();
+
+		connect(d->iss_moods, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), SIGNAL(dataChanged()));
+
+		d->progress->hide();
+
+		d->unsetCursor();
+		thread = 0;
+
+		return true;
+	}
+
+	return false;
+}
+
+void OptionsTabIconsetMoods::previewIconset()
+{
+	IconsetMoodUI *d = (IconsetMoodUI *)w;
+	const Iconset *is = d->iss_moods->iconset();
+	if (is) {
+		isDetails(*is, parentWidget->parentWidget(), psi);
+	}
+}
+
+void OptionsTabIconsetMoods::setData(PsiCon *psicon, QWidget *p)
+{
+	psi = psicon;
+	parentWidget = p;
+}
+
+void OptionsTabIconsetMoods::cancelThread()
+{
+	if ( thread ) {
+		threadCancelled.lock();
+		thread->cancelled = true;
+		threadCancelled.unlock();
+
+		thread = 0;
+	}
+}
+
 //----------------------------------------------------------------------------
 // OptionsTabIconsetRoster
 //----------------------------------------------------------------------------
diff -urN -X psidiff.ignore sources/src/options/opt_iconset.h work/src/options/opt_iconset.h
--- sources/src/options/opt_iconset.h	2009-04-24 12:44:22.000000000 +0600
+++ work/src/options/opt_iconset.h	2009-05-01 18:06:24.173547849 +0600
@@ -66,6 +66,34 @@
 	IconsetLoadThread *thread;
 };
 
+class OptionsTabIconsetMoods : public OptionsTab
+{
+	Q_OBJECT
+public:
+	OptionsTabIconsetMoods(QObject *parent);
+	~OptionsTabIconsetMoods();
+
+	QWidget *widget();
+	void applyOptions();
+	void restoreOptions();
+	bool stretchable() const { return true; }
+
+private slots:
+	void setData(PsiCon *, QWidget *);
+	void previewIconset();
+
+protected:
+	bool event(QEvent *);
+	void cancelThread();
+
+private:
+	QWidget *w, *parentWidget;
+	PsiCon *psi;
+
+	int numIconsets, iconsetsLoaded;
+	IconsetLoadThread *thread;
+};
+
 class OptionsTabIconsetRoster : public OptionsTab
 {
 	Q_OBJECT
diff -urN -X psidiff.ignore sources/src/options/opt_iconset_mood.ui work/src/options/opt_iconset_mood.ui
--- sources/src/options/opt_iconset_mood.ui	1970-01-01 05:00:00.000000000 +0500
+++ work/src/options/opt_iconset_mood.ui	2009-05-01 18:06:24.181649721 +0600
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IconsetMood</class>
+ <widget class="QWidget" name="IconsetMood">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>256</width>
+    <height>195</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IconsetMoodUI</string>
+  </property>
+  <layout class="QVBoxLayout">
+   <property name="spacing">
+    <number>6</number>
+   </property>
+   <property name="margin">
+    <number>9</number>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="groupBox9">
+     <property name="title">
+      <string>Mood iconsets</string>
+     </property>
+     <layout class="QGridLayout">
+      <property name="margin">
+       <number>8</number>
+      </property>
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item row="1" column="2">
+       <spacer>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Expanding</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>204</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="3">
+       <widget class="IconButton" name="pb_moodDetails" native="true">
+        <property name="text" stdset="0">
+         <string>&amp;Show Details</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" colspan="4">
+       <widget class="IconsetSelect" name="iss_moods" native="true"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QProgressBar" name="progress">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <customwidgets>
+  <customwidget>
+   <class>IconButton</class>
+   <extends></extends>
+   <header>iconbutton.h</header>
+  </customwidget>
+  <customwidget>
+   <class>IconsetSelect</class>
+   <extends></extends>
+   <header>iconsetselect.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff -urN -X psidiff.ignore sources/src/options/options.pri work/src/options/options.pri
--- sources/src/options/options.pri	2009-04-24 12:44:22.000000000 +0600
+++ work/src/options/options.pri	2009-05-01 18:06:24.183963145 +0600
@@ -55,6 +55,7 @@
 	$$PWD/opt_lookfeel_toolbars.ui \
 	$$PWD/ui_isdetails.ui \
 	$$PWD/opt_iconset_emo.ui \
+	$$PWD/opt_iconset_mood.ui \
 	$$PWD/opt_iconset_system.ui \
 	$$PWD/opt_iconset_roster.ui \
 	$$PWD/opt_general_groupchat.ui \
diff -urN -X psidiff.ignore sources/src/psiaccount.cpp work/src/psiaccount.cpp
--- sources/src/psiaccount.cpp	2009-05-01 18:05:54.582123737 +0600
+++ work/src/psiaccount.cpp	2009-05-01 18:06:24.188593345 +0600
@@ -4582,6 +4582,11 @@
 	return d->self.name();
 }
 
+const Mood &PsiAccount::mood() const
+{
+	return d->self.mood();
+}
+
 //void PsiAccount::pgpToggled(bool b)
 //{
 //	QCA::PGPKey oldkey = d->cur_pgpSecretKey;
diff -urN -X psidiff.ignore sources/src/psiaccount.h work/src/psiaccount.h
--- sources/src/psiaccount.h	2009-05-01 18:05:25.334449997 +0600
+++ work/src/psiaccount.h	2009-05-01 18:06:24.189751313 +0600
@@ -32,6 +32,7 @@
 #include "xmpp_rosterx.h"
 #include "xmpp_status.h"
 #include "psiactions.h"
+#include "mood.h"
 
 namespace XMPP
 {
@@ -127,6 +128,7 @@
 	bool loggedIn() const;
 	void setNick(const QString &);
 	QString nick() const;
+	const Mood &mood() const;
 	bool hasPGP() const;
 	QHostAddress *localAddress() const;
 
diff -urN -X psidiff.ignore sources/src/psiiconset.cpp work/src/psiiconset.cpp
--- sources/src/psiiconset.cpp	2009-04-24 12:44:22.000000000 +0600
+++ work/src/psiiconset.cpp	2009-05-01 18:06:24.207111909 +0600
@@ -42,8 +42,8 @@
 private:
 	PsiIconset *psi;
 public:
-	Iconset system, psiplus;
-	QString cur_system, cur_status, cur_psiplus;
+	Iconset system, psiplus, moods;
+	QString cur_system, cur_status, cur_psiplus, cur_moods;
 	QStringList cur_emoticons;
 	QMap<QString, QString> cur_service_status;
 	QMap<QString, QString> cur_custom_status;
@@ -236,6 +236,23 @@
 		return def;
 	}
 
+	Iconset moodsIconset(bool *ok)
+	{
+		Iconset def;
+		*ok = def.load( iconsetPath("moods/default") );
+
+		if ( PsiOptions::instance()->getOption("options.iconsets.moods").toString() != "default" ) {
+			Iconset is;
+			is.load ( iconsetPath("moods/" + PsiOptions::instance()->getOption("options.iconsets.moods").toString()) );
+
+			loadIconset(&def, &is);
+		}
+
+		stripFirstAnimFrame( def );
+
+		return def;
+	}
+
 	QList<Iconset*> emoticons()
 	{
 		QList<Iconset*> emo;
@@ -348,13 +365,29 @@
 	}
 }
 
+bool PsiIconset::loadMoods()
+{
+	bool ok = true;
+	QString cur_moods = PsiOptions::instance()->getOption("options.iconsets.moods").toString();
+	if (d->cur_moods != cur_moods) {
+		Iconset moods = d->moodsIconset(&ok);
+		d->loadIconset(&d->moods, &moods);
+		d->moods.addToFactory();
+
+		d->cur_moods = cur_moods;
+	}
+
+	return ok;
+}
+
 bool PsiIconset::loadAll()
 {
 	if (!loadSystem() || !loadRoster())
 		return false;
 
 	loadPsiplus();
 	loadEmoticons();
+	loadMoods();
 	return true;
 }
 
@@ -365,6 +398,9 @@
 	else if (option == "options.iconsets.emoticons") {
 		loadEmoticons();
 	}
+	else if (option == "options.iconsets.moods") {
+		loadMoods();
+	}
 
 	// currently we rely on PsiCon calling reloadRoster() when
 	// all options are already applied. otherwise we risk the chance
diff -urN -X psidiff.ignore sources/src/psiiconset.h work/src/psiiconset.h
--- sources/src/psiiconset.h	2009-04-24 12:44:22.000000000 +0600
+++ work/src/psiiconset.h	2009-05-01 18:06:24.208270716 +0600
@@ -46,6 +46,7 @@
 	QHash<QString, Iconset*> roster;
 	QList<Iconset*> emoticons;
 	Iconset psiplus;
+	Iconset moods;
 	const Iconset &system() const;
 	void stripFirstAnimFrame(Iconset *);
 	static void removeAnimation(Iconset *);
@@ -94,6 +95,7 @@
 	bool loadPsiplus();
 	bool loadRoster();
 	void loadEmoticons();
+	bool loadMoods();
 };
 
 #endif
diff -urN -X psidiff.ignore sources/src/userlist.cpp work/src/userlist.cpp
--- sources/src/userlist.cpp	2009-05-01 18:05:54.601798315 +0600
+++ work/src/userlist.cpp	2009-05-01 18:06:24.208270716 +0600
@@ -463,6 +463,7 @@
 QString UserListItem::makeBareTip(bool trim, bool doLinkify) const
 {
 	QString str;
+	QString imgTag = "icon name"; // or 'img src' if appropriate QMimeSourceFactory is installed. but mblsha noticed that QMimeSourceFactory unloads sometimes
 	bool useAvatar = false;
 	if (v_avatarFactory && !v_avatarFactory->getAvatar(jid().bare()).isNull() && PsiOptions::instance()->getOption("options.ui.contactlist.tooltip.avatar").toBool())
 		useAvatar = true;
@@ -490,7 +491,8 @@
 
 	// User Mood
 	if (!mood().isNull()) {
-		str += QString("<div style='white-space:pre'>") + QObject::tr("Mood") + ": " + mood().typeText();
+		str += QString("<div style='white-space:pre'>") + QObject::tr("Mood") + ": " +
+			QString("<%1=\"mood/%2\"> ").arg(imgTag).arg(mood().typeValue()) + mood().typeText();
 		if (!mood().text().isEmpty())
 			str += QString(" (") + mood().text() + QString(")");
 		str += "</div>";
@@ -536,7 +538,6 @@
 			else if(status == STATUS_INVISIBLE)
 				istr = "status/invisible"; //this shouldn't happen
 
-			QString imgTag = "icon name"; // or 'img src' if appropriate QMimeSourceFactory is installed. but mblsha noticed that QMimeSourceFactory unloads sometimes
 			QString secstr;
 			if(isSecure(r.name()) && PsiOptions::instance()->getOption("options.ui.contactlist.tooltip.pgp").toBool())
 				secstr += QString(" <%1=\"psi/cryptoYes\">").arg(imgTag);
