diff -Baburw licq-orig/plugins/qt-gui/src/ewidgets.cpp licq-current/plugins/qt-gui/src/ewidgets.cpp
--- licq-orig/plugins/qt-gui/src/ewidgets.cpp	2007-01-28 00:00:52.000000000 +0600
+++ licq-current/plugins/qt-gui/src/ewidgets.cpp	2007-03-10 04:11:11.000000000 +0600
@@ -541,12 +541,26 @@
     setNextTab();
 }
          
+void CETabBar::mouseReleaseEvent(QMouseEvent* e)
+{
+  if(e->button() == MidButton)
+  {
+    QPoint pt = e->pos();
+    QTab *tab = selectTab(pt);
+    int t = indexOf(tab->identifier());
+    emit middleClick(t);
+  }
+  else
+    QTabBar::mousePressEvent(e);
+}
 
 //CETabWidget
 CETabWidget::CETabWidget(QWidget *parent, const char *name, WFlags f)
   : QTabWidget(parent, name, f)
 {
-  setTabBar(new CETabBar(this, "tabbar"));
+  CETabBar * tmpp = new CETabBar(this, "tabbar");
+  setTabBar(tmpp);
+  connect(tmpp, SIGNAL(middleClick(int)), this, SLOT(slot_middleClick(int)));
 }
 
 void CETabWidget::setTabColor(QWidget *w, const QColor &color)
@@ -589,6 +603,13 @@
     setNextPage();
 }
 
+void CETabWidget::slot_middleClick(int t)
+{
+  QWidget *p = page(t);
+  if(p)
+    emit sig_middleClick(p);
+}
+
 //-----CInfoField::constructor--------------------------------------------------
 CInfoField::CInfoField(QWidget *parent, bool readonly)
   : QLineEdit(parent)
diff -Baburw licq-orig/plugins/qt-gui/src/ewidgets.h licq-current/plugins/qt-gui/src/ewidgets.h
--- licq-orig/plugins/qt-gui/src/ewidgets.h	2007-03-10 18:31:33.000000000 +0600
+++ licq-current/plugins/qt-gui/src/ewidgets.h	2007-03-10 04:05:33.000000000 +0600
@@ -129,10 +130,14 @@
 
   void setPreviousTab();
   void setNextTab();
+signals:
+  void middleClick(int t);
   
 protected:
   virtual void paintLabel(QPainter *, const QRect &, QTab *, bool) const;
   virtual void wheelEvent(QWheelEvent *e);
+  virtual void mouseReleaseEvent(QMouseEvent *);
+  
   
 private:
   QMap<int, QColor> mTabColors;
@@ -144,10 +149,12 @@
 public:
   CETabWidget(QWidget * = 0, const char * = 0, WFlags = 0);
   void setTabColor(QWidget *, const QColor &);
-
   void setPreviousPage();
   void setNextPage();
-
+public slots:
+  void slot_middleClick(int t);
+signals:
+  void sig_middleClick(QWidget *p);
 protected:
   virtual void wheelEvent(QWheelEvent *e);
 };
diff -Baburw licq-orig/plugins/qt-gui/src/usereventdlg.cpp licq-current/plugins/qt-gui/src/usereventdlg.cpp
--- licq-orig/plugins/qt-gui/src/usereventdlg.cpp	2007-01-04 00:01:16.000000000 +0600
+++ licq-current/plugins/qt-gui/src/usereventdlg.cpp	2007-03-10 04:10:35.000000000 +0600
@@ -248,6 +248,12 @@
   lay->addWidget(tabw);
   connect(tabw, SIGNAL(currentChanged(QWidget *)),
           this, SLOT(slot_currentChanged(QWidget *)));
+   connect(tabw, SIGNAL(sig_middleClick(QWidget*)), this, SLOT(closeTab(QWidget*)));
+}
+
+void UserEventTabDlg::closeTab(QWidget *p)
+{
+  removeTab(p);
 }
 
 UserEventTabDlg::~UserEventTabDlg()
@@ -2577,7 +2583,7 @@
 void UserSendCommon::slot_close()
 {
   server->ProtoTypingNotification(m_lUsers.front().c_str(), m_nPPID, false, m_nConvoId);
-  
+//   printf("tab closed\n");
   if (mainwin->m_bMsgChatView)
   {
     // the window is at the front, if the timer has not expired and we close
diff -Baburw licq-orig/plugins/qt-gui/src/usereventdlg.h licq-current/plugins/qt-gui/src/usereventdlg.h
--- licq-orig/plugins/qt-gui/src/usereventdlg.h	2006-10-16 00:00:21.000000000 +0600
+++ licq-current/plugins/qt-gui/src/usereventdlg.h	2007-03-10 02:54:06.000000000 +0600
@@ -119,6 +119,7 @@
   void slot_currentChanged(QWidget *tab);
   void moveLeft();
   void moveRight();
+  void closeTab(QWidget *p);
 
 protected slots:
   void setMsgWinSticky();
