diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp
index afd08aa9..78d3fd54 100644
--- a/src/core/UBSettings.cpp
+++ b/src/core/UBSettings.cpp
@@ -206,7 +206,9 @@ void UBSettings::init()
     appToolBarOrientationVertical = new UBSetting(this, "App", "ToolBarOrientationVertical", false);
     navigPaletteWidth = new UBSetting(this, "Board", "NavigPaletteWidth", 270);
     rightLibPaletteWidth = new UBSetting(this, "Board", "RightLibPaletteWidth", 270);
+    rightLibPaletteIsCollapsed = new UBSetting(this,"Board", "RightLibPaletteIsCollapsed",false);
     leftLibPaletteWidth = new UBSetting(this, "Board", "LeftLibPaletteWidth",270);
+    leftLibPaletteIsCollapsed = new UBSetting(this,"Board","LeftLibPaletteIsCollapsed",false);
 
     appIsInSoftwareUpdateProcess = new UBSetting(this, "App", "IsInSoftwareUpdateProcess", false);
     appLastSessionDocumentUUID = new UBSetting(this, "App", "LastSessionDocumentUUID", "");
diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h
index 4e8c9666..acb4b28a 100644
--- a/src/core/UBSettings.h
+++ b/src/core/UBSettings.h
@@ -316,7 +316,9 @@ class UBSettings : public QObject
 
         UBSetting* navigPaletteWidth;
         UBSetting* rightLibPaletteWidth;
+        UBSetting* rightLibPaletteIsCollapsed;
         UBSetting* leftLibPaletteWidth;
+        UBSetting* leftLibPaletteIsCollapsed;
 
         UBSetting* communityUser;
         UBSetting* communityPsw;
diff --git a/src/gui/UBDockPalette.cpp b/src/gui/UBDockPalette.cpp
index d62c0c7b..935f8549 100644
--- a/src/gui/UBDockPalette.cpp
+++ b/src/gui/UBDockPalette.cpp
@@ -29,55 +29,55 @@
  * \brief The constructor
  */
 UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, const char *name)
-    :QWidget(parent, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint)
-    , mOrientation(eUBDockOrientation_Left)
-    , mPreferredWidth(100)
-    , mPreferredHeight(100)
-    , mCanResize(false)
-    , mResized(false)
-    , mCollapseWidth(150)
-    , mLastWidth(-1)
-    , mHTab(0)
-    , mpStackWidget(NULL)
-    , mpLayout(NULL)
-    , mCurrentTab(0)
-    , mPaletteType(paletteType)
-    , mTabPalette(new UBTabDockPalette(this, parent))
-{
-    setObjectName(name);
-
-    mpLayout = new QVBoxLayout();
-    setLayout(mpLayout);
-
-    mpStackWidget = new QStackedWidget(this);
-    mpLayout->addWidget(mpStackWidget);
-
-    // clear the tab widgets
-    mTabWidgets.clear();
-
-    // We let 2 pixels in order to keep a small border for the resizing
-    setMinimumWidth(0);
-
-    if (parent)
-    {
-        setAttribute(Qt::WA_NoMousePropagation);
-        setAttribute(Qt::WA_TranslucentBackground);
-    }
-    else
-    {
-        // standalone window
-        setAttribute(Qt::WA_TranslucentBackground);
-    }
-
-    mBackgroundBrush = QBrush(UBSettings::paletteColor);
-
-    // This is the only way to set the background as transparent!
-    setStyleSheet("QWidget {background-color: transparent}");
-
-    // Set the position of the tab
-    onToolbarPosUpdated();
-    connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated()));
-    connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished()));
+:QWidget(parent, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint)
+, mOrientation(eUBDockOrientation_Left)
+, mPreferredWidth(100)
+, mPreferredHeight(100)
+, mCanResize(false)
+, mResized(false)
+, mCollapseWidth(150)
+, mLastWidth(-1)
+, mHTab(0)
+, mpStackWidget(NULL)
+, mpLayout(NULL)
+, mCurrentTab(0)
+, mPaletteType(paletteType)
+, mTabPalette(new UBTabDockPalette(this, parent))
+{
+	setObjectName(name);
+
+	mpLayout = new QVBoxLayout();
+	setLayout(mpLayout);
+
+	mpStackWidget = new QStackedWidget(this);
+	mpLayout->addWidget(mpStackWidget);
+
+	// clear the tab widgets
+	mTabWidgets.clear();
+
+	// We let 2 pixels in order to keep a small border for the resizing
+	setMinimumWidth(0);
+
+	if (parent)
+	{
+		setAttribute(Qt::WA_NoMousePropagation);
+		setAttribute(Qt::WA_TranslucentBackground);
+	}
+	else
+	{
+		// standalone window
+		setAttribute(Qt::WA_TranslucentBackground);
+	}
+
+	mBackgroundBrush = QBrush(UBSettings::paletteColor);
+
+	// This is the only way to set the background as transparent!
+	setStyleSheet("QWidget {background-color: transparent}");
+
+	// Set the position of the tab
+	onToolbarPosUpdated();
+	connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated()));
+	connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished()));
 }
 
 /**
@@ -85,20 +85,20 @@ UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, co
  */
 UBDockPalette::~UBDockPalette()
 {
-    if(NULL != mpStackWidget)
-    {
-        delete mpStackWidget;
-        mpStackWidget = NULL;
-    }
-    if(NULL != mpLayout)
-    {
-        delete mpLayout;
-        mpLayout = NULL;
-    }
-    if (NULL != mTabPalette) {
-        delete mTabPalette;
-        mTabPalette = NULL;
-    }
+	if(NULL != mpStackWidget)
+	{
+		delete mpStackWidget;
+		mpStackWidget = NULL;
+	}
+	if(NULL != mpLayout)
+	{
+		delete mpLayout;
+		mpLayout = NULL;
+	}
+	if (NULL != mTabPalette) {
+		delete mTabPalette;
+		mTabPalette = NULL;
+	}
 }
 
 /**
@@ -107,7 +107,7 @@ UBDockPalette::~UBDockPalette()
  */
 eUBDockOrientation UBDockPalette::orientation()
 {
-    return mOrientation;
+	return mOrientation;
 }
 
 /**
@@ -116,19 +116,19 @@ eUBDockOrientation UBDockPalette::orientation()
  */
 void UBDockPalette::setOrientation(eUBDockOrientation orientation)
 {
-    // Set the size
-    mOrientation = orientation;
+	// Set the size
+	mOrientation = orientation;
 
-    if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right)
-    {
-	setMaximumHeight(parentWidget()->height());
-	setMinimumHeight(maximumHeight());
-    }
-    else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom)
-    {
-	setMaximumWidth(parentWidget()->width());
-	setMinimumWidth(maximumWidth());
-    }
+	if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right)
+	{
+		setMaximumHeight(parentWidget()->height());
+		setMinimumHeight(maximumHeight());
+	}
+	else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom)
+	{
+		setMaximumWidth(parentWidget()->width());
+		setMinimumWidth(maximumWidth());
+	}
 }
 
 /**
@@ -137,32 +137,32 @@ void UBDockPalette::setOrientation(eUBDockOrientation orientation)
  */
 void UBDockPalette::resizeEvent(QResizeEvent *event)
 {
-    Q_UNUSED(event);
-    updateMaxWidth();
-    if(parentWidget())
-    {
-        setMinimumHeight(parentWidget()->height());
-    }
+	Q_UNUSED(event);
+	updateMaxWidth();
+	if(parentWidget())
+	{
+		setMinimumHeight(parentWidget()->height());
+	}
 	// Set the position
-    QPoint origin;
-    switch(mOrientation)
-    {
-    case eUBDockOrientation_Right:
+	QPoint origin;
+	switch(mOrientation)
+	{
+	case eUBDockOrientation_Right:
 		origin.setX(parentWidget()->width() - this->width());
 		origin.setY(0);
-	break;
-    case eUBDockOrientation_Bottom:
-	// Not supported yet
-    case eUBDockOrientation_Top:
-	// Not supported yet
-    case eUBDockOrientation_Left:
-    default:
-	origin.setX(0);
-	origin.setY(0);
-	break;
-    }
-    move(origin.x(), origin.y());
-    moveTabs();
+		break;
+	case eUBDockOrientation_Bottom:
+		// Not supported yet
+	case eUBDockOrientation_Top:
+		// Not supported yet
+	case eUBDockOrientation_Left:
+	default:
+		origin.setX(0);
+		origin.setY(0);
+		break;
+	}
+	move(origin.x(), origin.y());
+	moveTabs();
 }
 
 /**
@@ -171,9 +171,9 @@ void UBDockPalette::resizeEvent(QResizeEvent *event)
  */
 void UBDockPalette::enterEvent(QEvent *event)
 {
-    Q_UNUSED(event);
-    // We want to set the cursor as an arrow everytime it enters the palette
-    setCursor(Qt::ArrowCursor);
+	Q_UNUSED(event);
+	// We want to set the cursor as an arrow everytime it enters the palette
+	setCursor(Qt::ArrowCursor);
 }
 
 /**
@@ -182,9 +182,9 @@ void UBDockPalette::enterEvent(QEvent *event)
  */
 void UBDockPalette::leaveEvent(QEvent *event)
 {
-    Q_UNUSED(event);
-    // Restore the cursor to its previous shape
-    unsetCursor();
+	Q_UNUSED(event);
+	// Restore the cursor to its previous shape
+	unsetCursor();
 }
 
 /**
@@ -193,38 +193,38 @@ void UBDockPalette::leaveEvent(QEvent *event)
  */
 void UBDockPalette::paintEvent(QPaintEvent *event)
 {
-    Q_UNUSED(event);
-    QPainter painter(this);
-    painter.setRenderHint(QPainter::Antialiasing);
-    painter.setPen(Qt::NoPen);
-    painter.setBrush(mBackgroundBrush);
-    QPainterPath path;
-    path.setFillRule(Qt::WindingFill);
-
-    int nbTabs = mTabWidgets.size();
-    if(0 < nbTabs)
-    {
-        // First draw the BIG RECTANGLE (I write it big because the rectangle is big...)
-        if(mOrientation == eUBDockOrientation_Left)
-        {
-            path.addRect(0.0, 0.0, width(), height());
-        }
-        else if(mOrientation == eUBDockOrientation_Right)
-        {
-            path.addRect(0.0, 0.0, width(), height());
-        }
-
-        // THEN DRAW THE small tabs (yes, the tabs are small...)
-        if(eUBDockTabOrientation_Up == mTabsOrientation)
-        {
-            mHTab = border();
-        }
-        else
-        {
-            mHTab = height() - border() - nbTabs*TABSIZE - (nbTabs-1)*tabSpacing();
-        }
-        painter.drawPath(path);
-    }
+	Q_UNUSED(event);
+	QPainter painter(this);
+	painter.setRenderHint(QPainter::Antialiasing);
+	painter.setPen(Qt::NoPen);
+	painter.setBrush(mBackgroundBrush);
+	QPainterPath path;
+	path.setFillRule(Qt::WindingFill);
+
+	int nbTabs = mTabWidgets.size();
+	if(0 < nbTabs)
+	{
+		// First draw the BIG RECTANGLE (I write it big because the rectangle is big...)
+		if(mOrientation == eUBDockOrientation_Left)
+		{
+			path.addRect(0.0, 0.0, width(), height());
+		}
+		else if(mOrientation == eUBDockOrientation_Right)
+		{
+			path.addRect(0.0, 0.0, width(), height());
+		}
+
+		// THEN DRAW THE small tabs (yes, the tabs are small...)
+		if(eUBDockTabOrientation_Up == mTabsOrientation)
+		{
+			mHTab = border();
+		}
+		else
+		{
+			mHTab = height() - border() - nbTabs*TABSIZE - (nbTabs-1)*tabSpacing();
+		}
+		painter.drawPath(path);
+	}
 }
 
 /**
@@ -233,11 +233,11 @@ void UBDockPalette::paintEvent(QPaintEvent *event)
  */
 void UBDockPalette::setBackgroundBrush(const QBrush &brush)
 {
-    if (mBackgroundBrush != brush)
-    {
-	mBackgroundBrush = brush;
-	update();
-    }
+	if (mBackgroundBrush != brush)
+	{
+		mBackgroundBrush = brush;
+		update();
+	}
 }
 
 /**
@@ -246,7 +246,7 @@ void UBDockPalette::setBackgroundBrush(const QBrush &brush)
  */
 int UBDockPalette::border()
 {
-    return 15;
+	return 15;
 }
 
 /**
@@ -255,7 +255,7 @@ int UBDockPalette::border()
  */
 int UBDockPalette::radius()
 {
-    return 5;
+	return 5;
 }
 
 /**
@@ -263,7 +263,7 @@ int UBDockPalette::radius()
  */
 void UBDockPalette::updateMaxWidth()
 {
-    // Only the inherited class will overload this method
+	// Only the inherited class will overload this method
 }
 
 /**
@@ -272,7 +272,7 @@ void UBDockPalette::updateMaxWidth()
  */
 int UBDockPalette::collapseWidth()
 {
-    return mCollapseWidth;
+	return mCollapseWidth;
 }
 
 /**
@@ -280,17 +280,17 @@ int UBDockPalette::collapseWidth()
  */
 void UBDockPalette::tabClicked(int tabIndex)
 {
-    // If the current tab is not the clicked one, show its content
-    if(mCurrentTab != tabIndex)
-    {
-        showTabWidget(tabIndex);
-    }
-    // else collapse the palette
-    else
-    {
-        toggleCollapseExpand();
-    }
-    mTabPalette->update();
+	// If the current tab is not the clicked one, show its content
+	if(mCurrentTab != tabIndex)
+	{
+		showTabWidget(tabIndex);
+	}
+	// else collapse the palette
+	else
+	{
+		toggleCollapseExpand();
+	}
+	mTabPalette->update();
 }
 
 /**
@@ -299,19 +299,13 @@ void UBDockPalette::tabClicked(int tabIndex)
  */
 void UBDockPalette::showTabWidget(int tabIndex)
 {
-    mpStackWidget->setCurrentIndex(tabIndex);
-    mCurrentTab = tabIndex;
+	mpStackWidget->setCurrentIndex(tabIndex);
+	mCurrentTab = tabIndex;
 
-    // Expand it if collapsed
-    if(mLastWidth != -1)
-    {
-        toggleCollapseExpand();
-    }
-
-    // Update the current tab index
-    if(NULL != (dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
-        mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex))->name();
-    }
+	// Update the current tab index
+	if(NULL != (dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
+		mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex))->name();
+	}
 
 }
 
@@ -320,18 +314,12 @@ void UBDockPalette::showTabWidget(int tabIndex)
  */
 void UBDockPalette::toggleCollapseExpand()
 {
-    if(mLastWidth == -1)
-    {
-        // The palette must be collapsed
-        mLastWidth = width();
-        resize(0, height());
-    }
-    else
-    {
-        // The palette will be expanded
-        resize(mLastWidth, height());
-        mLastWidth = -1;
-    }
+	if(width() < mCollapseWidth)
+		resize(mLastWidth,height());
+	else{
+		mLastWidth = width();
+		resize(0,height());
+	}
 }
 
 /**
@@ -340,7 +328,7 @@ void UBDockPalette::toggleCollapseExpand()
  */
 void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation)
 {
-    mTabsOrientation = orientation;
+	mTabsOrientation = orientation;
 }
 
 /**
@@ -348,17 +336,17 @@ void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation)
  */
 void UBDockPalette::onToolbarPosUpdated()
 {
-    // Get the position of the tab
-    if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
-    {
-        setTabsOrientation(eUBDockTabOrientation_Up);
-    }
-    else
-    {
-        setTabsOrientation(eUBDockTabOrientation_Down);
-    }
-    moveTabs();
-    update();
+	// Get the position of the tab
+	if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
+	{
+		setTabsOrientation(eUBDockTabOrientation_Up);
+	}
+	else
+	{
+		setTabsOrientation(eUBDockTabOrientation_Down);
+	}
+	moveTabs();
+	update();
 }
 
 /**
@@ -367,7 +355,7 @@ void UBDockPalette::onToolbarPosUpdated()
  */
 int UBDockPalette::customMargin()
 {
-    return 5;
+	return 5;
 }
 
 /**
@@ -376,15 +364,15 @@ int UBDockPalette::customMargin()
  */
 void UBDockPalette::addTab(UBDockPaletteWidget *widget)
 {
-    if(!mTabWidgets.contains(widget) && widget->visibleState())
-    {
-        widget->setVisible(true);
-        mTabWidgets.append(widget);
-        mpStackWidget->addWidget(widget);
-        mpStackWidget->setCurrentWidget(widget);
-        resizeTabs();
-        update();
-    }
+	if(!mTabWidgets.contains(widget) && widget->visibleState())
+	{
+		widget->setVisible(true);
+		mTabWidgets.append(widget);
+		mpStackWidget->addWidget(widget);
+		mpStackWidget->setCurrentWidget(widget);
+		resizeTabs();
+		update();
+	}
 }
 /**
  * \brief Remove the given tab
@@ -392,16 +380,16 @@ void UBDockPalette::addTab(UBDockPaletteWidget *widget)
  */
 void UBDockPalette::removeTab(UBDockPaletteWidget* widget)
 {
-    int nWidget = mTabWidgets.indexOf(widget);
-    if( nWidget >= 0 )
-    {
-        mpStackWidget->removeWidget(widget);
-        mTabWidgets.remove(nWidget);
-        widget->hide();
-        update();
-    }
-    resizeTabs();
-    mCurrentTab = qMax(mCurrentTab - 1, 0);
+	int nWidget = mTabWidgets.indexOf(widget);
+	if( nWidget >= 0 )
+	{
+		mpStackWidget->removeWidget(widget);
+		mTabWidgets.remove(nWidget);
+		widget->hide();
+		update();
+	}
+	resizeTabs();
+	mCurrentTab = qMax(mCurrentTab - 1, 0);
 }
 
 /**
@@ -410,7 +398,7 @@ void UBDockPalette::removeTab(UBDockPaletteWidget* widget)
  */
 void UBDockPalette::onResizeRequest(QResizeEvent *event)
 {
-    resizeEvent(event);
+	resizeEvent(event);
 }
 
 /**
@@ -419,7 +407,7 @@ void UBDockPalette::onResizeRequest(QResizeEvent *event)
  */
 int UBDockPalette::tabSpacing()
 {
-    return 2;
+	return 2;
 }
 
 /**
@@ -428,11 +416,11 @@ int UBDockPalette::tabSpacing()
  */
 void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget)
 {
-    if (mRegisteredWidgets.contains(widget))
-    {
-        widget->setVisibleState(true);
-        addTab(widget);
-    }
+	if (mRegisteredWidgets.contains(widget))
+	{
+		widget->setVisibleState(true);
+		addTab(widget);
+	}
 }
 
 /**
@@ -441,11 +429,11 @@ void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget)
  */
 void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget)
 {
-    if (mRegisteredWidgets.contains(widget))
-    {
-        widget->setVisibleState(false);
-        removeTab(widget);
-    }
+	if (mRegisteredWidgets.contains(widget))
+	{
+		widget->setVisibleState(false);
+		removeTab(widget);
+	}
 }
 
 /**
@@ -453,11 +441,11 @@ void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget)
  */
 void UBDockPalette::connectSignals()
 {
-    for(int i=0; i < mRegisteredWidgets.size(); i++)
-    {
-        connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*)));
-        connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*)));
-    }
+	for(int i=0; i < mRegisteredWidgets.size(); i++)
+	{
+		connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*)));
+		connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*)));
+	}
 }
 
 /**
@@ -466,194 +454,194 @@ void UBDockPalette::connectSignals()
  */
 void UBDockPalette::registerWidget(UBDockPaletteWidget *widget)
 {
-    if(!mRegisteredWidgets.contains(widget))
-    {
-        // Update the parent of this widget
-        widget->setParent(this);
-        mRegisteredWidgets.append(widget);
+	if(!mRegisteredWidgets.contains(widget))
+	{
+		// Update the parent of this widget
+		widget->setParent(this);
+		mRegisteredWidgets.append(widget);
 
-        // By default, the widget is hidden
-        widget->hide();
-    }
+		// By default, the widget is hidden
+		widget->hide();
+	}
 }
 
 /**
-  * \brief Handles the 'all download finished' notification
-  */
+ * \brief Handles the 'all download finished' notification
+ */
 void UBDockPalette::onAllDownloadsFinished()
 {
-    for(int i=0; i<mTabWidgets.size(); i++){
-        UBDockPaletteWidget* pW = mTabWidgets.at(i);
-        if(NULL != pW && mCrntTabWidget == pW->name()){
-            mpStackWidget->setCurrentWidget(pW);
-        }
-    }
+	for(int i=0; i<mTabWidgets.size(); i++){
+		UBDockPaletteWidget* pW = mTabWidgets.at(i);
+		if(NULL != pW && mCrntTabWidget == pW->name()){
+			mpStackWidget->setCurrentWidget(pW);
+		}
+	}
 }
 
 void UBDockPalette::moveTabs()
 {
- //   if (!mHTab) {
-        if(eUBDockTabOrientation_Up == mTabsOrientation) {
-            mHTab = border();
-        } else {
-            mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing();
-        }
-//    }
-
-    QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset);
-
-    switch (mOrientation) {
-    case eUBDockOrientation_Left:
-        origin.setX(width());
-        break;
-    case eUBDockOrientation_Right:
-        if (parentWidget()) {
-            origin.setX(parentWidget()->width() - width() - border() * 2);
-        }
-        break;
-    case eUBDockOrientation_Top: ;
-    case eUBDockOrientation_Bottom: ;
-    }
-
-    mTabPalette->move(origin.x(), origin.y());
+	//   if (!mHTab) {
+	if(eUBDockTabOrientation_Up == mTabsOrientation) {
+		mHTab = border();
+	} else {
+		mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing();
+	}
+	//    }
+
+	QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset);
+
+	switch (mOrientation) {
+	case eUBDockOrientation_Left:
+		origin.setX(width());
+		break;
+	case eUBDockOrientation_Right:
+		if (parentWidget()) {
+			origin.setX(parentWidget()->width() - width() - border() * 2);
+		}
+		break;
+	case eUBDockOrientation_Top: ;
+	case eUBDockOrientation_Bottom: ;
+	}
+
+	mTabPalette->move(origin.x(), origin.y());
 }
 void UBDockPalette::resizeTabs()
 {
-    int numTabs = mTabWidgets.size();
-    mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing());
+	int numTabs = mTabWidgets.size();
+	mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing());
 }
 QRect UBDockPalette::getTabPaletteRect()
 {
-    QRect tabsRect = mTabPalette->rect();
-    QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft());
-    QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight());
+	QRect tabsRect = mTabPalette->rect();
+	QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft());
+	QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight());
 
-    return QRect(topLeft, bottomRight);
+	return QRect(topLeft, bottomRight);
 }
 void UBDockPalette::assignParent(QWidget *widget)
 {
-    setParent(widget);
-    mTabPalette->setParent(widget);
+	setParent(widget);
+	mTabPalette->setParent(widget);
 }
 void UBDockPalette::setVisible(bool visible)
 {
-    QWidget::setVisible(visible);
-    mTabPalette->setVisible(visible);
+	QWidget::setVisible(visible);
+	mTabPalette->setVisible(visible);
 }
 
 bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode)
 {
-    bool hasVisibleElements = false;
-    //-------------------------------//
-    // get full right palette widgets list, parse it, show all widgets for BOARD mode, and hide all other
-    for(int i = 0; i < mRegisteredWidgets.size(); i++)
-    {
-        UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i);
-        if( pNextWidget != NULL )
-        {
-            if( pNextWidget->visibleInMode(mode) ) 
-            {
-                addTab(pNextWidget);
-                hasVisibleElements = true;
-            }
-            else
-            {
-                removeTab(pNextWidget);
-            }
-        }
-    }
-    //-------------------------------//
-
-    if(mRegisteredWidgets.size() > 0)
-        showTabWidget(0);
-    
-    update();
-
-    return hasVisibleElements;
+	bool hasVisibleElements = false;
+	//-------------------------------//
+	// get full right palette widgets list, parse it, show all widgets for BOARD mode, and hide all other
+	for(int i = 0; i < mRegisteredWidgets.size(); i++)
+	{
+		UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i);
+		if( pNextWidget != NULL )
+		{
+			if( pNextWidget->visibleInMode(mode) )
+			{
+				addTab(pNextWidget);
+				hasVisibleElements = true;
+			}
+			else
+			{
+				removeTab(pNextWidget);
+			}
+		}
+	}
+	//-------------------------------//
+
+	if(mRegisteredWidgets.size() > 0)
+		showTabWidget(0);
+
+	update();
+
+	return hasVisibleElements;
 }
 
 
 UBTabDockPalette::UBTabDockPalette(UBDockPalette *dockPalette, QWidget *parent) :
-    QWidget(parent)
-  , dock(dockPalette)
-  , mVerticalOffset(0)
-  , mFlotable(false)
+    		QWidget(parent)
+, dock(dockPalette)
+, mVerticalOffset(0)
+, mFlotable(false)
 {
-    int numTabs = dock->mTabWidgets.size();
-    resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing());
+	int numTabs = dock->mTabWidgets.size();
+	resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing());
 
-    setAttribute(Qt::WA_TranslucentBackground);
+	setAttribute(Qt::WA_TranslucentBackground);
 }
 
 void UBTabDockPalette::paintEvent(QPaintEvent *)
 {
-    int nTabs = dock->mTabWidgets.size();
-    if (nTabs <= 0) {
-        qDebug() << "not enough tabs";
-        return;
-    }
-
-    QPainter painter(this);
-    painter.setRenderHint(QPainter::Antialiasing);
-    painter.setPen(Qt::NoPen);
-    painter.setBrush(dock->mBackgroundBrush);
-
-    int yFrom = 0;
-    for (int i = 0; i < nTabs; i++) {
-        UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i);
-        QPainterPath path;
-        path.setFillRule(Qt::WindingFill);
-        QPixmap iconPixmap;
-
-        switch (dock->mOrientation) {
-        case eUBDockOrientation_Left:
-            path.addRect(0, yFrom, width() / 2, TABSIZE);
-            path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
-            if (pCrntWidget) {
-                if(dock->mCollapseWidth >= dock->width()) {
-                    // Get the collapsed icon
-                    iconPixmap = pCrntWidget->iconToRight();
-                } else {
-                    // Get the expanded icon
-                    iconPixmap = pCrntWidget->iconToLeft();
-                }
-
-            }
-            break;
-
-        case eUBDockOrientation_Right:
-            path.addRect(width() /2, yFrom, width() / 2, TABSIZE);
-            path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
-            if (pCrntWidget) {
-                if(dock->mCollapseWidth >= dock->width()) {
-                    // Get the collapsed icon
-                    iconPixmap = pCrntWidget->iconToLeft();
-                } else {
-                    // Get the expanded icon
-                    iconPixmap = pCrntWidget->iconToRight();
-                }
-            }
-            break;
-
-        case eUBDockOrientation_Top: ;
-        case eUBDockOrientation_Bottom: ;
-        default:
-            break;
-        }
-
-        painter.save();
-        QPixmap transparencyPix(":/images/tab_mask.png");
-        if (dock->mCurrentTab != i) {
-            iconPixmap.setAlphaChannel(transparencyPix);
-            QColor color(0x7F, 0x7F, 0x7F, 0x3F);
-            painter.setBrush(QBrush(color));
-        }
-
-        painter.drawPath(path);
-        painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap);
-        yFrom += (TABSIZE + dock->tabSpacing());
-        painter.restore();
-    }
+	int nTabs = dock->mTabWidgets.size();
+	if (nTabs <= 0) {
+		qDebug() << "not enough tabs";
+		return;
+	}
+
+	QPainter painter(this);
+	painter.setRenderHint(QPainter::Antialiasing);
+	painter.setPen(Qt::NoPen);
+	painter.setBrush(dock->mBackgroundBrush);
+
+	int yFrom = 0;
+	for (int i = 0; i < nTabs; i++) {
+		UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i);
+		QPainterPath path;
+		path.setFillRule(Qt::WindingFill);
+		QPixmap iconPixmap;
+
+		switch (dock->mOrientation) {
+		case eUBDockOrientation_Left:
+			path.addRect(0, yFrom, width() / 2, TABSIZE);
+			path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
+			if (pCrntWidget) {
+				if(dock->mCollapseWidth >= dock->width()) {
+					// Get the collapsed icon
+					iconPixmap = pCrntWidget->iconToRight();
+				} else {
+					// Get the expanded icon
+					iconPixmap = pCrntWidget->iconToLeft();
+				}
+
+			}
+			break;
+
+		case eUBDockOrientation_Right:
+			path.addRect(width() /2, yFrom, width() / 2, TABSIZE);
+			path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
+			if (pCrntWidget) {
+				if(dock->mCollapseWidth >= dock->width()) {
+					// Get the collapsed icon
+					iconPixmap = pCrntWidget->iconToLeft();
+				} else {
+					// Get the expanded icon
+					iconPixmap = pCrntWidget->iconToRight();
+				}
+			}
+			break;
+
+		case eUBDockOrientation_Top: ;
+		case eUBDockOrientation_Bottom: ;
+		default:
+			break;
+		}
+
+		painter.save();
+		QPixmap transparencyPix(":/images/tab_mask.png");
+		if (dock->mCurrentTab != i) {
+			iconPixmap.setAlphaChannel(transparencyPix);
+			QColor color(0x7F, 0x7F, 0x7F, 0x3F);
+			painter.setBrush(QBrush(color));
+		}
+
+		painter.drawPath(path);
+		painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap);
+		yFrom += (TABSIZE + dock->tabSpacing());
+		painter.restore();
+	}
 }
 UBTabDockPalette::~UBTabDockPalette()
 {
@@ -661,97 +649,97 @@ UBTabDockPalette::~UBTabDockPalette()
 
 void UBTabDockPalette::mousePressEvent(QMouseEvent *event)
 {
-    dock->mClickTime = QTime::currentTime();
-    // The goal here is to verify if the user can resize the widget.
-    // It is only possible to resize it if the border is selected
-    QPoint p = event->pos();
-    dock->mMousePressPos = p;
-    dock->mResized = false;
-
-    switch(dock->mOrientation) {
-    case eUBDockOrientation_Left:
-        dock->mCanResize = true;
-        break;
-    case eUBDockOrientation_Right:
-        dock->mCanResize = true;
-        break;
-    case eUBDockOrientation_Top:
-        // Not supported yet
-        break;
-    case eUBDockOrientation_Bottom:
-        // Not supported yet
-        break;
-    default:
-        break;
-    }
+	dock->mClickTime = QTime::currentTime();
+	// The goal here is to verify if the user can resize the widget.
+	// It is only possible to resize it if the border is selected
+	QPoint p = event->pos();
+	dock->mMousePressPos = p;
+	dock->mResized = false;
+
+	switch(dock->mOrientation) {
+	case eUBDockOrientation_Left:
+		dock->mCanResize = true;
+		break;
+	case eUBDockOrientation_Right:
+		dock->mCanResize = true;
+		break;
+	case eUBDockOrientation_Top:
+		// Not supported yet
+		break;
+	case eUBDockOrientation_Bottom:
+		// Not supported yet
+		break;
+	default:
+		break;
+	}
 }
 void UBTabDockPalette::mouseMoveEvent(QMouseEvent *event)
 {
-    QPoint p = event->pos();
-
-    if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance()))
-    {
-        if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) {
-            qDebug() << "y differences" << dock->mMousePressPos.y() << p.y();
-            mVerticalOffset += p.y() - dock->mMousePressPos.y();
-            move(this->pos().x(),  p.y());
-        }
-
-        switch(dock->mOrientation) {
-
-        case eUBDockOrientation_Left:
-            p.setX(p.x() + dock->width());
-            if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) {
-                dock->resize(0, dock->height());
-                dock->mLastWidth = dock->collapseWidth() + 1;
-                dock->mResized = true;
-            } else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) {
-                dock->resize(p.x(), dock->height());
-                dock->mResized = true;
-            }
-            break;
-
-        case eUBDockOrientation_Right:
-            p.setX(p.x() - 2 * dock->border());
-            if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) {
-                dock->resize(0, dock->height());
-                dock->mLastWidth = dock->collapseWidth() + 1;
-                dock->mResized = true;
-            } else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) {
-                dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height());
-                dock->mResized = true;
-            }
-            break;
-
-        case eUBDockOrientation_Top:
-        case eUBDockOrientation_Bottom:
-            if(p.y() <= dock->maximumHeight()) {
-                dock->resize(width(), p.y());
-                dock->mResized = true;
-            }
-            break;
-
-        default:
-            break;
-        }
-    }
+	QPoint p = event->pos();
+
+	if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance()))
+	{
+		if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) {
+			qDebug() << "y differences" << dock->mMousePressPos.y() << p.y();
+			mVerticalOffset += p.y() - dock->mMousePressPos.y();
+			move(this->pos().x(),  p.y());
+		}
+
+		switch(dock->mOrientation) {
+
+		case eUBDockOrientation_Left:
+			p.setX(p.x() + dock->width());
+			if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) {
+				dock->resize(0, dock->height());
+				//dock->mLastWidth = dock->collapseWidth() + 1;
+				dock->mResized = true;
+			} else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) {
+				dock->resize(p.x(), dock->height());
+				dock->mResized = true;
+			}
+			break;
+
+		case eUBDockOrientation_Right:
+			p.setX(p.x() - 2 * dock->border());
+			if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) {
+				dock->resize(0, dock->height());
+				//dock->mLastWidth = dock->collapseWidth() + 1;
+				dock->mResized = true;
+			} else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) {
+				dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height());
+				dock->mResized = true;
+			}
+			break;
+
+		case eUBDockOrientation_Top:
+		case eUBDockOrientation_Bottom:
+			if(p.y() <= dock->maximumHeight()) {
+				dock->resize(width(), p.y());
+				dock->mResized = true;
+			}
+			break;
+
+		default:
+			break;
+		}
+	}
 }
 void UBTabDockPalette::mouseReleaseEvent(QMouseEvent *event)
 {
-    Q_UNUSED(event);
-    if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) {
-        int nbTabs = dock->mTabWidgets.size();
-        int clickedTab = 0;
-        // If the clicked position is in the tab, perform the related action
-
-        if(dock->mMousePressPos.x() >= 0 &&
-                dock->mMousePressPos.x() <= width() &&
-                dock->mMousePressPos.y() >= 0 &&
-                dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) {
-
-            clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing());
-            dock->tabClicked(clickedTab);
-        }
-    }
-    dock->mCanResize = false;
+	Q_UNUSED(event);
+	if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) {
+		int nbTabs = dock->mTabWidgets.size();
+		int clickedTab = 0;
+		// If the clicked position is in the tab, perform the related action
+
+		if(dock->mMousePressPos.x() >= 0 &&
+				dock->mMousePressPos.x() <= width() &&
+				dock->mMousePressPos.y() >= 0 &&
+				dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) {
+
+			clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing());
+			dock->tabClicked(clickedTab);
+		}
+	}
+	dock->mCanResize = false;
 }
diff --git a/src/gui/UBLeftPalette.cpp b/src/gui/UBLeftPalette.cpp
index 00e0a4d9..21b3521b 100644
--- a/src/gui/UBLeftPalette.cpp
+++ b/src/gui/UBLeftPalette.cpp
@@ -29,7 +29,10 @@ UBLeftPalette::UBLeftPalette(QWidget *parent, const char *name):
     mLastWidth = UBSettings::settings()->leftLibPaletteWidth->get().toInt();
     mCollapseWidth = 150;
 
-    resize(mLastWidth, parentWidget()->height());
+    if(UBSettings::settings()->leftLibPaletteIsCollapsed->get().toBool())
+    	resize(0,parentWidget()->height());
+    else
+    	resize(mLastWidth, parentWidget()->height());
 }
 
 /**
@@ -54,6 +57,9 @@ void UBLeftPalette::updateMaxWidth()
  */
 void UBLeftPalette::resizeEvent(QResizeEvent *event)
 {
-    UBSettings::settings()->leftLibPaletteWidth->set(width());
+	int newWidth = width();
+	if(newWidth > mCollapseWidth)
+		UBSettings::settings()->leftLibPaletteWidth->set(newWidth);
+    UBSettings::settings()->leftLibPaletteIsCollapsed->set(newWidth == 0);
     UBDockPalette::resizeEvent(event);
 }
diff --git a/src/gui/UBNavigatorPalette.cpp b/src/gui/UBNavigatorPalette.cpp
index ed5c7aa8..a389e3c3 100644
--- a/src/gui/UBNavigatorPalette.cpp
+++ b/src/gui/UBNavigatorPalette.cpp
@@ -33,8 +33,6 @@ UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name):
 {
     setOrientation(eUBDockOrientation_Left);
     setMaximumWidth(300);
-    //mCollapsedIcon = QPixmap(":images/pages_open.png");
-    //mIcon = QPixmap(":images/pages_close.png");
     resize(UBSettings::settings()->navigPaletteWidth->get().toInt(), height());
     mLastWidth = 300;
 
diff --git a/src/gui/UBRightPalette.cpp b/src/gui/UBRightPalette.cpp
index 26923eac..9762b5e8 100644
--- a/src/gui/UBRightPalette.cpp
+++ b/src/gui/UBRightPalette.cpp
@@ -27,11 +27,13 @@ UBRightPalette::UBRightPalette(QWidget *parent, const char *name):
 {
     setObjectName(name);
     setOrientation(eUBDockOrientation_Right);
-
-    mLastWidth = UBSettings::settings()->rightLibPaletteWidth->get().toInt();
     mCollapseWidth = 150;
 
-    resize(mLastWidth, parentWidget()->height());
+    mLastWidth = UBSettings::settings()->rightLibPaletteWidth->get().toInt();
+    if(UBSettings::settings()->rightLibPaletteIsCollapsed->get().toBool())
+    	resize(0,parentWidget()->height());
+    else
+    	resize(mLastWidth, parentWidget()->height());
 }
 
 /**
@@ -59,8 +61,11 @@ void UBRightPalette::mouseMoveEvent(QMouseEvent *event)
  */
 void UBRightPalette::resizeEvent(QResizeEvent *event)
 {
+	int newWidth = width();
+	if(newWidth > mCollapseWidth)
+		UBSettings::settings()->rightLibPaletteWidth->set(newWidth);
+    UBSettings::settings()->rightLibPaletteIsCollapsed->set(newWidth == 0);
     UBDockPalette::resizeEvent(event);
-    UBSettings::settings()->rightLibPaletteWidth->set(width());
     emit resized();
 }