diff -urN -X psidiff.ignore sources/src/clickablelabel.cpp work/src/clickablelabel.cpp
--- sources/src/clickablelabel.cpp	1970-01-01 05:00:00.000000000 +0500
+++ work/src/clickablelabel.cpp	2009-03-07 01:53:06.000000000 +0500
@@ -0,0 +1,110 @@
+#include "clickablelabel.h"
+
+#include <QMouseEvent>
+#include <QDialog>
+#include <QVBoxLayout>
+#include <QMenu>
+#include <QFileDialog>
+
+#include "psiiconset.h"
+
+ClickableLabel::ClickableLabel(QWidget * parent, Qt::WindowFlags f)
+    :QLabel(parent, f)
+{}
+
+ClickableLabel::~ClickableLabel()
+{}
+
+void ClickableLabel::mouseReleaseEvent(QMouseEvent * event)
+{
+    if (event->button()==Qt::LeftButton) {
+            emit clicked();
+    }
+    QLabel::mouseReleaseEvent(event);
+}
+
+ShowPhotoDlg::ShowPhotoDlg(QWidget *parent, QPixmap &pixmap)
+    : QDialog(parent)
+{
+    setAttribute(Qt::WA_DeleteOnClose);
+    photoPixmap = pixmap;
+    setWindowTitle(QString(tr("Photo Preview: %1")).arg(parent->windowTitle()));
+
+    label=new QLabel;
+    label->setAlignment(Qt::AlignCenter);
+    label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+    QVBoxLayout* layout=new QVBoxLayout();
+    layout->setSpacing(0);
+    layout->setMargin(0);
+    layout->addWidget(label);
+
+    setLayout(layout);
+    resize(photoPixmap.size());
+    createActions();
+};
+
+void ShowPhotoDlg::createActions()
+{
+
+     saveAct = new QAction(IconsetFactory::icon("psiplus/action_vcard_save_as").icon(), tr("&Save As..."), this);
+     connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
+
+     zoomInAct = new QAction(IconsetFactory::icon("psiplus/action_vcard_zoom_in").icon(), tr("Zoom &In"), this);
+     connect(zoomInAct, SIGNAL(triggered()), this, SLOT(zoomIn()));
+
+     zoomOutAct = new QAction(IconsetFactory::icon("psiplus/action_vcard_zoom_out").icon(), tr("Zoom &Out"), this);
+     connect(zoomOutAct, SIGNAL(triggered()), this, SLOT(zoomOut()));
+
+     restoreAct = new QAction(IconsetFactory::icon("psiplus/action_vcard_restore").icon(), tr("&Restore Size and Position"), this);
+     connect(restoreAct, SIGNAL(triggered()), this, SLOT(restore()));
+}
+
+void ShowPhotoDlg::save()
+{
+    QString initialPath = QDir::homeDirPath() + tr("/photo.png");
+
+    QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+                               initialPath,
+                               tr("PNG File (*.png);;JPEG File (*.jpeg);;BMP File (*.bmp);;PPM File (*.ppm);;All Files (*)"));
+    if (!fileName.isEmpty())
+        photoPixmap.save(fileName);
+}
+
+void ShowPhotoDlg::zoomIn()
+{
+    resize(1.25 * label->size());
+}
+
+void ShowPhotoDlg::zoomOut()
+{
+    resize(0.85 * label->size());
+}
+
+void ShowPhotoDlg::restore()
+{
+	QRect r(QPoint(parentWidget()->pos()), QSize(parentWidget()->size()));
+	QPoint centerPoint(r.center());
+	QSize size(photoPixmap.size());
+	QRect r2(centerPoint, size);
+	r2.moveCenter ( centerPoint );
+	setGeometry(r2);
+}
+
+void ShowPhotoDlg::contextMenuEvent(QContextMenuEvent *event)
+{
+     QMenu menu(this);
+     menu.addAction(saveAct);
+     menu.addAction(zoomInAct);
+     menu.addAction(zoomOutAct);
+     menu.addAction(restoreAct);
+     menu.exec(event->globalPos());
+}
+
+void ShowPhotoDlg::resizeEvent(QResizeEvent *)
+{
+    label->setPixmap(photoPixmap.scaled(label->size(), Qt::KeepAspectRatio,
+    Qt::SmoothTransformation));
+}
+
+ShowPhotoDlg::~ShowPhotoDlg()
+{}
diff -urN -X psidiff.ignore sources/src/clickablelabel.h work/src/clickablelabel.h
--- sources/src/clickablelabel.h	1970-01-01 05:00:00.000000000 +0500
+++ work/src/clickablelabel.h	2009-03-07 01:53:06.000000000 +0500
@@ -0,0 +1,44 @@
+#ifndef CLICKABLELABEL_H
+#define CLICKABLELABEL_H
+
+#include <QLabel>
+#include <QDialog>
+
+class ClickableLabel: public QLabel 
+{
+	Q_OBJECT
+public:
+	ClickableLabel(QWidget * parent = 0, Qt::WindowFlags f = 0);
+	virtual ~ClickableLabel();
+protected:
+	virtual void mouseReleaseEvent(QMouseEvent * event);
+signals:
+	void clicked();
+};
+
+class ShowPhotoDlg : public QDialog
+{
+	Q_OBJECT
+public:
+	ShowPhotoDlg(QWidget *parent, QPixmap &pixmap);
+	virtual ~ShowPhotoDlg();
+private:
+	QDialog *showPhotoDlg;
+	QLabel *label;
+	QPixmap photoPixmap;
+	QAction *saveAct;
+	QAction *zoomInAct;
+	QAction *zoomOutAct;
+	QAction *restoreAct;
+	void createActions();
+protected:
+	void resizeEvent(QResizeEvent *event);
+	void contextMenuEvent(QContextMenuEvent *event);
+private slots:
+	void save();
+	void zoomIn();
+	void zoomOut();
+	void restore();
+};
+
+#endif
diff -urN -X psidiff.ignore sources/src/infodlg.cpp work/src/infodlg.cpp
--- sources/src/infodlg.cpp	2009-03-07 01:53:04.000000000 +0500
+++ work/src/infodlg.cpp	2009-03-07 01:53:06.000000000 +0500
@@ -22,6 +22,8 @@
 
 #include "infodlg.h"
 
+#include <qpointer.h>
+#include "clickablelabel.h"
 #include <qlayout.h>
 #include <qlabel.h>
 #include <qtabwidget.h>
@@ -66,6 +68,7 @@
 	bool cacheVCard;
 	QByteArray photo;
 	QList<QString> infoRequested;
+	QPointer<QDialog> showPhotoDlg;
 };
 
 InfoDlg::InfoDlg(int type, const Jid &j, const VCard &vcard, PsiAccount *pa, QWidget *parent, bool cacheVCard)
@@ -132,6 +135,7 @@
 	}
 
 	setData(d->vcard);
+	connect(ui_.label_photo, SIGNAL(clicked()), SLOT(showPhoto()));
 }
 
 InfoDlg::~InfoDlg()
@@ -693,3 +699,18 @@
 		updateStatus();
 	}
 }
+
+void InfoDlg::showPhoto()
+{
+	 if (!d->photo.isEmpty()) {
+		QPixmap pixmap;
+		if (pixmap.loadFromData(d->photo) && !d->showPhotoDlg) {
+			d->showPhotoDlg=new ShowPhotoDlg(this, pixmap);
+			d->showPhotoDlg->show();
+		}
+		else {
+			::bringToFront(d->showPhotoDlg);
+			d->showPhotoDlg->resize(pixmap.size());
+		}
+	 }
+}
diff -urN -X psidiff.ignore sources/src/infodlg.h work/src/infodlg.h
--- sources/src/infodlg.h	2009-03-07 01:53:04.000000000 +0500
+++ work/src/infodlg.h	2009-03-07 01:53:06.000000000 +0500
@@ -67,6 +67,7 @@
 	void selectPhoto();
 	void savePhoto();
 	void clearPhoto();
+	void showPhoto();
 
 private:
 	class Private;
diff -urN -X psidiff.ignore sources/src/info.ui work/src/info.ui
--- sources/src/info.ui	2009-03-07 01:53:03.000000000 +0500
+++ work/src/info.ui	2009-03-07 01:53:06.000000000 +0500
@@ -89,7 +89,7 @@
           <number>6</number>
          </property>
          <item>
-          <widget class="QLabel" name="label_photo" >
+          <widget class="ClickableLabel" name="label_photo" >
            <property name="sizePolicy" >
             <sizepolicy>
              <hsizetype>1</hsizetype>
diff -urN -X psidiff.ignore sources/src/src.pri work/src/src.pri
--- sources/src/src.pri	2009-03-07 01:53:04.000000000 +0500
+++ work/src/src.pri	2009-03-07 01:53:06.000000000 +0500
@@ -225,7 +225,8 @@
 	$$PWD/psicontactlist.h \
 	$$PWD/accountlabel.h \
 	$$PWD/psiactions.h \
-	$$PWD/bookmarkmanagedlg.h
+	$$PWD/bookmarkmanagedlg.h \
+	$$PWD/clickablelabel.h
 
 
 HEADERS += tabcompletion.h
@@ -346,7 +347,8 @@
 	$$PWD/psicon.cpp \
 	$$PWD/psiaccount.cpp \
 	$$PWD/accountlabel.cpp \
-	$$PWD/bookmarkmanagedlg.cpp
+	$$PWD/bookmarkmanagedlg.cpp \
+	$$PWD/clickablelabel.cpp
 
 whiteboarding {
 	# Whiteboarding support. Still experimental.
