Index: src/mainwin.cpp
===================================================================
--- src/mainwin.cpp	(revision 942)
+++ src/mainwin.cpp	(working copy)
@@ -36,6 +36,7 @@
 #include <QVBoxLayout>
 #include <QMenu>
 #include <QMenuItem>
+#include <QSplitter>
 
 #ifdef Q_WS_WIN
 #include <windows.h>
@@ -58,6 +59,8 @@
 #include "tipdlg.h"
 #include "mucjoindlg.h"
 #include "psicontactlist.h"
+#include "tabmanager.h"
+#include "tabdlg.h"
 
 #include "mainwin_p.h"
 
@@ -87,7 +90,7 @@
 	Private(PsiCon *, MainWin *);
 	~Private();
 
-	QVBoxLayout *vb_main;
+	QVBoxLayout *vb_roster;
 	bool onTop, asTool;
 	QMenu *mainMenu, *statusMenu, *optionsMenu, *toolsMenu;
 	int sbState;
@@ -266,23 +269,36 @@
 	d->old_trayicon = PsiOptions::instance()->getOption("options.ui.systemtray.use-old").toBool();
 #endif
 
-	QWidget *center = new QWidget (this, "Central widget");
-	setCentralWidget ( center );
+//	QWidget *center = new QWidget (this, "Central widget");
+//	setCentralWidget ( center );
+//	d->hb_main = new QHBoxLayout(center);
+	
+	
+	QSplitter *splitter = new QSplitter(this);
+	setCentralWidget(splitter);
+	
+	QWidget *rosterBar = new QWidget;
+	TabDlg *mainTabs = d->psi->tabManager()->newTabs(0);
+	d->psi->tabManager()->setPreferredTabsForKind('C', mainTabs);
+	d->psi->tabManager()->setPreferredTabsForKind('M', mainTabs);
+	splitter->addWidget(rosterBar);
+	splitter->addWidget(mainTabs);
+	
 
-	d->vb_main = new QVBoxLayout(center);
-	cvlist = new ContactView(center);
+	d->vb_roster = new QVBoxLayout(rosterBar);
+	cvlist = new ContactView(rosterBar);
 
 	int layoutMargin = 2;
 #ifdef Q_WS_MAC
 	layoutMargin = 0;
 	cvlist->setFrameShape(QFrame::NoFrame);
 #endif
-	d->vb_main->setMargin(layoutMargin);
-	d->vb_main->setSpacing(layoutMargin);
+	d->vb_roster->setMargin(layoutMargin);
+	d->vb_roster->setSpacing(layoutMargin);
 
 	// create search bar
-	d->searchWidget = new QWidget(centralWidget());
-	d->vb_main->addWidget(d->searchWidget);
+	d->searchWidget = new QWidget(rosterBar);
+	d->vb_roster->addWidget(d->searchWidget);
 	QHBoxLayout* searchLayout = new QHBoxLayout(d->searchWidget);
 	searchLayout->setMargin(0);
 	searchLayout->setSpacing(0);
@@ -296,13 +312,13 @@
 	searchLayout->addWidget(d->searchPb);
 	d->searchWidget->setVisible(false);
 	//add contact view
-	d->vb_main->addWidget(cvlist);
+	d->vb_roster->addWidget(cvlist);
 
 #ifdef Q_WS_MAC
 	// Disable the empty vertical scrollbar:
 	// it's here because of weird code in q3scrollview.cpp
 	// Q3ScrollView::updateScrollBars() around line 877
-	d->vb_main->addSpacing(4);
+	d->vb_roster->addSpacing(4);
 #endif
 
 	d->statusMenu = new QMenu(this);
Index: src/psicon.h
===================================================================
--- src/psicon.h	(revision 942)
+++ src/psicon.h	(working copy)
@@ -48,6 +48,7 @@
 class PsiActionList;
 class PsiToolBar;
 class TabDlg;
+class TabManager;
 class AccountsComboBox;
 class ChatDlg;
 class TuneController;
@@ -77,6 +78,7 @@
 	TuneController* tuneController() const;
 	ProxyManager *proxy() const;
 	FileTransDlg *ftdlg() const;
+	TabManager *tabManager() const;
 
 	QWidget *dialogFind(const char *className);
 	void dialogRegister(QWidget *w);
Index: src/psicon.cpp
===================================================================
--- src/psicon.cpp	(revision 942)
+++ src/psicon.cpp	(working copy)
@@ -652,6 +652,11 @@
 	return d->tuneController;
 }
 
+TabManager *PsiCon::tabManager() const
+{
+	return d->tabManager;
+}
+
 void PsiCon::closeProgram()
 {
 	quit(QuitProgram);
Index: src/tabs/tabdlg.cpp
===================================================================
--- src/tabs/tabdlg.cpp	(revision 942)
+++ src/tabs/tabdlg.cpp	(working copy)
@@ -333,6 +333,7 @@
 void TabDlg::addTab(TabbableWidget* tab)
 {
 	setUpdatesEnabled(false);
+	act_close_->setEnabled(true);
 	tabs_.append(tab);
 	tabWidget_->addTab(tab, captionForTab(tab));
 
@@ -413,8 +414,13 @@
 
 void TabDlg::checkHasChats()
 {
-	if (tabWidget_->count() > 0)
+	if (tabWidget_->count() > 0) {
 		return;
+	}
+	else if (window() == this) {
+		act_close_->setEnabled(false);
+		return;
+	}
 	deleteLater();
 }
 
