diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro
index b5b94230..57aa32a3 100644
--- a/Sankore_3.1.pro
+++ b/Sankore_3.1.pro
@@ -65,7 +65,6 @@ FORMS += resources/forms/mainWindow.ui \
    resources/forms/preferences.ui \
    resources/forms/brushProperties.ui \
    resources/forms/documents.ui \
-   resources/forms/library.ui \
    resources/forms/blackoutWidget.ui \
    resources/forms/trapFlash.ui \
    resources/forms/youTubePublishingDialog.ui \
diff --git a/resources/forms/library.ui b/resources/forms/library.ui
deleted file mode 100644
index 91aedd10..00000000
--- a/resources/forms/library.ui
+++ /dev/null
@@ -1,922 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>library</class>
- <widget class="QWidget" name="library">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>961</width>
-    <height>550</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="contextMenuPolicy">
-   <enum>Qt::DefaultContextMenu</enum>
-  </property>
-  <property name="windowTitle">
-   <string>Sankore Library</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
-    <number>0</number>
-   </property>
-   <property name="spacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="QFrame" name="topFrame">
-     <property name="frameShape">
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <property name="lineWidth">
-      <number>0</number>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QTabWidget" name="libraryTab">
-        <property name="tabShape">
-         <enum>QTabWidget::Rounded</enum>
-        </property>
-        <property name="currentIndex">
-         <number>0</number>
-        </property>
-        <property name="elideMode">
-         <enum>Qt::ElideLeft</enum>
-        </property>
-        <widget class="QWidget" name="gipTab">
-         <attribute name="title">
-          <string>Iteractive Models</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout_11">
-          <item>
-           <widget class="UBThumbnailWidget" name="gipThumbnailView">
-            <property name="contextMenuPolicy">
-             <enum>Qt::NoContextMenu</enum>
-            </property>
-            <property name="styleSheet">
-             <string notr="true"/>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="lineWidth">
-             <number>0</number>
-            </property>
-            <property name="verticalScrollBarPolicy">
-             <enum>Qt::ScrollBarAsNeeded</enum>
-            </property>
-            <property name="horizontalScrollBarPolicy">
-             <enum>Qt::ScrollBarAlwaysOff</enum>
-            </property>
-            <property name="dragMode">
-             <enum>QGraphicsView::NoDrag</enum>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="interactiveTab">
-         <attribute name="title">
-          <string>Applications</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout_3">
-          <item>
-           <widget class="QFrame" name="interactiveTopLeftFrame">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::Box</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <property name="lineWidth">
-             <number>1</number>
-            </property>
-            <layout class="QVBoxLayout" name="verticalLayout_3">
-             <property name="spacing">
-              <number>0</number>
-             </property>
-             <property name="margin">
-              <number>0</number>
-             </property>
-             <item>
-              <widget class="UBLibraryTreeWidget" name="interactiveLibraryTreeWidget">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="styleSheet">
-                <string notr="true"/>
-               </property>
-               <property name="frameShape">
-                <enum>QFrame::NoFrame</enum>
-               </property>
-               <property name="frameShadow">
-                <enum>QFrame::Plain</enum>
-               </property>
-               <property name="lineWidth">
-                <number>0</number>
-               </property>
-               <property name="dragDropMode">
-                <enum>QAbstractItemView::DropOnly</enum>
-               </property>
-               <property name="horizontalScrollMode">
-                <enum>QAbstractItemView::ScrollPerPixel</enum>
-               </property>
-               <property name="autoExpandDelay">
-                <number>2</number>
-               </property>
-               <property name="headerHidden">
-                <bool>true</bool>
-               </property>
-               <attribute name="headerVisible">
-                <bool>false</bool>
-               </attribute>
-               <column>
-                <property name="text">
-                 <string notr="true">1</string>
-                </property>
-               </column>
-              </widget>
-             </item>
-             <item>
-              <widget class="QToolButton" name="newInteractiveFolderButton">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>0</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>16777215</width>
-                 <height>42</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>New Folder</string>
-               </property>
-               <property name="icon">
-                <iconset resource="../sankore.qrc">
-                 <normaloff>:/images/toolbar/newFolder.png</normaloff>:/images/toolbar/newFolder.png</iconset>
-               </property>
-               <property name="iconSize">
-                <size>
-                 <width>32</width>
-                 <height>32</height>
-                </size>
-               </property>
-               <property name="toolButtonStyle">
-                <enum>Qt::ToolButtonTextBesideIcon</enum>
-               </property>
-               <property name="autoRaise">
-                <bool>true</bool>
-               </property>
-               <property name="arrowType">
-                <enum>Qt::NoArrow</enum>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <widget class="QToolButton" name="addInteractiveToLibraryButton">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>0</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>16777215</width>
-                 <height>42</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Import to Library</string>
-               </property>
-               <property name="icon">
-                <iconset resource="../sankore.qrc">
-                 <normaloff>:/images/toolbar/addInteractiveToLibrary.png</normaloff>:/images/toolbar/addInteractiveToLibrary.png</iconset>
-               </property>
-               <property name="iconSize">
-                <size>
-                 <width>32</width>
-                 <height>32</height>
-                </size>
-               </property>
-               <property name="toolButtonStyle">
-                <enum>Qt::ToolButtonTextBesideIcon</enum>
-               </property>
-               <property name="autoRaise">
-                <bool>true</bool>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </widget>
-          </item>
-          <item>
-           <widget class="QStackedWidget" name="interactiveLibrariesStack">
-            <widget class="QWidget" name="interactivePageLocal">
-             <layout class="QHBoxLayout" name="horizontalLayout_7">
-              <item>
-               <widget class="UBThumbnailWidget" name="interactiveThumbnailView">
-                <property name="contextMenuPolicy">
-                 <enum>Qt::NoContextMenu</enum>
-                </property>
-                <property name="styleSheet">
-                 <string notr="true"/>
-                </property>
-                <property name="frameShape">
-                 <enum>QFrame::NoFrame</enum>
-                </property>
-                <property name="lineWidth">
-                 <number>0</number>
-                </property>
-                <property name="verticalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAsNeeded</enum>
-                </property>
-                <property name="horizontalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOff</enum>
-                </property>
-                <property name="dragMode">
-                 <enum>QGraphicsView::NoDrag</enum>
-                </property>
-               </widget>
-              </item>
-             </layout>
-            </widget>
-            <widget class="QWidget" name="interactivePageOnline">
-             <layout class="QHBoxLayout" name="horizontalLayout_8"/>
-            </widget>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="imageTab">
-         <attribute name="title">
-          <string>Images</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout">
-          <item>
-           <widget class="QFrame" name="imageTopLeftFrame">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::Box</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <layout class="QVBoxLayout" name="verticalLayout_2">
-             <property name="spacing">
-              <number>0</number>
-             </property>
-             <property name="margin">
-              <number>0</number>
-             </property>
-             <item>
-              <widget class="UBLibraryTreeWidget" name="imageLibraryTreeWidget">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="styleSheet">
-                <string notr="true"/>
-               </property>
-               <property name="frameShape">
-                <enum>QFrame::NoFrame</enum>
-               </property>
-               <property name="frameShadow">
-                <enum>QFrame::Plain</enum>
-               </property>
-               <property name="lineWidth">
-                <number>0</number>
-               </property>
-               <property name="horizontalScrollMode">
-                <enum>QAbstractItemView::ScrollPerPixel</enum>
-               </property>
-               <property name="autoExpandDelay">
-                <number>2</number>
-               </property>
-               <property name="headerHidden">
-                <bool>true</bool>
-               </property>
-               <attribute name="headerVisible">
-                <bool>false</bool>
-               </attribute>
-               <column>
-                <property name="text">
-                 <string notr="true">1</string>
-                </property>
-               </column>
-              </widget>
-             </item>
-             <item>
-              <widget class="QToolButton" name="newFolderButton">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
-                 <horstretch>1</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>0</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>16777215</width>
-                 <height>42</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>New Folder</string>
-               </property>
-               <property name="icon">
-                <iconset resource="../sankore.qrc">
-                 <normaloff>:/images/toolbar/newFolder.png</normaloff>:/images/toolbar/newFolder.png</iconset>
-               </property>
-               <property name="iconSize">
-                <size>
-                 <width>32</width>
-                 <height>32</height>
-                </size>
-               </property>
-               <property name="toolButtonStyle">
-                <enum>Qt::ToolButtonTextBesideIcon</enum>
-               </property>
-               <property name="autoRaise">
-                <bool>true</bool>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <widget class="QToolButton" name="addImageToLibraryButton">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
-                 <horstretch>1</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>0</width>
-                 <height>0</height>
-                </size>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>16777215</width>
-                 <height>42</height>
-                </size>
-               </property>
-               <property name="text">
-                <string>Import to Library</string>
-               </property>
-               <property name="icon">
-                <iconset resource="../sankore.qrc">
-                 <normaloff>:/images/toolbar/addToLibrary.png</normaloff>:/images/toolbar/addToLibrary.png</iconset>
-               </property>
-               <property name="iconSize">
-                <size>
-                 <width>32</width>
-                 <height>32</height>
-                </size>
-               </property>
-               <property name="toolButtonStyle">
-                <enum>Qt::ToolButtonTextBesideIcon</enum>
-               </property>
-               <property name="autoRaise">
-                <bool>true</bool>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </widget>
-          </item>
-          <item>
-           <widget class="QStackedWidget" name="imageLibrariesStack">
-            <property name="currentIndex">
-             <number>1</number>
-            </property>
-            <widget class="QWidget" name="imagePageLocal">
-             <layout class="QHBoxLayout" name="horizontalLayout_5">
-              <item>
-               <widget class="UBThumbnailWidget" name="imageThumbnailView">
-                <property name="contextMenuPolicy">
-                 <enum>Qt::NoContextMenu</enum>
-                </property>
-                <property name="styleSheet">
-                 <string notr="true"/>
-                </property>
-                <property name="frameShape">
-                 <enum>QFrame::NoFrame</enum>
-                </property>
-                <property name="lineWidth">
-                 <number>0</number>
-                </property>
-                <property name="verticalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAsNeeded</enum>
-                </property>
-                <property name="horizontalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOff</enum>
-                </property>
-                <property name="dragMode">
-                 <enum>QGraphicsView::NoDrag</enum>
-                </property>
-               </widget>
-              </item>
-             </layout>
-            </widget>
-            <widget class="QWidget" name="imagePageOnline">
-             <layout class="QHBoxLayout" name="horizontalLayout_4"/>
-            </widget>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="videoTab">
-         <attribute name="title">
-          <string>Movies</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout_10">
-          <item>
-           <widget class="QFrame" name="videoTopLeftFrame">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::Box</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <layout class="QVBoxLayout" name="verticalLayout_4">
-             <property name="spacing">
-              <number>0</number>
-             </property>
-             <property name="margin">
-              <number>0</number>
-             </property>
-             <item>
-              <widget class="UBLibraryTreeWidget" name="videoLibraryTreeWidget">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="styleSheet">
-                <string notr="true"/>
-               </property>
-               <property name="frameShape">
-                <enum>QFrame::NoFrame</enum>
-               </property>
-               <property name="frameShadow">
-                <enum>QFrame::Plain</enum>
-               </property>
-               <property name="lineWidth">
-                <number>0</number>
-               </property>
-               <property name="horizontalScrollMode">
-                <enum>QAbstractItemView::ScrollPerPixel</enum>
-               </property>
-               <property name="autoExpandDelay">
-                <number>2</number>
-               </property>
-               <property name="headerHidden">
-                <bool>true</bool>
-               </property>
-               <attribute name="headerVisible">
-                <bool>false</bool>
-               </attribute>
-               <column>
-                <property name="text">
-                 <string notr="true">1</string>
-                </property>
-               </column>
-              </widget>
-             </item>
-            </layout>
-           </widget>
-          </item>
-          <item>
-           <widget class="QStackedWidget" name="videoLibrariesStack">
-            <property name="currentIndex">
-             <number>0</number>
-            </property>
-            <widget class="QWidget" name="videoPageLocal">
-             <layout class="QHBoxLayout" name="horizontalLayout_6">
-              <item>
-               <widget class="UBThumbnailWidget" name="videoThumbnailView">
-                <property name="contextMenuPolicy">
-                 <enum>Qt::NoContextMenu</enum>
-                </property>
-                <property name="styleSheet">
-                 <string notr="true"/>
-                </property>
-                <property name="frameShape">
-                 <enum>QFrame::NoFrame</enum>
-                </property>
-                <property name="lineWidth">
-                 <number>0</number>
-                </property>
-                <property name="verticalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAsNeeded</enum>
-                </property>
-                <property name="horizontalScrollBarPolicy">
-                 <enum>Qt::ScrollBarAlwaysOff</enum>
-                </property>
-                <property name="dragMode">
-                 <enum>QGraphicsView::NoDrag</enum>
-                </property>
-               </widget>
-              </item>
-             </layout>
-            </widget>
-            <widget class="QWidget" name="videoPageOnline">
-             <layout class="QHBoxLayout" name="horizontalLayout_9"/>
-            </widget>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="shapeTab">
-         <attribute name="title">
-          <string>Shapes</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout_2">
-          <item>
-           <widget class="UBThumbnailWidget" name="shapeThumbnailView">
-            <property name="contextMenuPolicy">
-             <enum>Qt::NoContextMenu</enum>
-            </property>
-            <property name="styleSheet">
-             <string notr="true"/>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <property name="lineWidth">
-             <number>0</number>
-            </property>
-            <property name="verticalScrollBarPolicy">
-             <enum>Qt::ScrollBarAsNeeded</enum>
-            </property>
-            <property name="horizontalScrollBarPolicy">
-             <enum>Qt::ScrollBarAlwaysOff</enum>
-            </property>
-            <property name="dragMode">
-             <enum>QGraphicsView::NoDrag</enum>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="soundTab">
-         <attribute name="title">
-          <string>Sounds</string>
-         </attribute>
-         <layout class="QHBoxLayout" name="horizontalLayout_12">
-          <item>
-           <widget class="UBThumbnailWidget" name="soundThumbnailView">
-            <property name="contextMenuPolicy">
-             <enum>Qt::NoContextMenu</enum>
-            </property>
-            <property name="styleSheet">
-             <string notr="true"/>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="lineWidth">
-             <number>0</number>
-            </property>
-            <property name="verticalScrollBarPolicy">
-             <enum>Qt::ScrollBarAsNeeded</enum>
-            </property>
-            <property name="horizontalScrollBarPolicy">
-             <enum>Qt::ScrollBarAlwaysOff</enum>
-            </property>
-            <property name="dragMode">
-             <enum>QGraphicsView::NoDrag</enum>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </widget>
-      </item>
-      <item>
-       <widget class="QFrame" name="toolFrame">
-        <property name="frameShape">
-         <enum>QFrame::NoFrame</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Plain</enum>
-        </property>
-        <property name="lineWidth">
-         <number>0</number>
-        </property>
-        <property name="midLineWidth">
-         <number>0</number>
-        </property>
-        <layout class="QHBoxLayout" name="toolFrameLayout">
-         <item>
-          <spacer name="horizontalSpacer_1">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Fixed</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QToolButton" name="removeButton">
-           <property name="text">
-            <string>Delete</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/toolbar/remove.png</normaloff>:/images/toolbar/remove.png</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="setAsBackgroundButton">
-           <property name="text">
-            <string>Set as Background</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/toolbar/setBackground.png</normaloff>:/images/toolbar/setBackground.png</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="removeBackgroundButton">
-           <property name="text">
-            <string>Remove Background</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/toolbar/removeBackground.png</normaloff>:/images/toolbar/removeBackground.png</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="addToDocumentButton">
-           <property name="text">
-            <string>Add File to Page</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/toolbar/import.png</normaloff>:/images/toolbar/import.png</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="addToPageButton">
-           <property name="text">
-            <string>Add to Page</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/toolbar/addToPage.png</normaloff>:/images/toolbar/addToPage.png</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="addToParaschoolEditor">
-           <property name="enabled">
-            <bool>true</bool>
-           </property>
-           <property name="autoFillBackground">
-            <bool>false</bool>
-           </property>
-           <property name="text">
-            <string>Add to Editor</string>
-           </property>
-           <property name="icon">
-            <iconset resource="../sankore.qrc">
-             <normaloff>:/images/addItemToCurrentPage.svg</normaloff>:/images/addItemToCurrentPage.svg</iconset>
-           </property>
-           <property name="iconSize">
-            <size>
-             <width>32</width>
-             <height>32</height>
-            </size>
-           </property>
-           <property name="toolButtonStyle">
-            <enum>Qt::ToolButtonTextUnderIcon</enum>
-           </property>
-           <property name="autoRaise">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer_4">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QSlider" name="zoomSlider">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="minimumSize">
-            <size>
-             <width>150</width>
-             <height>0</height>
-            </size>
-           </property>
-           <property name="styleSheet">
-            <string notr="true"/>
-           </property>
-           <property name="minimum">
-            <number>50</number>
-           </property>
-           <property name="maximum">
-            <number>500</number>
-           </property>
-           <property name="singleStep">
-            <number>10</number>
-           </property>
-           <property name="value">
-            <number>150</number>
-           </property>
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="invertedAppearance">
-            <bool>false</bool>
-           </property>
-           <property name="invertedControls">
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Minimum</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <layoutdefault spacing="0" margin="0"/>
- <customwidgets>
-  <customwidget>
-   <class>UBThumbnailWidget</class>
-   <extends>QGraphicsView</extends>
-   <header>gui/UBThumbnailWidget.h</header>
-  </customwidget>
-  <customwidget>
-   <class>UBLibraryTreeWidget</class>
-   <extends>QTreeWidget</extends>
-   <header>board/UBLibraryTreeWidget.h</header>
-  </customwidget>
- </customwidgets>
- <resources>
-  <include location="../sankore.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp
index 30e3e1d7..ba9bda3b 100644
--- a/src/board/UBBoardController.cpp
+++ b/src/board/UBBoardController.cpp
@@ -332,7 +332,6 @@ void UBBoardController::connectToolbar()
     connect(mMainWindow->actionRedo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(redo()));
     connect(mMainWindow->actionBack, SIGNAL( triggered()), this, SLOT(previousScene()));
     connect(mMainWindow->actionForward, SIGNAL(triggered()), this, SLOT(nextScene()));
-    connect(mMainWindow->actionLibrary, SIGNAL(toggled(bool)), this, SLOT(showLibraryDialog(bool)));
     connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(blackout()));
     connect(mMainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool)));
     connect(mMainWindow->actionImportPage, SIGNAL(triggered()), this, SLOT(importPage()));
@@ -526,19 +525,6 @@ void UBBoardController::showDocumentsDialog()
 
 }
 
-
-void UBBoardController::showLibraryDialog(bool show)
-{
-    if (!mLibraryController)
-    {
-        mLibraryController = new UBLibraryController(mMainWindow->centralWidget(), this);
-        connect(mLibraryController, SIGNAL(dialogClosed(int)), this, SLOT(libraryDialogClosed(int)));
-    }
-
-    mLibraryController->showLibraryDialog(show);
-}
-
-
 void UBBoardController::libraryDialogClosed(int ret)
 {
     Q_UNUSED(ret);
@@ -920,7 +906,7 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString
         bool acceptFlash = true;
 
 #ifdef Q_WS_X11
-        acceptFlash = false;
+         acceptFlash = false;
 #endif
         if (acceptFlash)
         {
@@ -1371,10 +1357,6 @@ UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl)
 UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl, QPointF scenePos)
 {
     UBToolWidget *toolWidget = new UBToolWidget(toolUrl, mMainWindow); // Deleted in UBBoardController::removeTool
-
-    if (mLibraryController && mLibraryController->libraryWindow())
-        toolWidget->stackUnder(mLibraryController->libraryWindow());
-
     QPoint pos = mControlView->mapToGlobal(mControlView->mapFromScene(scenePos));
     pos -= QPoint(toolWidget->width() / 2, toolWidget->height() / 2);
 
@@ -1551,8 +1533,6 @@ void UBBoardController::updateBackgroundState()
         newBackgroundStyle ="QWidget {background-color: #F1F1F1}";
     }
 
-    //    if (mControlContainer->styleSheet() != newBackgroundStyle)
-    //        mControlContainer->setStyleSheet(newBackgroundStyle);
 }
 
 
diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h
index 710f3b71..e0d3788a 100644
--- a/src/board/UBBoardController.h
+++ b/src/board/UBBoardController.h
@@ -149,7 +149,6 @@ class UBBoardController : public QObject
         void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0);
 
         void showDocumentsDialog();
-        void showLibraryDialog(bool show);
 
         void showKeyboard(bool show);
 
diff --git a/src/board/UBLibraryController.cpp b/src/board/UBLibraryController.cpp
index 603e5092..ddd51c1f 100644
--- a/src/board/UBLibraryController.cpp
+++ b/src/board/UBLibraryController.cpp
@@ -1,16 +1,8 @@
 #include "UBLibraryController.h"
 
-#include <QtSvg>
-#include <QtXml>
-#include <QSettings>
-#include <Qt>
-
 #include "frameworks/UBFileSystemUtils.h"
 #include "frameworks/UBPlatformUtils.h"
 #include "frameworks/UBDesktopServices.h"
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "pdf/XPDFRenderer.h"
 
 #include "core/UBApplication.h"
 #include "core/UBPersistenceManager.h"
@@ -18,9 +10,6 @@
 #include "core/UBSetting.h"
 #include "core/UBApplicationController.h"
 
-#include "network/UBNetworkAccessManager.h"
-#include "network/UBServerXMLHttpRequest.h"
-
 #include "domain/UBAbstractWidget.h"
 #include "domain/UBGraphicsScene.h"
 #include "domain/UBGraphicsSvgItem.h"
@@ -31,19 +20,10 @@
 #include "tools/UBToolsManager.h"
 
 #include "board/UBBoardView.h"
-#include "board/UBDrawingController.h"
-
-#include "web/UBWebPage.h"
-#include "web/UBWebController.h"
-
-#include "gui/UBMainWindow.h"
-
-#include "api/UBLibraryAPI.h"
 
 #include "UBBoardController.h"
-#include "../frameworks/UBFileSystemUtils.h"
 
-#include <QDataStream>
+#include "gui/UBThumbnailWidget.h"
 
 static quint32 magicNumber = 0xACDCAFE0;
 static QString favoriteVirtualPath = "$favorite$";
@@ -52,20 +32,8 @@ UBLibraryController::UBLibraryController(QWidget *pParentWidget, UBBoardControll
         QObject(pParentWidget),
         mParentWidget(pParentWidget),
         mBoardController(pBoardController),
-        mLibraryWindow(0),
-        mLibraryUI(0),
-        mImageWebView(0),
-        mVideoWebView(0),
-        mInteractiveWebView(0),
-        mImageOnlineTi(0),
-        mVideoOnlineTi(0),
-        mInteractiveOnlineTi(0),
-        mInteractiveUniboardTi(0),
-        mLastItemOffsetIndex(0),
-        mNeedRefreshOnNextDisplay(false)
+         mLastItemOffsetIndex(0)
 {
-    QString dummyBackgrounds = tr("Backgrounds");
-    mLibraryFileToDownload = onlineLibraries();
     readFavoriteList();
 
     mAudioStandardDirectoryPath = QUrl::fromLocalFile(UBDesktopServices::storageLocation(QDesktopServices::MusicLocation));
@@ -120,19 +88,6 @@ void UBLibraryController::createDirectory(QUrl& pDirPath)
         QDir().mkpath(pDirPath.toLocalFile());
 }
 
-void UBLibraryController::preloadFirstOnlineLibrary()
-{
-    new UBLibraryPreloader(UBApplication::staticMemoryCleaner);
-}
-
-QStringList UBLibraryController::onlineLibraries()
-{
-    QStringList libraries;
-    libraries << UBSettings::settings()->softwareLibrariesUrl + "/libraries-release.xml";
-    return libraries;
-}
-
-
 void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory)
 {
     QFileInfo itemToRoute(pItem);
@@ -450,7 +405,7 @@ QList<UBLibElement*> UBLibraryController::getContent(UBLibElement *element)
 
 UBLibraryController::~UBLibraryController()
 {
-    delete mLibraryUI;
+	//NOOP
 }
 
 
@@ -458,7 +413,7 @@ UBLibraryController::~UBLibraryController()
 void UBLibraryController::setItemAsBackground(UBLibElement* image)
 {
     if (!activeScene()){
-        qWarning() << "No active scene";
+        qDebug() << "No active scene";
         return;
     }
     QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(image->path().toLocalFile());
@@ -510,10 +465,9 @@ void UBLibraryController::addItemToPage(UBLibElement* item)
 
 void UBLibraryController::removeBackground()
 {
-    if (activeScene()) {
+    if (activeScene())
         activeScene()->setAsBackgroundObject(0);
-        selectionChanged();
-    }
+    
 }
 
 UBGraphicsScene* UBLibraryController::activeScene()
@@ -604,1823 +558,98 @@ void UBLibraryController::removeFromFavorite(QList<UBLibElement*> elementList)
     persistFavoriteList();
 }
 
+QRectF UBLibraryController::visibleSceneRect() {
+    QRectF visibleSceneRect(0, 0, 0, 0);
 
+    if (activeScene() && mBoardController && mBoardController->controlView()) {
+        QPointF topLeftCorner = mBoardController->controlGeometry().topLeft();
+        QPointF bottomRightCorner =
+                mBoardController->controlGeometry().bottomRight();
 
+        QPointF sceneTopLeft = mBoardController->controlView()->mapToScene(
+                topLeftCorner.toPoint());
+        QPointF sceneBottomRight = mBoardController->controlView()->mapToScene(
+                bottomRightCorner.toPoint());
 
-void UBLibraryController::refreshShapeThumbnailsView() {
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    QStringList shapePaths =
-            UBPersistenceManager::persistenceManager()->allShapes();
-
-    mSvgItemToFilepath.clear();
-
-    QList<QGraphicsItem*> items;
-    QList<QUrl> itemsPath;
-
-    for (int i = 0; i < shapePaths.size(); i++) {
-        QString path = shapePaths.at(i);
-
-        UBThumbnailSvg *svgItem = new UBThumbnailSvg(path);
-        mSvgItemToFilepath.insert(svgItem, path);
-
-        items.append(svgItem);
-        itemsPath.append(QUrl::fromLocalFile(path));
-    }
-
-    mLibraryUI->shapeThumbnailView->setGraphicsItems(items, itemsPath);
-
-    QApplication::restoreOverrideCursor();
-}
-
-
-void UBLibraryController::refreshImageThumbnailsView() {
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    mSvgImageItemToFilepath.clear();
-    mPixmapItemToFilepath.clear();
-
-    QList<QGraphicsItem*> items;
-    QList<QUrl> itemsPath;
-
-    QList<QTreeWidgetItem *> tw =
-            mLibraryUI->imageLibraryTreeWidget->selectedItems();
-
-    if (tw.size() > 0) {
-        UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.last());
-
-        if (fi) {
-            QStringList
-                    imagePaths =
-                    UBPersistenceManager::persistenceManager()->allImages(
-                            fi->dir());
-
-            for (int i = 0; i < imagePaths.size(); i++) {
-                QString path = imagePaths.at(i);
-
-                if (!path.contains(".thumbnail.")) {
-                    if (path.endsWith("svg", Qt::CaseInsensitive) || path.endsWith(
-                            "svgz", Qt::CaseInsensitive)) {
-                        UBThumbnailSvg *svgItem = new UBThumbnailSvg(path);
-
-                        items.append(svgItem);
-                        itemsPath.append(QUrl::fromLocalFile(path));
-                        mSvgImageItemToFilepath.insert(svgItem, path);
-                    } else {
-                        // The image is not a thumbnail ...
-                        QString thumbnailPath = UBFileSystemUtils::thumbnailPath(
-                                path);
-                        if (!QFileInfo(thumbnailPath).exists()) {
-                            // ... and the thumbnail does not exist
-                            QPixmap pix(path);
-                            if (!pix.isNull()) {
-                                // actually create the thumbnail
-                                pix = pix.scaledToWidth(
-                                        qMin(UBSettings::maxThumbnailWidth,
-                                             pix.width()),
-                                        Qt::SmoothTransformation);
-                                pix.save(thumbnailPath);
-
-                                QGraphicsPixmapItem *pixmapItem =
-                                        new UBThumbnailPixmap(pix);
-
-                                items.append(pixmapItem);
-                                itemsPath.append(QUrl::fromLocalFile(path));
-                                mPixmapItemToFilepath.insert(pixmapItem, path);
-                            }
-                        }
-                        UBPlatformUtils::hideFile(thumbnailPath);
-                    }
-                } else {
-                    // The image is a thumbnail
-                    QString originalImagePath(path);
-                    originalImagePath.remove(".thumbnail");
-
-                    if (!QFileInfo(originalImagePath).exists()) {
-                        // Skip images that have a thumbnail only but no corresponding original image
-                        continue;
-                    }
-
-                    QPixmap pix(path);
-
-                    if (!pix.isNull()) {
-                        QGraphicsPixmapItem *pixmapItem =
-                                new UBThumbnailPixmap(pix); //deleted while replaced in the scene or by the scene destruction
-
-                        items.append(pixmapItem);
-                        itemsPath.append(QUrl::fromLocalFile(originalImagePath));
-                        mPixmapItemToFilepath.insert(pixmapItem, originalImagePath);
-                    }
-                }
-            }
-        }
-    }
-
-    mLibraryUI->imageThumbnailView->setGraphicsItems(items, itemsPath);
-
-    QApplication::restoreOverrideCursor();
-}
-
-void UBLibraryController::createNewFolder() {
-    QTreeWidget* currentTreeWidget = 0;
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        currentTreeWidget = mLibraryUI->imageLibraryTreeWidget;
-        break;
-    case TabIndex::Interactive:
-        currentTreeWidget = mLibraryUI->interactiveLibraryTreeWidget;
-        break;
+        visibleSceneRect.setTopLeft(sceneTopLeft);
+        visibleSceneRect.setBottomRight(sceneBottomRight);
     }
 
-    if (currentTreeWidget != 0) {
-        QList<QTreeWidgetItem *> tw = currentTreeWidget->selectedItems();
-
-        if (tw.size() > 0) {
-            UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.at(0));
-
-            if (fi) {
-                QString newFolderPath = fi->dir().path() + "/" + tr("New Folder");
-
-                int count = 1;
-
-                if (QDir(newFolderPath).exists()) {
-                    while (QDir(newFolderPath + QString(" %1").arg(count)).exists()) {
-                        count++;
-                    }
-
-                    newFolderPath = newFolderPath + QString(" %1").arg(count);
-                }
-
-                UBLibraryFolderItem* newFi = new UBLibraryFolderItem(QDir(
-                        newFolderPath), QString(), fi, true, QStringList());
-
-                currentTreeWidget->expandItem(fi);
-                currentTreeWidget->setCurrentItem(newFi);
-            }
-        }
-    }
+    return visibleSceneRect;
 }
 
-QStringList UBLibraryController::addItemsToCurrentLibrary(
-        const QDir& pSelectedFolder, const QStringList& pExtensions) {
-    QString extensions;
-
-    foreach(QString ext, pExtensions)
-    {
-        extensions += " *.";
-        extensions += ext;
-    }
-
-    QString defaultPath =
-            UBSettings::settings()->lastImportToLibraryPath->get().toString();
-    QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr(
-            "Add Item to Library"), defaultPath, tr("All Supported (%1)").arg(
-                    extensions));
-
-    QStringList importedFiles;
-    if (filenames.size() == 0)
-        return filenames;
-
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    UBApplication::processEvents();
-
-    int i = 1;
-    int count = filenames.count();
+void UBLibraryController::addImagesToCurrentPage(const QList<QUrl>& images) {
+    QPointF pos = visibleSceneRect().topLeft();
 
-    foreach(const QString filename, filenames)
+    foreach(const QUrl url, images)
     {
-        QFileInfo source(filename);
-
-        // we update last import location. We do it only once at the first imported file
-        if (i == 1) {
-            UBSettings::settings()->lastImportToLibraryPath->set(QVariant(
-                    source.absolutePath()));
-        }
-
-        if (source.isDir()) {
-            QString target = pSelectedFolder.path() + "/"
-                             + QFileInfo(source).fileName();
-            UBFileSystemUtils::copyDir(source.absoluteFilePath(), target);
-            importedFiles << target;
-        } else if (source.isFile() && (filename.toLower().endsWith(".wgt")
-            || filename.toLower().endsWith(".wdgt")
-            || filename.toLower().endsWith(".pwgt"))) {
-            QString baseFileName = source.fileName();
-
-            QString filePath = pSelectedFolder.path() + "/" + baseFileName;
-            QString nextItemPath = UBFileSystemUtils::nextAvailableFileName(
-                    filePath);
-
-            QFile file(filename);
-
-            UBFileSystemUtils::expandZipToDir(file, nextItemPath);
-            importedFiles << nextItemPath;
-        } else if (source.isFile() && filename.toLower().endsWith(".pdf")) {
-            XPDFRenderer pdfRenderer(filename);
-
-            if (pdfRenderer.isValid()) {
-                QString title = pdfRenderer.title();
-
-                if (title.length() == 0)
-                    title = QFileInfo(source).completeBaseName();
-
-                for (int i = 0; i < pdfRenderer.pageCount(); i++) {
-                    UBApplication::showMessage(tr(
-                            "Copying page %1 of file %2 to library %3") .arg(i
-                                                                             + 1) .arg(title) .arg(pSelectedFolder.dirName()));
-
-                    QString filePath = pSelectedFolder.path() + "/" + title
-                                       + QString(" %1 %2.png").arg(tr("Page")).arg(i + 1);
-                    QSize size = pdfRenderer.pageSizeF(i + 1).toSize();
-                    QImage image(size, QImage::Format_RGB32);
-                    QPainter p(&image);
-
-                    p.setRenderHint(QPainter::SmoothPixmapTransform);
-                    p.setRenderHint(QPainter::Antialiasing);
+        mLastItemOffsetIndex++;
+        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
 
-                    pdfRenderer.render(&p, i + 1, QRectF(0, 0, size.width(),
-                                                         size.height()));
-                    p.end();
+        QGraphicsItem* itemInScene = 0;
 
-                    image.save(filePath);
+        if (activeScene()) {
+            QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(
+                    url.toString());
 
-                    importedFiles << filePath;
-                }
+            //TODO UB 4.x move this logic to the scene ..
+            if (mimeType == "image/svg+xml") {
+                itemInScene = activeScene()->addSvg(url, pos);
             } else {
-                qWarning() << "Failed to load file " << filename << "as PDF";
+                itemInScene = activeScene()->addPixmap(QPixmap(
+                        url.toLocalFile()), pos);
             }
-        } else {
-            QString target = pSelectedFolder.path() + "/"
-                             + QFileInfo(source).fileName();
-            QFile sourceFile(source.absoluteFilePath());
-            UBApplication::showMessage(
-                    tr("Copying file %1 to library %2 (%3/%4)").arg(QFileInfo(
-                            source).fileName()).arg(pSelectedFolder.dirName()).arg(
-                                    i).arg(count));
-            sourceFile.copy(target);
-            importedFiles << target;
-        }
-
-        i++;
-    }
-
-    UBApplication::showMessage(tr("Finished copying %1 files ...").arg(
-            filenames.size()));
-
-    QApplication::restoreOverrideCursor();
-    return importedFiles;
-}
-
-void UBLibraryController::addInteractivesToLibrary() {
-    QList<QTreeWidgetItem *> tw =
-            mLibraryUI->interactiveLibraryTreeWidget->selectedItems();
-
-    if (tw.size() > 0) {
-        UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.at(0));
-
-        if (fi) {
-            addItemsToCurrentLibrary(fi->dir(),
-                                     UBSettings::settings()->widgetFileExtensions);
-
-            refreshInteractiveThumbnailsView(); // TODO UB 4.x optimisation : could do better than refreshing the entire directory
         }
-    }
-}
 
-void UBLibraryController::addImagesToLibrary() {
-    QList<QTreeWidgetItem*> tw =
-            mLibraryUI->imageLibraryTreeWidget->selectedItems();
-
-    if (tw.size() > 0) {
-        UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.at(0));
-
-        if (fi) {
-            QStringList extensions = UBSettings::imageFileExtensions;
-            extensions << "pdf";
-
-            QStringList filenames = addItemsToCurrentLibrary(fi->dir(), extensions);
-
-            QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-            UBApplication::processEvents();
-
-            quint32 i = 1, count = filenames.count();
-            foreach(const QString filename, filenames)
-            {
-                // Create thumbnail
-                // For large images, what actually takes time is the creation of the thumbnail, the copy is fast
-                QPixmap pix(filename);
-                UBApplication::showMessage(
-                        tr("Creating thumbnail %1 (%2/%3)").arg(filename).arg(i).arg(
-                                count));
-                QString thumbnailPath = UBFileSystemUtils::thumbnailPath(
-                        filename);
-                pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth,
-                                       pix.width()), Qt::SmoothTransformation).save(
-                                               thumbnailPath);
-                UBPlatformUtils::hideFile(thumbnailPath);
-                i++;
-            }
+        if (itemInScene) {
+            itemInScene = activeScene()->scaleToFitDocumentSize(itemInScene, false, UBSettings::objectInControlViewMargin);
 
-            refreshImageThumbnailsView(); // TODO UB 4.x optimisation : could do better than refreshing the entire directory
-            QApplication::restoreOverrideCursor();
+            itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y() + 50 * mLastItemOffsetIndex));
         }
     }
 }
 
-void UBLibraryController::removeDir() {
-    QTreeWidget* currentTreeWidget = 0;
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        currentTreeWidget = mLibraryUI->imageLibraryTreeWidget;
-        break;
-    case TabIndex::Interactive:
-        currentTreeWidget = mLibraryUI->interactiveLibraryTreeWidget;
-        break;
-    }
-
-    if (currentTreeWidget != 0) {
-        QList<QTreeWidgetItem *> tw = currentTreeWidget->selectedItems();
-
-        if (tw.size() > 0) {
-            UBLibraryFolderItem* fi =
-                    dynamic_cast<UBLibraryFolderItem*> (tw.last());
-
-            if (fi && fi->canWrite()) {
-                if (QMessageBox::question(
-                        0,
-                        tr("Remove Folder"),
-                        tr(
-                                "Are you sure you want to remove the folder %1 from the library?").arg(
-                                        fi->dir().dirName()), QMessageBox::Yes
-                        | QMessageBox::No) == QMessageBox::Yes) {
-                    qDebug() << "deleting dir" << fi->dir().path();
-
-                    UBFileSystemUtils::deleteDir(fi->dir().path());
-                    fi->parent()->removeChild(fi);
-                }
-            }
-        }
-    }
-}
+void UBLibraryController::addVideosToCurrentPage(const QList<QUrl>& videos) {
+    QPointF pos = visibleSceneRect().topLeft();
 
-void UBLibraryController::remove() {
-    UBThumbnailWidget* currentThumbnailView = 0;
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        currentThumbnailView = mLibraryUI->imageThumbnailView;
-        break;
-    case TabIndex::Interactive:
-        currentThumbnailView = mLibraryUI->interactiveThumbnailView;
-        break;
-    }
+    foreach(const QUrl url, videos)
+    {
+        mLastItemOffsetIndex++;
+        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
 
-    if (currentThumbnailView) {
-        if (currentThumbnailView->selectedItems().size() > 0) {
-            removeItemsFromLibrary(currentThumbnailView);
-        } else {
-            removeDir();
-        }
+        UBGraphicsVideoItem* itemInScene = UBApplication::boardController->addVideo(url, false, pos);
+        itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y() + 50 * mLastItemOffsetIndex));
     }
 }
 
-void UBLibraryController::removeItemsFromLibrary(
-        UBThumbnailWidget* pThumbnailView) {
-    QList<QGraphicsItem*> selectedItems = pThumbnailView->selectedItems();
-
-    if (selectedItems.size() > 0) {
-        if (QMessageBox::question(0, tr("Remove Item"), tr(
-                "Are you sure you want to remove the item from the library?"),
-                                  QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
-            QGraphicsPixmapItem* pixmapItem =
-                    dynamic_cast<QGraphicsPixmapItem*> (selectedItems.last());
-
-            if (pixmapItem && mPixmapItemToFilepath.contains(pixmapItem)) {
-                QString path = mPixmapItemToFilepath.take(pixmapItem);
-                QFile file(path);
-                QFile thumbnailFile(UBFileSystemUtils::thumbnailPath(path));
-
-                file.remove();
-                thumbnailFile.remove();
-
-                refreshImageThumbnailsView();
-            } else if (pixmapItem
-                       && mInteractiveItemToFilepath.contains(pixmapItem)) {
-                QString path = mInteractiveItemToFilepath.take(pixmapItem);
-
-                //is it a tool ?
-                if (path.startsWith("uniboardTool://")) {
-                    QStringList
-                            uris =
-                            UBSettings::settings()->favoritesNativeToolUris->get().toStringList();
-                    if (uris.contains(path)) {
-                        uris.removeAll(path);
-                        UBSettings::settings()->favoritesNativeToolUris->set(uris);
-                    }
-                } else {
-                    qDebug() << "file to delete " << path;
-                    QFileInfo fileInfo(path);
-                    if (fileInfo.isDir()) {
-                        UBFileSystemUtils::deleteDir(fileInfo.absoluteFilePath());
-                    } else {
-                        QFile(fileInfo.absoluteFilePath()).remove();
-                    }
-                }
-                refreshInteractiveThumbnailsView();
-            } else {
-                QGraphicsSvgItem* svgItem =
-                        dynamic_cast<QGraphicsSvgItem*> (selectedItems.last());
-
-                if (svgItem && mSvgImageItemToFilepath.contains(svgItem)) {
-                    QString path = mSvgImageItemToFilepath.take(svgItem);
-                    QFile file(path);
+void UBLibraryController::addAudiosToCurrentPage(const QList<QUrl>& sounds) {
+    QPointF topLeftPos = visibleSceneRect().topLeft();
 
-                    file.remove();
+    QPointF pos = topLeftPos;
 
-                    refreshImageThumbnailsView();
-                }
-            }
-        }
+    foreach(const QUrl url, sounds)
+    {
+        mLastItemOffsetIndex++;
+        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
+        pos = QPointF(topLeftPos.x() + 50 * mLastItemOffsetIndex,
+                      topLeftPos.y() + 50 * mLastItemOffsetIndex);
+        UBApplication::boardController->addAudio(url, false, pos);
     }
 }
 
-void UBLibraryController::refreshInteractiveThumbnailsView()
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    QList<QGraphicsItem*> items;
-    QList<QUrl> itemsPath;
-    QStringList labels;
-
-    QList<QTreeWidgetItem *> tw =
-            mLibraryUI->interactiveLibraryTreeWidget->selectedItems();
-
-    if (tw.size() > 0) {
-        UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.last());
-
-        if (fi) {
-            QStringList toolUris;
-
-            if (fi == mInteractiveUniboardTi) {
-                toolUris = UBToolsManager::manager()->allToolIDs();
-            }
-
-            foreach(QString toolUri, toolUris)
-            {
-                UBToolsManager::UBToolDescriptor tool =
-                        UBToolsManager::manager()->toolByID(toolUri);
-
-                QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(
-                        tool.icon);
-
-                if (!pixmapItem->pixmap().isNull()) {
-                    QString id = tool.id;
-
-                    mInteractiveItemToFilepath.insert(pixmapItem, id);
-                    items.append(pixmapItem);
-                    itemsPath.append(QUrl(id));
-                    labels.append(tool.label + " " + tool.version);
-                }
-            }
-
-            QStringList widgetPaths =
-                    UBPersistenceManager::persistenceManager()->allWidgets(
-                            fi->dir());
-
-            for (int i = 0; i < widgetPaths.size(); i++) {
-                QString path = widgetPaths.at(i);
-
-                QString iconFilepath = UBAbstractWidget::iconFilePath(
-                        QUrl::fromLocalFile(path));
-
-                QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(QPixmap(
-                        iconFilepath));
-
-                mInteractiveItemToFilepath.insert(pixmapItem, path);
-
-                QString name = UBAbstractWidget::widgetName(QUrl::fromLocalFile(
-                        path));
-
-                items.append(pixmapItem);
-                itemsPath.append(QUrl::fromLocalFile(path));
-                labels.append(name);
-            }
-        }
+void UBLibraryController::addInteractivesToCurrentPage(
+        const QList<QUrl>& widgets) {
+    foreach(const QUrl url, widgets)
+    {
+        mBoardController->downloadURL(url, QPointF(0, 0));
     }
-    mLibraryUI->interactiveThumbnailView->setGraphicsItems(items, itemsPath, labels);
-
-    QApplication::restoreOverrideCursor();
 }
 
-void UBLibraryController::showLibraryDialog(bool show)
+QString UBLibraryController::favoritePath()
 {
-    if (show && !mLibraryWindow) {
-        Qt::WindowFlags flag = Qt::Dialog | Qt::WindowMaximizeButtonHint
-                               | Qt::WindowCloseButtonHint;
-        flag &= ~Qt::WindowContextHelpButtonHint;
-        flag &= ~Qt::WindowMinimizeButtonHint;
-
-        mLibraryWindow = new QDialog(mParentWidget, flag);
-
-        mLibraryUI = new Ui::library();
-        mLibraryUI->setupUi(mLibraryWindow);
-        mLibraryUI->libraryTab->setCurrentIndex(TabIndex::Gip);
-
-        // image tab
-        QString ubPictures =
-                UBSettings::settings()->uniboardImageLibraryDirectory();
-        QString userPictures = UBSettings::settings()->uniboardUserImageDirectory();
-
-        UBLibraryFolderItem *ubLibrary = new UBLibraryFolderItem(QDir(ubPictures),
-                                                                 tr("Sankore 3.1"), 0, false, QStringList());
-        UBLibraryFolderItem *userLibrary = new UBLibraryFolderItem(QDir(
-                userPictures), tr("My Images"), 0, true, QStringList());
-
-        mLibraryUI->imageLibraryTreeWidget->addTopLevelItem(userLibrary);
-        mLibraryUI->imageLibraryTreeWidget->addTopLevelItem(ubLibrary);
-
-        QStringList imageMimeTypes;
-        imageMimeTypes << "image";
-        mLibraryUI->imageLibraryTreeWidget->setMimeTypes(imageMimeTypes);
-        mLibraryUI->imageLibraryTreeWidget->setFileExtensions(
-                UBSettings::imageFileExtensions);
-
-        ubLibrary->setIcon(0, QIcon(":/images/myContent.png"));
-        ubLibrary->setExpanded(true);
-
-        userLibrary->setIcon(0, QIcon(":/images/myFolder.png"));
-        userLibrary->setExpanded(true);
-
-        if (userLibrary->childCount() > 0) {
-            foreach(QTreeWidgetItem* ti, mLibraryUI->imageLibraryTreeWidget->selectedItems())
-            {
-                ti->setSelected(false);
-            }
-
-            userLibrary->child(0)->setSelected(true);
-
-            selectionChanged();
-        } else {
-            ubLibrary->setSelected(true);
-        }
-
-        mLibraryUI->imageLibraryTreeWidget->setRootIsDecorated(false);
-        mLibraryUI->imageLibrariesStack->setCurrentWidget(
-                mLibraryUI->imagePageLocal);
-
-        mImageWebView = new UBLibraryWebView(mLibraryUI->imagePageOnline);
-        mLibraryUI->imagePageOnline->layout()->addWidget(mImageWebView);
-
-        // Interactive tab
-        QString ubInteractive =
-                UBSettings::settings()->uniboardInteractiveLibraryDirectory();
-        QString userInteractive =
-                UBSettings::settings()->uniboardInteractiveUserDirectory();
-        QString ubInteractiveFavorites =
-                UBSettings::settings()->uniboardInteractiveFavoritesDirectory();
-
-        mInteractiveUniboardTi = new UBLibraryFolderItem(QDir(ubInteractive), tr(
-                "Sankore 3.1"), 0, false,
-                                                         UBSettings::interactiveContentFileExtensions);
-
-        UBLibraryFolderItem *userInteractiveLibrary = new UBLibraryFolderItem(QDir(
-                userInteractive), tr("My Applications"), 0, true,
-                                                                              UBSettings::interactiveContentFileExtensions);
-
-        mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem(
-                userInteractiveLibrary);
-        mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem(
-                mInteractiveUniboardTi);
-
-        QStringList icMimeTypes;
-        icMimeTypes << "application/widget";
-        icMimeTypes << "application/x-shockwave-flash";
-        mLibraryUI->interactiveLibraryTreeWidget->setMimeTypes(icMimeTypes);
-
-        mLibraryUI->interactiveLibraryTreeWidget->setFileExtensions(
-                UBSettings::interactiveContentFileExtensions);
-
-        QStringList icProtocoles;
-        icProtocoles << "uniboardTool://";
-        mLibraryUI->interactiveLibraryTreeWidget->setProtocoles(icProtocoles);
-
-        mInteractiveUniboardTi->setIcon(0, QIcon(":/images/myContent.png"));
-        mInteractiveUniboardTi->setExpanded(true);
-
-        userInteractiveLibrary->setIcon(0, QIcon(":/images/myFolder.png"));
-        userInteractiveLibrary->setExpanded(true);
-
-        mInteractiveUniboardTi->setSelected(true);
-
-        mLibraryUI->interactiveLibraryTreeWidget->setRootIsDecorated(false);
-        mLibraryUI->interactiveLibrariesStack->setCurrentWidget(
-                mLibraryUI->interactivePageLocal);
-
-        mInteractiveWebView = new UBLibraryWebView(
-                mLibraryUI->interactivePageOnline);
-        mLibraryUI->interactivePageOnline->layout()->addWidget(mInteractiveWebView);
-
-        // video tab
-
-        QString userVideos = UBSettings::settings()->uniboardUserVideoDirectory();
-
-        UBLibraryFolderItem *userVideoLibrary = new UBLibraryFolderItem(QDir(
-                userVideos), tr("My Movies"), 0, false, QStringList());
-
-        mLibraryUI->videoLibraryTreeWidget->addTopLevelItem(userVideoLibrary);
-        userVideoLibrary->setIcon(0, QIcon(":/images/myFolder.png"));
-        userVideoLibrary->setExpanded(true);
-        userVideoLibrary->setSelected(true);
-
-        mLibraryUI->videoLibraryTreeWidget->setRootIsDecorated(false);
-
-        QStringList videoMimeTypes;
-        videoMimeTypes << "video";
-        mLibraryUI->videoLibraryTreeWidget->setMimeTypes(videoMimeTypes);
-
-        mLibraryUI->videoLibrariesStack->setCurrentWidget(
-                mLibraryUI->videoPageLocal);
-
-        mVideoWebView = new UBLibraryWebView(mLibraryUI->videoPageOnline);
-        mLibraryUI->videoPageOnline->layout()->addWidget(mVideoWebView);
-
-        mLibraryUI->imageThumbnailView->setThumbnailWidth(
-                UBSettings::settings()->imageThumbnailWidth->get().toInt());
-        mLibraryUI->gipThumbnailView->setThumbnailWidth(UBSettings::defaultGipWidth);
-        mLibraryUI->soundThumbnailView->setThumbnailWidth(
-                UBSettings::defaultSoundWidth);
-        mLibraryUI->shapeThumbnailView->setThumbnailWidth(
-                UBSettings::settings()->shapeThumbnailWidth->get().toInt());
-        mLibraryUI->interactiveThumbnailView->setThumbnailWidth(
-                UBSettings::defaultWidgetIconWidth);
-        mLibraryUI->videoThumbnailView->setThumbnailWidth(
-                UBSettings::settings()->videoThumbnailWidth->get().toInt());
-
-        connect(mLibraryUI->imageLibraryTreeWidget, SIGNAL(itemSelectionChanged()),
-                this, SLOT(itemSelectionChanged()));
-
-        connect(mLibraryUI->imageLibraryTreeWidget,
-                SIGNAL(itemChanged ( QTreeWidgetItem * , int )), this,
-                SLOT(itemChanged ( QTreeWidgetItem * , int )));
-
-        connect(mLibraryUI->imageLibraryTreeWidget, SIGNAL(contentChanged()), this,
-                SLOT(refreshImageThumbnailsView()));
-
-        connect(mLibraryUI->interactiveLibraryTreeWidget,
-                SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged()));
-
-        connect(mLibraryUI->interactiveLibraryTreeWidget,
-                SIGNAL(itemChanged ( QTreeWidgetItem * , int )), this,
-                SLOT(itemChanged ( QTreeWidgetItem * , int )));
-
-        connect(mLibraryUI->interactiveLibraryTreeWidget, SIGNAL(contentChanged()),
-                this, SLOT(refreshInteractiveThumbnailsView()));
-
-        connect(mLibraryUI->videoLibraryTreeWidget, SIGNAL(itemSelectionChanged()),
-                this, SLOT(itemSelectionChanged()));
-
-        connect(mLibraryUI->videoLibraryTreeWidget, SIGNAL(contentChanged()), this,
-                SLOT(refreshVideoThumbnailsView()));
-
-        connect(mLibraryUI->newInteractiveFolderButton, SIGNAL(clicked()), this,
-                SLOT(createNewFolder()));
-        connect(mLibraryUI->newFolderButton, SIGNAL(clicked()), this,
-                SLOT(createNewFolder()));
-        connect(mLibraryUI->addImageToLibraryButton, SIGNAL(clicked()), this,
-                SLOT(addImagesToLibrary()));
-        connect(mLibraryUI->addInteractiveToLibraryButton, SIGNAL(clicked()), this,
-                SLOT(addInteractivesToLibrary()));
-        connect(mLibraryUI->addToDocumentButton, SIGNAL(clicked()), this,
-                SLOT(addObjectFromFilesystemToPage()));
-        connect(mLibraryUI->removeButton, SIGNAL(clicked()), this, SLOT(remove()));
-
-        connect(mLibraryUI->addToPageButton, SIGNAL(clicked()), this,
-                SLOT(addToPage()));
-        connect(mLibraryUI->setAsBackgroundButton, SIGNAL(clicked()), this,
-                SLOT(setAsBackground()));
-        connect(mLibraryUI->removeBackgroundButton, SIGNAL(clicked()), this,
-                SLOT(removeBackground()));
-
-        connect(mLibraryUI->zoomSlider, SIGNAL(valueChanged(int)), this,
-                SLOT(zoomSliderValueChanged(int)));
-
-        connect(mLibraryUI->imageThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-        connect(mLibraryUI->shapeThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-        connect(mLibraryUI->interactiveThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-        connect(mLibraryUI->videoThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-        connect(mLibraryUI->gipThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-        connect(mLibraryUI->soundThumbnailView, SIGNAL(resized()), this,
-                SLOT(thumbnailViewResized()));
-
-        connect(mLibraryUI->imageThumbnailView, SIGNAL(selectionChanged()), this,
-                SLOT(selectionChanged()));
-        connect(mLibraryUI->shapeThumbnailView, SIGNAL(selectionChanged()), this,
-                SLOT(selectionChanged()));
-        connect(mLibraryUI->interactiveThumbnailView, SIGNAL(selectionChanged()),
-                this, SLOT(selectionChanged()));
-        connect(mLibraryUI->videoThumbnailView, SIGNAL(selectionChanged()), this,
-                SLOT(selectionChanged()));
-        connect(mLibraryUI->gipThumbnailView, SIGNAL(selectionChanged()), this,
-                SLOT(selectionChanged()));
-        connect(mLibraryUI->soundThumbnailView, SIGNAL(selectionChanged()), this,
-                SLOT(selectionChanged()));
-
-        mLibraryUI->imageLibraryTreeWidget->setIndentation(30);
-        mLibraryUI->interactiveLibraryTreeWidget->setIndentation(30);
-        mLibraryUI->videoLibraryTreeWidget->setIndentation(30);
-
-        mLibraryUI->imageThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-        mLibraryUI->shapeThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-        mLibraryUI->interactiveThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-        mLibraryUI->gipThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-        mLibraryUI->videoThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-        mLibraryUI->soundThumbnailView->setBackgroundBrush(
-                UBSettings::documentViewLightColor);
-
-        int viewWidth = mParentWidget->width() / 2;
-        int viewHeight = mParentWidget->height() * 2.0 / 3.0;
-
-        mLibraryWindow->setGeometry((mParentWidget->width() - viewWidth) / 2,
-                                    (mParentWidget->height() - viewHeight) / 2, viewWidth, viewHeight);
-
-        connect(mLibraryUI->libraryTab, SIGNAL(currentChanged(int)), this,
-                SLOT(tabChanged(int)));
-
-        mLibraryUI->libraryTab->setCurrentIndex(TabIndex::Gip);
-        tabChanged(TabIndex::Gip);
-
-        connect(mLibraryWindow, SIGNAL(finished(int)), this,
-                SIGNAL(dialogClosed(int)));
-
-        loadLibraries();
-    }
-
-    if (mLibraryWindow) {
-        mLibraryWindow->setVisible(show);
-        if (show) {
-            mLibraryWindow->activateWindow();
-
-            if (mNeedRefreshOnNextDisplay) {
-                refreshImageThumbnailsView();
-                mNeedRefreshOnNextDisplay = false;
-            }
-        }
-    }
-
-    selectionChanged();
-}
-
-void UBLibraryController::tabChanged(int value) {
-    selectionChanged();
-
-    switch (value) {
-    case TabIndex::Image:
-        refreshImageThumbnailsView();
-        break;
-
-    case TabIndex::Shape:
-        refreshShapeThumbnailsView();
-        break;
-
-    case TabIndex::Interactive:
-        refreshInteractiveThumbnailsView();
-        break;
-
-    case TabIndex::Video:
-        refreshVideoThumbnailsView();
-        break;
-
-    case TabIndex::Sound:
-        refreshSoundThumbnailsView();
-        break;
-
-    default:
-        break;
-    }
-}
-
-void UBLibraryController::selectionChanged() {
-    bool hasSelectedItems = false;
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image: {
-            bool canWrite = false;
-            bool isTopLevel = false;
-
-            QList<QTreeWidgetItem *> tw =
-                    mLibraryUI->imageLibraryTreeWidget->selectedItems();
-            if (tw.size() > 0) {
-                UBLibraryFolderItem* fi =
-                        dynamic_cast<UBLibraryFolderItem*> (tw.last());
-                if (fi) {
-                    canWrite = fi->canWrite();
-                    isTopLevel = !fi->parent();
-
-                    mLibraryUI->imageLibrariesStack->setCurrentWidget(
-                            mLibraryUI->imagePageLocal);
-                } else {
-
-                    UBOnlineLibraryItem* oi =
-                            dynamic_cast<UBOnlineLibraryItem*> (tw.last());
-                    if (oi) {
-
-                        mLibraryUI->imageLibrariesStack->setCurrentWidget(
-                                mLibraryUI->imagePageOnline);
-                        mImageWebView->load(oi->url(), oi);
-                    }
-                }
-            }
-
-            mLibraryUI->newFolderButton->setEnabled(canWrite && isTopLevel);
-            mLibraryUI->addImageToLibraryButton->setEnabled(canWrite && !isTopLevel);
-            mLibraryUI->addToDocumentButton->setEnabled(true);
-
-            mLibraryUI->removeButton->setEnabled(canWrite && !isTopLevel);
-
-            hasSelectedItems = mLibraryUI->imageThumbnailView->selectedItems().size()
-                               > 0;
-
-            mLibraryUI->addToPageButton->setEnabled(hasSelectedItems);
-            mLibraryUI->setAsBackgroundButton->setEnabled(hasSelectedItems);
-
-            mLibraryUI->removeBackgroundButton->setEnabled(
-                    activeScene()->hasBackground());
-
-            mLibraryUI->zoomSlider->setValue(
-                    mLibraryUI->imageThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(true);
-        }
-        break;
-    case TabIndex::Shape: {
-            mLibraryUI->newFolderButton->setEnabled(false);
-            mLibraryUI->addImageToLibraryButton->setEnabled(false);
-            mLibraryUI->addToDocumentButton->setEnabled(false);
-            mLibraryUI->removeButton->setEnabled(false);
-
-            hasSelectedItems = mLibraryUI->shapeThumbnailView->selectedItems().size()
-                               > 0;
-
-            mLibraryUI->addToPageButton->setEnabled(hasSelectedItems);
-            mLibraryUI->setAsBackgroundButton->setEnabled(hasSelectedItems);
-
-            mLibraryUI->removeBackgroundButton->setEnabled(
-                    activeScene()->hasBackground());
-
-            mLibraryUI->zoomSlider->setValue(
-                    mLibraryUI->shapeThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(true);
-        }
-        break;
-    case TabIndex::Interactive: {
-            bool canWrite = false;
-            bool isTopLevel = false;
-
-            QList<QTreeWidgetItem *> tw =
-                    mLibraryUI->interactiveLibraryTreeWidget->selectedItems();
-            if (tw.size() > 0) {
-                UBLibraryFolderItem* fi =
-                        dynamic_cast<UBLibraryFolderItem*> (tw.last());
-                if (fi) {
-                    canWrite = fi->canWrite();
-                    isTopLevel = !fi->parent();
-                    mLibraryUI->interactiveLibrariesStack->setCurrentWidget(
-                            mLibraryUI->interactivePageLocal);
-                } else {
-                    UBOnlineLibraryItem* oi =
-                            dynamic_cast<UBOnlineLibraryItem*> (tw.last());
-
-                    if (oi) {
-                        mLibraryUI->interactiveLibrariesStack->setCurrentWidget(
-                                mLibraryUI->interactivePageOnline);
-                        mInteractiveWebView->load(oi->url(), oi);
-                    }
-                }
-            }
-
-            mLibraryUI->newInteractiveFolderButton->setEnabled(canWrite && isTopLevel);
-            mLibraryUI->addInteractiveToLibraryButton->setEnabled(canWrite
-                                                                  && !isTopLevel);
-            mLibraryUI->addToDocumentButton->setEnabled(true);
-
-            hasSelectedItems
-                    = mLibraryUI->interactiveThumbnailView->selectedItems().size() > 0;
-
-            mLibraryUI->removeButton->setEnabled((canWrite && !isTopLevel) || (canWrite
-                                                                               && hasSelectedItems));
-
-            mLibraryUI->addToPageButton->setEnabled(hasSelectedItems);
-            mLibraryUI->setAsBackgroundButton->setEnabled(false);
-            mLibraryUI->removeBackgroundButton->setEnabled(false);
-
-            mLibraryUI->zoomSlider->setValue(
-                    mLibraryUI->interactiveThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(false);
-        }
-        break;
-    case TabIndex::Video: {
-            QList<QTreeWidgetItem *> tw =
-                    mLibraryUI->videoLibraryTreeWidget->selectedItems();
-            if (tw.size() > 0) {
-                hasSelectedItems = true;
-                UBOnlineLibraryItem* oi =
-                        dynamic_cast<UBOnlineLibraryItem*> (tw.last());
-                if (oi) {
-                    mLibraryUI->videoLibrariesStack->setCurrentWidget(
-                            mLibraryUI->videoPageOnline);
-                    mVideoWebView->load(oi->url(), oi);
-                } else {
-                    mLibraryUI->videoLibrariesStack->setCurrentWidget(
-                            mLibraryUI->videoPageLocal);
-                }
-            }
-
-            mLibraryUI->newFolderButton->setEnabled(false);
-            mLibraryUI->addImageToLibraryButton->setEnabled(false);
-            mLibraryUI->addToDocumentButton->setEnabled(true);
-            mLibraryUI->removeButton->setEnabled(false);
-            mLibraryUI->addToPageButton->setEnabled(true);
-            mLibraryUI->setAsBackgroundButton->setEnabled(false);
-            mLibraryUI->removeBackgroundButton->setEnabled(false);
-
-            mLibraryUI->zoomSlider->setValue(mLibraryUI->videoThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(true);
-        }
-        break;
-    case TabIndex::Gip: {
-            hasSelectedItems = mLibraryUI->gipThumbnailView->selectedItems().size() > 0;
-
-            mLibraryUI->newFolderButton->setEnabled(false);
-            mLibraryUI->addImageToLibraryButton->setEnabled(false);
-            mLibraryUI->addToDocumentButton->setEnabled(false);
-            mLibraryUI->removeButton->setEnabled(false);
-            mLibraryUI->addToPageButton->setEnabled(hasSelectedItems);
-            mLibraryUI->setAsBackgroundButton->setEnabled(false);
-            mLibraryUI->removeBackgroundButton->setEnabled(false);
-            mLibraryUI->zoomSlider->setValue(mLibraryUI->gipThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(true);
-        }
-        break;
-
-    case TabIndex::Sound: {
-            hasSelectedItems = mLibraryUI->soundThumbnailView->selectedItems().size()
-                               > 0;
-
-            mLibraryUI->newFolderButton->setEnabled(false);
-            mLibraryUI->addImageToLibraryButton->setEnabled(false);
-            mLibraryUI->addToDocumentButton->setEnabled(false);
-            mLibraryUI->removeButton->setEnabled(false);
-            mLibraryUI->addToPageButton->setEnabled(hasSelectedItems);
-            mLibraryUI->setAsBackgroundButton->setEnabled(false);
-            mLibraryUI->removeBackgroundButton->setEnabled(false);
-            mLibraryUI->zoomSlider->setValue(mLibraryUI->soundThumbnailView->thumbnailWidth());
-            mLibraryUI->zoomSlider->setVisible(true);
-        }
-    default:
-        break;
-    }
-}
-
-void UBLibraryController::zoomSliderValueChanged(int value) {
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        mLibraryUI->imageThumbnailView->setThumbnailWidth(value);
-        UBSettings::settings()->imageThumbnailWidth->set(value);
-        break;
-    case TabIndex::Shape:
-        mLibraryUI->shapeThumbnailView->setThumbnailWidth(value);
-        UBSettings::settings()->shapeThumbnailWidth->set(value);
-        break;
-    case TabIndex::Interactive:
-        mLibraryUI->interactiveThumbnailView->setThumbnailWidth(value);
-        break;
-    case TabIndex::Video:
-        mLibraryUI->videoThumbnailView->setThumbnailWidth(value);
-        UBSettings::settings()->videoThumbnailWidth->set(value);
-        break;
-    case TabIndex::Gip:
-        mLibraryUI->gipThumbnailView->setThumbnailWidth(value);
-        UBSettings::settings()->gipThumbnailWidth->set(value);
-        break;
-    case TabIndex::Sound:
-        mLibraryUI->soundThumbnailView->setThumbnailWidth(value);
-        UBSettings::settings()->soundThumbnailWidth->set(value);
-        break;
-    default:
-        break;
-    }
+    return favoriteVirtualPath;
 }
 
-void UBLibraryController::addShape() {
-    QPointF pos(0, 0);
-
-    if (activeScene()) {
-        QPointF topLeftCorner = mBoardController->controlGeometry().topLeft();
-        pos = mBoardController->controlView()->mapToScene(topLeftCorner.toPoint());
-    }
-
-    int i = 0;
-
-    foreach(QGraphicsItem *item, mLibraryUI->shapeThumbnailView->selectedItems())
-    {
-        ++i;
-
-        QGraphicsSvgItem* svgItem = dynamic_cast<QGraphicsSvgItem*> (item);
-
-        if (svgItem && mSvgItemToFilepath.contains(svgItem) && activeScene()) {
-            QUrl url = QUrl::fromLocalFile(mSvgItemToFilepath.value(svgItem));
-            QGraphicsItem* itemInScene = activeScene()->addSvg(url, QPointF(0,
-                                                                            0));
-
-            itemInScene->setPos(QPoint(pos.x() + 10 * i, pos.y() + 10 * i));
-        }
-    }
-}
-
-void UBLibraryController::setShapeAsBackground() {
-    QList<QGraphicsItem*> selectedItems =
-            mLibraryUI->shapeThumbnailView->selectedItems();
-
-    if (selectedItems.size() > 0) {
-        QGraphicsSvgItem* svgItem =
-                dynamic_cast<QGraphicsSvgItem*> (selectedItems.last());
-
-        if (svgItem && mSvgItemToFilepath.contains(svgItem) && activeScene()) {
-            QString path = mSvgItemToFilepath.value(svgItem);
-            UBGraphicsSvgItem* boardItem = activeScene()->addSvg(
-                    QUrl::fromLocalFile(path), QPointF(0, 0));
-            activeScene()->setAsBackgroundObject(boardItem, true);
-        }
-    }
-}
-
-void UBLibraryController::addToPage() {
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        addImage();
-        break;
-    case TabIndex::Shape:
-        addShape();
-        break;
-    case TabIndex::Interactive:
-        addInteractiveToCurrentPage();
-        break;
-    case TabIndex::Video:
-        addVideo();
-        break;
-    case TabIndex::Sound:
-        addAudio();
-        break;
-    default:
-        break;
-    }
-
-    mLibraryWindow->done(0);
-
-    UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-}
-
-
-void UBLibraryController::setAsBackground()
-{
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        setImageAsBackground();
-        break;
-    case TabIndex::Shape:
-        setShapeAsBackground();
-        break;
-    default:
-        break;
-    }
-
-    selectionChanged();
-}
-
-QRectF UBLibraryController::visibleSceneRect() {
-    QRectF visibleSceneRect(0, 0, 0, 0);
-
-    if (activeScene() && mBoardController && mBoardController->controlView()) {
-        QPointF topLeftCorner = mBoardController->controlGeometry().topLeft();
-        QPointF bottomRightCorner =
-                mBoardController->controlGeometry().bottomRight();
-
-        QPointF sceneTopLeft = mBoardController->controlView()->mapToScene(
-                topLeftCorner.toPoint());
-        QPointF sceneBottomRight = mBoardController->controlView()->mapToScene(
-                bottomRightCorner.toPoint());
-
-        visibleSceneRect.setTopLeft(sceneTopLeft);
-        visibleSceneRect.setBottomRight(sceneBottomRight);
-    }
-
-    return visibleSceneRect;
-}
-
-void UBLibraryController::addImagesToCurrentPage(const QList<QUrl>& images) {
-    QPointF pos = visibleSceneRect().topLeft();
-
-    foreach(const QUrl url, images)
-    {
-        mLastItemOffsetIndex++;
-        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
-
-        QGraphicsItem* itemInScene = 0;
-
-        if (activeScene()) {
-            QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(
-                    url.toString());
-
-            //TODO UB 4.x move this logic to the scene ..
-            if (mimeType == "image/svg+xml") {
-                itemInScene = activeScene()->addSvg(url, pos);
-            } else {
-                itemInScene = activeScene()->addPixmap(QPixmap(
-                        url.toLocalFile()), pos);
-            }
-        }
-
-        if (itemInScene) {
-            itemInScene = activeScene()->scaleToFitDocumentSize(itemInScene,
-                                                                false, UBSettings::objectInControlViewMargin);
-
-            itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex,
-                                       pos.y() + 50 * mLastItemOffsetIndex));
-        }
-    }
-}
-
-void UBLibraryController::addVideosToCurrentPage(const QList<QUrl>& videos) {
-    QPointF pos = visibleSceneRect().topLeft();
-
-    foreach(const QUrl url, videos)
-    {
-        mLastItemOffsetIndex++;
-        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
-
-        UBGraphicsVideoItem* itemInScene =
-                UBApplication::boardController->addVideo(url, false, pos);
-        itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y()
-                                   + 50 * mLastItemOffsetIndex));
-    }
-}
-
-void UBLibraryController::addAudiosToCurrentPage(const QList<QUrl>& sounds) {
-    QPointF topLeftPos = visibleSceneRect().topLeft();
-
-    QPointF pos = topLeftPos;
-
-    foreach(const QUrl url, sounds)
-    {
-        mLastItemOffsetIndex++;
-        mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5);
-        pos = QPointF(topLeftPos.x() + 50 * mLastItemOffsetIndex,
-                      topLeftPos.y() + 50 * mLastItemOffsetIndex);
-        UBApplication::boardController->addAudio(url, false, pos);
-    }
-}
-
-void UBLibraryController::addInteractivesToCurrentPage(
-        const QList<QUrl>& widgets) {
-    foreach(const QUrl url, widgets)
-    {
-        mBoardController->downloadURL(url, QPointF(0, 0));
-    }
-}
-
-void UBLibraryController::addImage() {
-    QList<QUrl> images;
-
-    foreach(QGraphicsItem *item, mLibraryUI->imageThumbnailView->selectedItems())
-    {
-        QGraphicsPixmapItem* pixmapItem =
-                dynamic_cast<QGraphicsPixmapItem*> (item);
-
-        if (pixmapItem && activeScene()) {
-            images << QUrl::fromLocalFile(mPixmapItemToFilepath.value(
-                    pixmapItem));
-        } else {
-            QGraphicsSvgItem* svgItem = dynamic_cast<QGraphicsSvgItem*> (item);
-
-            images << QUrl::fromLocalFile(
-                    mSvgImageItemToFilepath.value(svgItem));
-        }
-    }
-
-    addImagesToCurrentPage(images);
-}
-
-void UBLibraryController::addVideo() {
-    QList<QUrl> urls;
-
-    foreach(QGraphicsItem *item, mLibraryUI->videoThumbnailView->selectedItems())
-    {
-        UBThumbnailVideo* videoItem = dynamic_cast<UBThumbnailVideo*> (item);
-
-        if (videoItem && activeScene()) {
-            urls << videoItem->path();
-        }
-    }
-
-    addVideosToCurrentPage(urls);
-}
-
-void UBLibraryController::addAudio() {
-    QList<QUrl> urls;
-
-    foreach(QGraphicsItem *item, mLibraryUI->soundThumbnailView->selectedItems())
-    {
-        QGraphicsPixmapItem* pixmapItem =
-                dynamic_cast<QGraphicsPixmapItem*> (item);
-
-        if (pixmapItem && activeScene()) {
-            urls << QUrl::fromLocalFile(mSoundItemToFilepath.value(pixmapItem));
-        }
-    }
-
-    addAudiosToCurrentPage(urls);
-}
-
-void UBLibraryController::setImageAsBackground() {
-    QList<QGraphicsItem*> selectedItems =
-            mLibraryUI->imageThumbnailView->selectedItems();
-
-    if (selectedItems.size() > 0) {
-        QGraphicsPixmapItem* pixmapItem =
-                dynamic_cast<QGraphicsPixmapItem*> (selectedItems.last());
-
-        if (pixmapItem && activeScene()) {
-            QPixmap pix = mPixmapItemToFilepath.value(pixmapItem);
-            UBGraphicsPixmapItem* boardItem = activeScene()->addPixmap(pix,
-                                                                       QPointF(0, 0));
-            activeScene()->setAsBackgroundObject(boardItem, true);
-
-            return;
-        }
-
-        QGraphicsSvgItem* svgItem =
-                dynamic_cast<QGraphicsSvgItem*> (selectedItems.last());
-
-        if (svgItem && activeScene() && mSvgImageItemToFilepath.contains(svgItem)) {
-            QUrl url = QUrl::fromLocalFile(mSvgImageItemToFilepath.value(svgItem));
-            QGraphicsSvgItem* boardItem = activeScene()->addSvg(url, QPointF(0, 0));
-            activeScene()->setAsBackgroundObject(boardItem, true, true);
-        }
-    }
-}
-
-
-
-
-void UBLibraryController::closeWindow() {
-    mLibraryWindow->hide();
-}
-
-void UBLibraryController::itemSelectionChanged() {
-    selectionChanged();
-
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        refreshImageThumbnailsView();
-        break;
-    case TabIndex::Interactive:
-        refreshInteractiveThumbnailsView();
-        break;
-    case TabIndex::Video:
-        refreshVideoThumbnailsView();
-        break;
-    case TabIndex::Sound:
-        refreshSoundThumbnailsView();
-        break;
-    default:
-        break;
-    }
-}
-
-void UBLibraryController::itemChanged(QTreeWidgetItem * item, int column) {
-    UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (item);
-
-    if (fi) {
-        QString newName = item->text(column);
-
-        QString oldPath = fi->dir().canonicalPath();
-
-        int lastSlashIndex = oldPath.lastIndexOf("/");
-
-        QString newPath = oldPath.left(lastSlashIndex + 1) + newName;
-
-        qDebug() << "renaming" << oldPath << "to" << newPath;
-
-        if (fi->dir().rename(oldPath, newPath)) {
-            fi->setDir(QDir(newPath));
-        } else {
-            item->setText(column, fi->dir().dirName());
-        }
-    }
-}
-
-void UBLibraryController::thumbnailViewResized() {
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image:
-        mLibraryUI->zoomSlider->setMaximum(mLibraryUI->imageThumbnailView->width());
-        break;
-    case TabIndex::Shape:
-        mLibraryUI->zoomSlider->setMaximum(mLibraryUI->shapeThumbnailView->width());
-        break;
-    case TabIndex::Interactive:
-        mLibraryUI->zoomSlider->setMaximum(
-                mLibraryUI->interactiveThumbnailView->width());
-        break;
-    case TabIndex::Video:
-        mLibraryUI->zoomSlider->setMaximum(mLibraryUI->videoThumbnailView->width());
-        break;
-    case TabIndex::Gip:
-        mLibraryUI->zoomSlider->setMaximum(mLibraryUI->gipThumbnailView->width());
-        break;
-    case TabIndex::Sound:
-        mLibraryUI->zoomSlider->setMaximum(mLibraryUI->soundThumbnailView->width());
-        break;
-    default:
-        break;
-    }
-}
-
-UBLibraryFolderItem::UBLibraryFolderItem(const QDir& pDir, const QString& name,
-                                         QTreeWidgetItem * parent, bool canWrite,
-                                         const QStringList& pExtensionsToHide) :
-QTreeWidgetItem(parent), mExtensionsToHide(pExtensionsToHide), mDir(pDir),
-mCanWrite(canWrite) {
-    if (name.length() == 0) {
-        setText(0, UBLibraryController::trUtf8(pDir.dirName().toUtf8()));
-    } else {
-        setText(0, UBLibraryController::trUtf8(name.toUtf8()));
-    }
-
-    if (canWrite) {
-        setFlags(flags() | Qt::ItemIsEditable);
-    }
-
-
-    if (!mDir.exists())
-        mDir.mkpath(mDir.path());
-
-    refreshSubDirs();
-}
-
-void UBLibraryFolderItem::refreshSubDirs() {
-    foreach(QTreeWidgetItem *ti, takeChildren())
-        delete ti;
-
-    QStringList subDirs = mDir.entryList(QStringList(), QDir::Dirs
-                                         | QDir::NoDotAndDotDot | QDir::NoSymLinks, QDir::Name); // TODO UB 4.x support symlinks properly
-
-    foreach(QString subDirName, subDirs)
-    {
-        QString ext = UBFileSystemUtils::extension(subDirName);
-
-        if (!mExtensionsToHide.contains(ext)) {
-            new UBLibraryFolderItem(QDir(mDir.path() + "/" + subDirName),
-                                    UBLibraryController::trUtf8(subDirName.toUtf8()), this,
-                                    mCanWrite, mExtensionsToHide);
-        }
-    }
-}
-
-void UBLibraryController::refreshVideoThumbnailsView() {
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    QList<QGraphicsItem*> items;
-    QList<QUrl> itemsPath;
-    QStringList labels;
-
-    QList<QTreeWidgetItem *> tw =
-            mLibraryUI->videoLibraryTreeWidget->selectedItems();
-
-    if (tw.size() > 0) {
-        UBLibraryFolderItem* fi = dynamic_cast<UBLibraryFolderItem*> (tw.last());
-
-        if (fi) {
-            QStringList
-                    videoPaths = UBPersistenceManager::persistenceManager()->allVideos(fi->dir());
-
-            for (int i = 0; i < videoPaths.size(); i++) {
-                QString path = videoPaths.at(i);
-
-                UBThumbnailVideo *pixmapItem = new UBThumbnailVideo(QUrl::fromLocalFile(path));
-
-                items.append(pixmapItem);
-                itemsPath.append(QUrl::fromLocalFile(path));
-
-                QFileInfo file(path);
-
-                labels.append(file.completeBaseName());
-            }
-        }
-    }
-
-    mLibraryUI->videoThumbnailView->setGraphicsItems(items, itemsPath, labels);
-
-    QApplication::restoreOverrideCursor();
-}
-
-void UBLibraryController::refreshSoundThumbnailsView() {
-    QList<QGraphicsItem*> soundItems;
-    QList<QUrl> soundItemsPath;
-    QStringList soundLabels;
-
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-    QStringList soundWidgetPaths = UBPersistenceManager::persistenceManager()->allSounds();
-
-    for (int i = 0; i < soundWidgetPaths.size(); i++) {
-        QString path = soundWidgetPaths.at(i);
-
-        QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(QPixmap(
-                ":/images/soundIcon.svg"));
-
-        QString name = path;
-
-        mSoundItemToFilepath.insert(pixmapItem, path);
-        soundItems.append(pixmapItem);
-        soundItemsPath.append(QUrl::fromLocalFile(path));
-        soundLabels.append(UBFileSystemUtils::lastPathComponent(name));
-    }
-
-    mLibraryUI->soundThumbnailView->setGraphicsItems(soundItems, soundItemsPath,
-                                                     soundLabels);
-
-    QApplication::restoreOverrideCursor();
-}
-
-void UBLibraryController::addObjectFromFilesystemToPage() {
-
-    bool hasAddedObjects = false;
-
-    switch (mLibraryUI->libraryTab->currentIndex()) {
-    case TabIndex::Image: {
-            QString extensions;
-
-            foreach(QString ext, UBSettings::settings()->imageFileExtensions)
-            {
-                extensions += " *.";
-                extensions += ext;
-            }
-
-            QString defaultPath =
-                    UBSettings::settings()->lastPicturePath->get().toString();
-
-            QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr(
-                    "Add Images to Current Page"), defaultPath,
-                                                                  tr("All Images (%1)").arg(extensions));
-
-            if (filenames.size() > 0) {
-                QFileInfo fi(filenames.at(0));
-                UBSettings::settings()->lastPicturePath->set(QVariant(
-                        fi.dir().absolutePath()));
-
-                QList<QUrl> urls;
-                foreach(const QString s, filenames)
-                {
-                    urls << QUrl::fromLocalFile(s);
-                }
-
-                addImagesToCurrentPage(urls);
-
-                hasAddedObjects = true;
-            }
-            break;
-        }
-
-    case TabIndex::Interactive: {
-            QString defaultWidgetPath =
-                    UBSettings::settings()->lastWidgetPath->get().toString();
-
-            QString extensions;
-
-            foreach(QString ext, UBSettings::settings()->interactiveContentFileExtensions)
-            {
-                extensions += " *.";
-                extensions += ext;
-            }
-
-            QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr(
-                    "Add Applications to Current Page"), defaultWidgetPath, tr(
-                            "All Applications (%1)").arg(extensions));
-
-            if (filenames.size() > 0) {
-                QFileInfo fi(filenames.at(0));
-                UBSettings::settings()->lastWidgetPath->set(QVariant(
-                        fi.dir().absolutePath()));
-
-                QList<QUrl> urls;
-                foreach(const QString s, filenames)
-                {
-                    urls << QUrl::fromLocalFile(s);
-                }
-
-                addInteractivesToCurrentPage(urls);
-
-                hasAddedObjects = true;
-            }
-
-            break;
-        }
-
-    case TabIndex::Video: {
-            QString defaultVideoPath =
-                    UBSettings::settings()->lastVideoPath->get().toString();
-
-            QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr(
-                    "Add Movies to Current Page"), defaultVideoPath, tr(
-                            "All Files (*.*)"));
-            if (filenames.size() > 0) {
-                QFileInfo fi(filenames.at(0));
-                UBSettings::settings()->lastVideoPath->set(QVariant(
-                        fi.dir().absolutePath()));
-
-                QList<QUrl> urls;
-                foreach(const QString s, filenames)
-                {
-                    urls << QUrl::fromLocalFile(s);
-                }
-
-                addVideosToCurrentPage(urls);
-
-                hasAddedObjects = true;
-            }
-
-            break;
-        }
-    case TabIndex::Gip: {
-            //TODO
-            break;
-        }
-    default:
-        break;
-
-    }
-
-    UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
-    if (hasAddedObjects) {
-        mLibraryWindow->done(0);
-    }
-}
-
-void UBLibraryController::addInteractiveToCurrentPage() {
-    QList<QUrl> widgets;
-
-    foreach(QGraphicsItem *item, mLibraryUI->interactiveThumbnailView->selectedItems())
-    {
-        QGraphicsPixmapItem* iconItem =
-                dynamic_cast<QGraphicsPixmapItem*> (item);
-
-        if (iconItem && activeScene()) {
-            QString url = mInteractiveItemToFilepath.value(iconItem);
-
-            if (url.startsWith("uniboardTool")) {
-                widgets << QUrl(url);
-            } else {
-                widgets << QUrl::fromLocalFile(url);
-            }
-        }
-    }
-
-    addInteractivesToCurrentPage(widgets);
-}
-
-void UBLibraryController::loadLibraries()
-{
-    if (mLibraryFileToDownload.size() > 0) {
-        QString mainLibrary = mLibraryFileToDownload.takeFirst();
-
-        UBNetworkAccessManager *nam =
-                UBNetworkAccessManager::defaultAccessManager();
-
-        UBServerXMLHttpRequest *librariesReq = new UBServerXMLHttpRequest(nam); // Deleted automatically after reply content is consumed
-        connect(librariesReq, SIGNAL(finished(bool, const QByteArray&)), this,
-                SLOT(getLibraryListResponse(bool, const QByteArray&)));
-
-        librariesReq->get(QUrl(mainLibrary));
-    }
-}
-
-void UBLibraryController::getLibraryListResponse(bool ok,
-                                                 const QByteArray& replyContent) {
-    if (!ok)
-        return;
-
-    QXmlStreamReader xml(replyContent);
-
-    while (!xml.atEnd()) {
-        xml.readNext();
-
-        if (xml.isStartElement()) {
-            if (xml.name() == "library") {
-                QStringRef libraryTitle = xml.attributes().value("title");
-                QStringRef libraryHref = xml.attributes().value("href");
-                QStringRef libraryType = xml.attributes().value("type");
-
-                if (!libraryTitle.isNull() && !libraryTitle.isNull()
-                    && !libraryType.isNull()) {
-                    QString title = libraryTitle.toString();
-                    QUrl href(libraryHref.toString());
-
-                    UBOnlineLibraryItem *ubLibrary = new UBOnlineLibraryItem(href,
-                                                                             title, 0);
-
-                    if (libraryType.toString() == "image") {
-                        if (!mImageOnlineTi) {
-                            mImageOnlineTi = new QTreeWidgetItem();
-                            mImageOnlineTi->setText(0, tr("Online"));
-                            mImageOnlineTi->setIcon(0, QPixmap(
-                                    ":/images/online.png"));
-
-                            mLibraryUI->imageLibraryTreeWidget->addTopLevelItem(
-                                    mImageOnlineTi);
-                        }
-                        mImageOnlineTi->addChild(ubLibrary);
-                        mImageOnlineTi->setExpanded(true);
-                    } else if (libraryType.toString() == "video") {
-                        if (!mVideoOnlineTi) {
-                            mVideoOnlineTi = new QTreeWidgetItem();
-                            mVideoOnlineTi->setText(0, tr("Online"));
-                            mVideoOnlineTi->setIcon(0, QPixmap(
-                                    ":/images/online.png"));
-
-                            mLibraryUI->videoLibraryTreeWidget->addTopLevelItem(
-                                    mVideoOnlineTi);
-                        }
-                        mVideoOnlineTi->addChild(ubLibrary);
-                        mVideoOnlineTi->setExpanded(true);
-                    } else if (libraryType.toString() == "interactive") {
-                        if (!mInteractiveOnlineTi) {
-                            mInteractiveOnlineTi = new QTreeWidgetItem();
-                            mInteractiveOnlineTi->setText(0, tr("Online"));
-                            mInteractiveOnlineTi->setIcon(0, QPixmap(
-                                    ":/images/online.png"));
-
-                            mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem(
-                                    mInteractiveOnlineTi);
-                        }
-                        mInteractiveOnlineTi->addChild(ubLibrary);
-                        mInteractiveOnlineTi->setExpanded(true);
-
-                    }
-                }
-            }
-        }
-    }
-
-    loadLibraries();
-}
-
-UBLibraryWebView::UBLibraryWebView(QWidget * parent) :
-        QWebView(parent), mCurrentLibraryItem(0) {
-    setPage(new UBWebPage(this));
-
-    QWebView::settings()->setAttribute(QWebSettings::PluginsEnabled, true);
-    QWebView::page()->setNetworkAccessManager(
-            UBNetworkAccessManager::defaultAccessManager());
-
-    connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this,
-            SLOT(javaScriptWindowObjectCleared()));
-    connect(this, SIGNAL(iconChanged()), this, SLOT(newIconAvailable()));
-    connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
-}
-
-void UBLibraryWebView::javaScriptWindowObjectCleared() {
-    UBLibraryAPI *libraryAPI = new UBLibraryAPI(this);
-
-    page()->mainFrame()->addToJavaScriptWindowObject("uniboard", libraryAPI);
-}
-
-void UBLibraryWebView::loadFinished(bool ok) {
-    if (ok) {
-        QString installDragHandler =
-                "document.body.ondragstart = function(event) {";
-
-        installDragHandler += "var p = event.target.parentNode;";
-        installDragHandler += "if (p && p.href){";
-        installDragHandler += "event.preventDefault();";
-        installDragHandler += "uniboard.startDrag(p.href);";
-        installDragHandler += "}";
-        installDragHandler += "}";
-
-        page()->mainFrame()->evaluateJavaScript(installDragHandler);
-    }
-
-    mCurrentLibraryItem->setIcon(0, QWebSettings::iconForUrl(url()));
-}
-
-void UBLibraryWebView::newIconAvailable() {
-    if (mCurrentLibraryItem)
-        mCurrentLibraryItem->setIcon(0, icon());
-
-}
-
-QWebView * UBLibraryWebView::createWindow(QWebPage::WebWindowType type) {
-    if (type == QWebPage::WebBrowserWindow) {
-        UBApplication::applicationController->showInternet();
-        return UBApplication::webController->createNewTab();
-    } else {
-        return this;
-    }
-}
-
-UBLibraryPreloader::UBLibraryPreloader(QObject* pParent) :
-        QObject(pParent) {
-    QTimer::singleShot(30000, this, SLOT(loadLibrary()));
-}
-
-void UBLibraryPreloader::loadLibrary() {
-    QStringList libraries = UBLibraryController::onlineLibraries();
-
-    if (libraries.length() > 0) {
-        QString mainLibrary = libraries.at(0);
-
-        UBNetworkAccessManager *nam =
-                UBNetworkAccessManager::defaultAccessManager();
-
-        UBServerXMLHttpRequest *librariesReq = new UBServerXMLHttpRequest(nam); // Deleted automatically after reply content is consumed
-        connect(librariesReq, SIGNAL(finished(bool, const QByteArray&)), this,
-                SLOT(getLibraryListResponse(bool, const QByteArray&)));
-
-        librariesReq->get(QUrl(mainLibrary));
-    }
-}
-
-void UBLibraryPreloader::getLibraryListResponse(bool ok,
-                                                const QByteArray& replyContent) {
-    if (!ok)
-        return;
-
-    QXmlStreamReader xml(replyContent);
-
-    while (!xml.atEnd()) {
-        xml.readNext();
-
-        if (xml.isStartElement()) {
-            if (xml.name() == "library") {
-                QStringRef libraryHref = xml.attributes().value("href");
-                QStringRef libraryType = xml.attributes().value("type");
-
-                if (!libraryType.isNull() && !libraryHref.isNull()) {
-                    if (libraryType.toString() == "interactive") {
-                        QUrl href(libraryHref.toString());
-
-                        mWebView = new QWebView(UBApplication::mainWindow);
-                        mWebView->setVisible(false);
-
-                        connect(mWebView, SIGNAL(loadFinished(bool)), this,
-                                SLOT(loadFinished(bool)));
-
-                        mWebView->load(QUrl(libraryHref.toString()));
-
-                        return;
-                    }
-                }
-            }
-        }
-    }
-}
-
-void UBLibraryPreloader::loadFinished(bool ok) {
-    Q_UNUSED(ok);
-
-    mWebView->deleteLater();
-    deleteLater();
-}
-
-void UBLibraryController::addNativeToolToFavorites(const QUrl& url) {
-    QString id = url.toString();
-
-    QStringList favoritesNativeTools =
-            UBSettings::settings()->favoritesNativeToolUris->get().toStringList();
-
-    if (!favoritesNativeTools.contains(id)) {
-        favoritesNativeTools << id;
-        UBSettings::settings()->favoritesNativeToolUris->set(favoritesNativeTools);
-    }
-
-    refreshInteractiveThumbnailsView();
-}
-
-QString UBLibraryController::favoritePath()
-{
-    return favoriteVirtualPath;
-}
-
-
-
 UBLibElement::UBLibElement() {
     mType = eUBLibElementType_Category;
     mName = QObject::tr("/Home", "Category list label on navigation tool bar");
diff --git a/src/board/UBLibraryController.h b/src/board/UBLibraryController.h
index 2596d87c..25539234 100644
--- a/src/board/UBLibraryController.h
+++ b/src/board/UBLibraryController.h
@@ -6,8 +6,6 @@
 
 #include "web/UBWebPage.h"
 
-#include "ui_library.h"
-
 class UBGraphicsScene;
 class UBBoardController;
 class QGraphicsSvgItem;
@@ -82,14 +80,6 @@ class UBLibraryController : public QObject
         UBLibraryController(QWidget *parentWidget, UBBoardController *boardController);
         virtual ~UBLibraryController();
 
-        QWidget* libraryWindow()
-        {
-            return mLibraryWindow;
-        }
-
-        static QStringList onlineLibraries();
-        static void preloadFirstOnlineLibrary();
-
         QList<UBLibElement*> getContent(UBLibElement* pElement);
         void moveContent(QList<UBLibElement*> sourceList, UBLibElement *pDestination);
         void trashElements(QList<UBLibElement*> trashList);
@@ -117,42 +107,10 @@ class UBLibraryController : public QObject
 
     public slots:
         void removeBackground();
-
-
-        void showLibraryDialog(bool show);
-
-        void refreshShapeThumbnailsView();
-        void refreshImageThumbnailsView();
-        void refreshInteractiveThumbnailsView();
-        void refreshVideoThumbnailsView();
-        void refreshSoundThumbnailsView();
-
-        void addShape();
-        void setShapeAsBackground();
-
-        void addToPage();
-        void setAsBackground();
-
-
-        void addImage();
-        void addVideo();
-        void addAudio();
-        void addInteractiveToCurrentPage();
-
         void addImagesToCurrentPage(const QList<QUrl>& images);
         void addVideosToCurrentPage(const QList<QUrl>& videos);
         void addAudiosToCurrentPage(const QList<QUrl>& sounds);
         void addInteractivesToCurrentPage(const QList<QUrl>& interactiveWidgets);
-        void setImageAsBackground();
-
-        void closeWindow();
-
-        void addObjectFromFilesystemToPage();
-
-        void needRefreshOnNextDisplay()
-        {
-                mNeedRefreshOnNextDisplay = true;
-        }
 
     protected:
 
@@ -186,215 +144,11 @@ class UBLibraryController : public QObject
 
         UBLibElement* isOnFavoriteList(UBLibElement * element);
 
-        void loadLibraries();
-
         QWidget *mParentWidget;
         UBBoardController *mBoardController;
-        QDialog *mLibraryWindow;
-        Ui::library *mLibraryUI;
-
-        // TODO UB 4.x break this logic, by carrying the path within the thumb item (see Video items path)
-        //
-        QMap<QGraphicsSvgItem*, QString> mSvgItemToFilepath; //shape mapping
-        QMap<QGraphicsSvgItem*, QString> mSvgImageItemToFilepath; // svg image mapping
-        QMap<QGraphicsPixmapItem*, QString> mPixmapItemToFilepath; // other image mapping
-        QMap<QGraphicsPixmapItem*, QString> mInteractiveItemToFilepath; // interactive widget mapping
-        QMap<QGraphicsPixmapItem*, QString> mSoundItemToFilepath; // sounds mapping
-
-        UBLibraryWebView *mImageWebView;
-        UBLibraryWebView *mVideoWebView;
-        UBLibraryWebView *mInteractiveWebView;
-
-        QTreeWidgetItem *mImageOnlineTi;
-        QTreeWidgetItem *mVideoOnlineTi;
-        QTreeWidgetItem *mInteractiveOnlineTi;
-        QTreeWidgetItem *mInteractiveUniboardTi;
-
-        struct TabIndex
-        {
-            enum Enum
-            {
-                Gip = 0,
-                Interactive = 1,
-                Image = 2,
-                Video = 3,
-                Shape = 4,
-                Sound = 5
-            };
-        };
 
         int mLastItemOffsetIndex;
 
-        QStringList mLibraryFileToDownload;
-
-        bool mNeedRefreshOnNextDisplay;
-
-
-    private slots:
-
-        void tabChanged(int value);
-
-        void zoomSliderValueChanged(int value);
-
-        void createNewFolder();
-        void addInteractivesToLibrary();
-        void addImagesToLibrary();
-
-        void removeItemsFromLibrary(UBThumbnailWidget* pThumbnailView);
-        void removeDir();
-        void remove();
-
-        void itemSelectionChanged();
-        void itemChanged(QTreeWidgetItem * item, int column);
-
-        void selectionChanged();
-
-        void thumbnailViewResized();
-
-        void getLibraryListResponse(bool, const QByteArray&);
-
-};
-
-
-class UBLibraryFolderItem : public QTreeWidgetItem
-{
-
-    public:
-
-        UBLibraryFolderItem(const QDir& pDir, const QString& name, QTreeWidgetItem * parent,
-            bool pCanWrite, const QStringList& pExtensionsToHide);
-
-        virtual ~UBLibraryFolderItem(){}
-
-        void refreshSubDirs();
-
-        QDir dir()
-        {
-            return mDir;
-        }
-
-        void setDir(const QDir& dir)
-        {
-            mDir = dir;
-        }
-
-        bool canWrite()
-        {
-            return mCanWrite;
-        }
-
-        void setCanWrite(bool canWrite)
-        {
-            mCanWrite = canWrite;
-        }
-
-    private:
-        const QStringList mExtensionsToHide;
-        QDir mDir;
-        bool mCanWrite;
 };
 
-
-class UBOnlineLibraryItem : public QTreeWidgetItem
-{
-
-    public:
-
-        UBOnlineLibraryItem(const QUrl& pUrl, const QString& name, QTreeWidgetItem * parent)
-            : QTreeWidgetItem(parent)
-            , mUrl(pUrl)
-        {
-            setText(0, UBLibraryController::trUtf8(name.toUtf8()));
-            setIcon(0, QWebSettings::iconForUrl(pUrl));
-        }
-
-        virtual ~UBOnlineLibraryItem(){}
-
-        QUrl url() const
-        {
-            return mUrl;
-        }
-
-    private:
-
-        QUrl mUrl;
-};
-
-
-class UBLibraryWebView : public QWebView
-{
-    Q_OBJECT;
-
-    public:
-        UBLibraryWebView(QWidget * parent = 0 );
-        virtual ~UBLibraryWebView(){};
-
-        virtual void mousePressEvent ( QMouseEvent * event)
-        {
-            QWebView::mousePressEvent(event);
-        }
-
-        virtual void mouseMoveEvent ( QMouseEvent * event)
-        {
-            QWebView::mouseMoveEvent(event);
-        }
-
-        virtual void mouseReleaseEvent ( QMouseEvent * event)
-        {
-            QWebView::mouseReleaseEvent(event);
-        }
-
-        void load ( const QUrl & url )
-        {
-            mCurrentLibraryItem = 0;
-            QWebView::load(url);
-        }
-
-        void load ( const QUrl & url, UBOnlineLibraryItem* pLibraryItem)
-        {
-            mCurrentLibraryItem = pLibraryItem;
-            QWebView::load(url);
-        }
-
-    protected:
-
-        virtual QWebView * createWindow(QWebPage::WebWindowType type);
-
-    private slots:
-
-        void javaScriptWindowObjectCleared();
-
-        void newIconAvailable();
-
-        void loadFinished(bool ok);
-
-    private:
-        UBOnlineLibraryItem* mCurrentLibraryItem;
-
-
-};
-
-
-class UBLibraryPreloader : public QObject
-{
-    Q_OBJECT;
-
-    public:
-        UBLibraryPreloader(QObject* pParent);
-        virtual ~UBLibraryPreloader(){};
-
-    private slots:
-
-        void loadLibrary();
-
-        void getLibraryListResponse(bool ok, const QByteArray& replyContent);
-
-        void loadFinished (bool ok);
-
-    private:
-        QWebView *mWebView;
-};
-
-
-
 #endif /* UBLIBRARYCONTROLLER_H_ */
diff --git a/src/board/UBLibraryTreeWidget.cpp b/src/board/UBLibraryTreeWidget.cpp
deleted file mode 100644
index c1578e95..00000000
--- a/src/board/UBLibraryTreeWidget.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * UBLibraryTreeWidget.cpp
- *
- *  Created on: 28 juil. 2009
- *      Author: Luc
- */
-
-#include "UBLibraryTreeWidget.h"
-
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "core/UBApplication.h"
-#include "core/UBSettings.h"
-
-#include "board/UBBoardController.h"
-
-#include "network/UBHttpGet.h"
-
-#include "domain/UBW3CWidget.h"
-
-#include "UBLibraryController.h"
-
-
-UBLibraryTreeWidget::UBLibraryTreeWidget(QWidget * parent)
-    : QTreeWidget(parent)
-    , mDropFolderItem(0)
-{
-    setDragDropMode(QAbstractItemView::DropOnly);
-    setAcceptDrops(true);
-    viewport()->setAcceptDrops(true);
-    setDropIndicatorShown(true);
-}
-
-
-UBLibraryTreeWidget::~UBLibraryTreeWidget()
-{
-    // NOOP
-}
-
-bool UBLibraryTreeWidget::supportMimeData(const QMimeData* pMimeData)
-{
-    foreach(QString mimeType, mMimeTypes)
-    {
-        foreach(QString format, pMimeData->formats())
-        {
-            if (format.startsWith(mimeType))
-            {
-                return true;
-            }
-        }
-    }
-
-    foreach (QUrl url, pMimeData->urls())
-    {
-        foreach(QString ext, mFileExtensions)
-        {
-            if (url.toString().endsWith(ext))
-            {
-                return true;
-            }
-        }
-    }
-
-    foreach (QUrl url, pMimeData->urls())
-    {
-        foreach(QString protocole, mProtocoles)
-        {
-            if (url.toString().startsWith(protocole))
-            {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-
-void UBLibraryTreeWidget::dragEnterEvent(QDragEnterEvent * event)
-{
-    mDropFolderItem = 0;
-
-    if (supportMimeData(event->mimeData()))
-    {
-        event->acceptProposedAction();
-        return;
-    }
-    else
-    {
-        QTreeWidget::dragEnterEvent(event);
-    }
-}
-
-
-void UBLibraryTreeWidget::dragMoveEvent(QDragMoveEvent * event)
-{
-    QTreeWidgetItem * ti = itemAt(event->pos());
-    UBLibraryFolderItem * lfi = dynamic_cast<UBLibraryFolderItem*>(ti);
-
-    if (lfi && lfi->canWrite() && !(lfi == currentItem()))
-    {
-        event->acceptProposedAction();
-        return;
-    }
-
-    QTreeWidget::dragMoveEvent(event);
-}
-
-
-void UBLibraryTreeWidget::dropEvent(QDropEvent * event)
-{
-    QTreeWidgetItem * ti = itemAt(event->pos());
-    UBLibraryFolderItem * lfi = dynamic_cast<UBLibraryFolderItem*>(ti);
-
-    if (lfi)
-    {
-        UBLibraryFolderItem * sourceLfi = dynamic_cast<UBLibraryFolderItem*>(currentItem());
-
-        mDropFolderItem = lfi;
-
-        QDir dir = lfi->dir();
-
-        foreach(QUrl url, event->mimeData()->urls())
-        {
-            // is it local ?
-            QString localFile = url.toLocalFile();
-
-            if (localFile.length() > 0)
-            {
-                QFileInfo fileInfo(localFile);
-
-                //is it a file ?
-                if (fileInfo.isFile())
-                {
-                    // copy file to dir
-                    QFile file(localFile);
-
-                    if (sourceLfi && sourceLfi->canWrite())
-                    {
-                        file.rename(dir.filePath(fileInfo.fileName()));
-                        emit contentChanged();
-                    }
-                    else
-                    {
-                        file.copy(dir.filePath(fileInfo.fileName()));
-                    }
-                }
-                else if (fileInfo.isDir())
-                {
-                    if (sourceLfi && sourceLfi->canWrite())
-                    {
-                        UBFileSystemUtils::moveDir(localFile, dir.filePath(fileInfo.fileName()));
-                        emit contentChanged();
-                    }
-                    else
-                    {
-                        UBFileSystemUtils::copyDir(localFile, dir.filePath(fileInfo.fileName()));
-                    }
-                }
-            }
-            else if (url.toString().startsWith("uniboardTool://"))
-            {
-                UBApplication::boardController->libraryController()->addNativeToolToFavorites(url);
-            }
-            else
-            {
-                UBHttpGet* httpGet = new UBHttpGet(this); // TODO UB 4.6 we are leaking here, tree widget is never destroyed
-
-                connect(httpGet, SIGNAL(downloadFinished(bool, QUrl, QString, QByteArray, QPointF, QSize, bool)),
-                        this, SLOT(downloadFinished(bool, QUrl, QString, QByteArray)));
-
-                UBApplication::setOverrideCursor(Qt::WaitCursor);
-                UBApplication::showMessage(tr("Downloading content from %1").arg(url.toString()), true);
-
-                httpGet->get(url);
-            }
-        }
-
-        event->acceptProposedAction();
-        return;
-    }
-    else
-    {
-        QTreeWidget::dropEvent(event);
-    }
-}
-
-
-void UBLibraryTreeWidget::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData)
-{
-    if (!pSuccess)
-    {
-        UBApplication::showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString()));
-    }
-    else
-    {
-        UBApplication::showMessage(tr("Download finished"));
-        QStringList urlPathParts = sourceUrl.path().split("/");
-
-        if (urlPathParts.length() > 0 && mDropFolderItem)
-        {
-            QString fileName = urlPathParts.last();
-
-            QString ext = UBFileSystemUtils::fileExtensionFromMimeType(pContentTypeHeader);
-
-            if (!fileName.endsWith(ext))
-            {
-                fileName += "." + ext;
-            }
-
-            QString filePath = mDropFolderItem->dir().filePath(fileName);
-            QString nextItemPath  = UBFileSystemUtils::nextAvailableFileName(filePath);
-
-            if (UBSettings::widgetFileExtensions.contains(ext))
-            {
-                QTemporaryFile tempFile;
-
-                if (tempFile.open())
-                {
-                    tempFile.write(pData);
-                    tempFile.close();
-
-                    QDir widgetDir(nextItemPath);
-
-                    UBFileSystemUtils::expandZipToDir(tempFile, widgetDir);
-                }
-            }
-            else if(UBW3CWidget::hasNPAPIWrapper(pContentTypeHeader))
-            {
-                QString widgetPath = UBW3CWidget::createNPAPIWrapperInDir(sourceUrl.toString()
-                        , mDropFolderItem->dir(), pContentTypeHeader);
-            }
-            else
-            {
-                QFile itemFile(nextItemPath);
-                if (itemFile.open(QIODevice::WriteOnly))
-                {
-                    itemFile.write(pData);
-                    itemFile.close();
-                }
-            }
-        }
-    }
-
-    UBApplication::restoreOverrideCursor();
-}
-
diff --git a/src/board/UBLibraryTreeWidget.h b/src/board/UBLibraryTreeWidget.h
deleted file mode 100644
index b623dc5b..00000000
--- a/src/board/UBLibraryTreeWidget.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * UBLibraryTreeWidget.h
- *
- *  Created on: 28 juil. 2009
- *      Author: Luc
- */
-
-#ifndef UBLIBRARYTREEWIDGET_H_
-#define UBLIBRARYTREEWIDGET_H_
-
-#include <QtGui>
-
-class UBLibraryFolderItem;
-
-class UBLibraryTreeWidget : public QTreeWidget
-{
-    Q_OBJECT;
-
-    public:
-        UBLibraryTreeWidget(QWidget * parent = 0);
-        virtual ~UBLibraryTreeWidget();
-
-        void setMimeTypes(const QStringList& pMimeTypes)
-        {
-            mMimeTypes = pMimeTypes;
-        }
-
-        void setFileExtensions(const QStringList& pFileExtensions)
-        {
-            mFileExtensions = pFileExtensions;
-        }
-
-        void setProtocoles(const QStringList& pProtocoles)
-        {
-            mProtocoles = pProtocoles;
-        }
-
-        bool supportMimeData(const QMimeData* pMimeData);
-
-    signals:
-        void contentChanged();
-
-    protected:
-
-        virtual void dragEnterEvent(QDragEnterEvent * event);
-        virtual void dragMoveEvent(QDragMoveEvent * event);
-        virtual void dropEvent(QDropEvent * event);
-
-    private slots:
-        void downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData);
-
-    private:
-
-       UBLibraryFolderItem* mDropFolderItem;
-
-       QStringList mMimeTypes;
-       QStringList mFileExtensions;
-       QStringList mProtocoles;
-
-};
-
-#endif /* UBLIBRARYTREEWIDGET_H_ */
diff --git a/src/board/board.pri b/src/board/board.pri
index 422490b3..bf934a62 100644
--- a/src/board/board.pri
+++ b/src/board/board.pri
@@ -3,14 +3,12 @@ HEADERS      += src/board/UBBoardController.h \
                 src/board/UBBoardPaletteManager.h \
                 src/board/UBBoardView.h \
                 src/board/UBLibraryController.h \
-                src/board/UBLibraryTreeWidget.h \
                 src/board/UBDrawingController.h
 
 SOURCES      += src/board/UBBoardController.cpp \
                 src/board/UBBoardPaletteManager.cpp \
                 src/board/UBBoardView.cpp \
                 src/board/UBLibraryController.cpp \
-                src/board/UBLibraryTreeWidget.cpp \
                 src/board/UBDrawingController.cpp
 
     
diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp
index b3e8582d..87fc38b9 100644
--- a/src/core/UBApplication.cpp
+++ b/src/core/UBApplication.cpp
@@ -140,8 +140,6 @@ UBApplication::UBApplication(const QString &id, int &argc, char **argv)
     }
     else
     {
-        // Make sure we don't mix English language with unsupported language dates
-        //QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
         localString = "en_US";
     }
 
@@ -182,6 +180,10 @@ UBApplication::~UBApplication()
 
 //    delete staticMemoryCleaner;
     staticMemoryCleaner = 0;
+
+
+    delete mUniboardSankoreTransition;
+    mUniboardSankoreTransition = 0;
 }
 
 int UBApplication::exec(const QString& pFileToImport)
@@ -231,7 +233,7 @@ int UBApplication::exec(const QString& pFileToImport)
 #else
     connect(mainWindow->actionHideApplication, SIGNAL(triggered()), this, SLOT(showMinimized()));
 #endif
-    
+
     mPreferencesController = new UBPreferencesController(mainWindow);
 
     connect(mainWindow->actionPreferences, SIGNAL(triggered()), mPreferencesController, SLOT(show()));
@@ -256,9 +258,6 @@ int UBApplication::exec(const QString& pFileToImport)
 //    installEventFilter(new UBIdleTimer(this));
 //#endif
 
-    // TODO UB 4.x make it better and reenable it ... or dump
-    //installEventFilter(new UBMousePressFilter);
-
     applicationController->initScreenLayout();
     boardController->setupLayout();
 
@@ -299,8 +298,6 @@ int UBApplication::exec(const QString& pFileToImport)
         }
     }
 
-    UBLibraryController::preloadFirstOnlineLibrary();
-
     mUniboardSankoreTransition = new UniboardSankoreTransition();
     mUniboardSankoreTransition->documentTransition();
 
@@ -526,30 +523,6 @@ bool UBApplication::handleOpenMessage(const QString& pMessage)
     return true;
 }
 
-
-
-#if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA)
-
-bool UBApplication::macEventFilter(EventHandlerCallRef caller, EventRef event)
-{
-    Q_UNUSED(caller);
-
-    if ((GetEventClass(event) == kEventClassCommand) && (GetEventKind(event) == kEventProcessCommand))
-    {
-        HICommand cmd;
-        GetEventParameter(event, kEventParamDirectObject, typeHICommand, 0, sizeof(cmd), 0, &cmd);
-        if (cmd.commandID == kHICommandHide)
-        {
-            // Override the command + H (Hide Uniboard) behavior
-            applicationController->showDesktop();
-            return true;
-        }
-    }
-    return false;
-}
-#endif
-
-
 void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal,
                           bool enabled, const QString& text, QPalette::ColorRole textRole) const
 {
@@ -577,30 +550,6 @@ void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment,
         painter->setPen(pen);
     }
 
-    /*
-     *
-#if defined(Q_WS_MACX)
-
-    if (pal.brush(textRole).color() == Qt::black)
-    {
-        painter->save();
-        painter->translate(0, 0.1);
-
-        QBrush brush = pal.brush(QPalette::Light);
-        QColor color = brush.color();
-        color.setAlpha(color.alpha() * 0.6);
-        brush.setColor(color);
-
-        painter->setPen(QPen(brush, savedPen.widthF() * 0.8));
-
-        painter->drawText(rect, alignment, text);
-
-        painter->restore();
-    }
-
-#endif
-
-    */
     painter->drawText(rect, alignment, text);
 
     if (textRole != QPalette::NoRole)
diff --git a/src/gui/UBLibPathViewer.cpp b/src/gui/UBLibPathViewer.cpp
index 341f673c..d7302433 100644
--- a/src/gui/UBLibPathViewer.cpp
+++ b/src/gui/UBLibPathViewer.cpp
@@ -172,20 +172,17 @@ void UBLibPathViewer::addItem(UBChainedLibElement *elem)
  */
 void UBLibPathViewer::resizeEvent(QResizeEvent *event)
 {
-    qDebug() << "old" << event->oldSize();
-    qDebug() << "new" << event->size();
-
+ 
     if(event->oldSize() == event->size())
         event->ignore();
     else{
-        if(NULL != mpContainer){
-		    mpContainer->setMinimumWidth(width() - 20);
-	}
-
-	viewport()->resize(width() - 10, viewport()->height());
+        if(NULL != mpContainer)
+            mpContainer->setMinimumWidth(width() - 20);
+        
+        viewport()->resize(width() - 10, viewport()->height());
 
-	updateScrolls();
-	event->accept();
+        updateScrolls();
+        event->accept();
     }
 }
 
@@ -422,8 +419,8 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event)
                 // The drag comes from this application, we have now to get the list of UBLibElements*
                 QList<QString> qlDroppedElems;
 
-				foreach(QUrl url, pMimeData->urls())
-					qlDroppedElems << url.toString();
+                foreach(QUrl url, pMimeData->urls())
+                    qlDroppedElems << url.toString();
 
                 if(!qlDroppedElems.empty())
                 {