diff --git a/kde/src/AkonadiBackend.cpp b/kde/src/AkonadiBackend.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..30f625245ed952cea8e88ece41560ad666aba51e
--- /dev/null
+++ b/kde/src/AkonadiBackend.cpp
@@ -0,0 +1,47 @@
+#include "AkonadiBackend.h"
+#include <QtCore/QTimer>
+#include <akonadi/control.h>
+#include <akonadi/collectionfilterproxymodel.h>
+#include <akonadi/collectionmodel.h>
+#include <akonadi/kmime/messagemodel.h>
+#include <contactgroupsearchjob.h>
+
+AkonadiBackend::AkonadiBackend(QObject* parent) : QObject(parent)
+{
+   QTimer::singleShot( 0, this, SLOT( delayedInit() ) );
+}
+
+virtual AkonadiBackend::~AkonadiBackend()
+{
+   
+}
+
+AkonadiBackend* AkonadiBackend::getInstance()
+{
+   
+}
+
+static bool AkonadiBackend::init() 
+{
+   if ( !Akonadi::Control::start( this ) ) {
+       return false;
+   }
+   return true;
+}
+
+void AkonadiBackend::createModels()
+{
+    Akonadi::CollectionModel *collectionModel = new Akonadi::CollectionModel( this );
+ 
+    Akonadi::CollectionFilterProxyModel *filterModel = new Akonadi::CollectionFilterProxyModel( this );
+    filterModel->setSourceModel( collectionModel );
+    filterModel->addMimeTypeFilter( QLatin1String( "message/rfc822" ) );
+ 
+    Akonadi::ItemModel *itemModel = new Akonadi::MessageModel( this );
+ 
+    ui_detacherview_base.folderView->setModel( filterModel );
+    ui_detacherview_base.messageView->setModel( itemModel );
+ 
+    connect( ui_detacherview_base.folderView, SIGNAL( currentChanged( Akonadi::Collection ) ),
+             itemModel, SLOT( setCollection( Akonadi::Collection ) ) );
+}
\ No newline at end of file
diff --git a/kde/src/AkonadiBackend.h b/kde/src/AkonadiBackend.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8e60f8e0d2b3bd3288734c07e3ccc9f8516ad55
--- /dev/null
+++ b/kde/src/AkonadiBackend.h
@@ -0,0 +1,18 @@
+#ifndef AKONADI_BACKEND_H
+#define AKONADI_BACKEND_H
+
+#include <QObject>
+
+class AkonadiBackend : public QObject {
+public:
+   AkonadiBackend* getInstance();
+private:
+   AkonadiBackend(QObject* parent);
+   virtual ~AkonadiBackend();
+   static bool init();
+   
+   //Attributes
+   AkonadiBackend* instance;
+};
+
+#endif
\ No newline at end of file
diff --git a/kde/src/CMakeLists.txt b/kde/src/CMakeLists.txt
index ce625b59cc14e8c7ff9b82a3fe589f4cc1fb0ab4..3e9db33bb4901c316afd42180ec6f7d94b6f929f 100755
--- a/kde/src/CMakeLists.txt
+++ b/kde/src/CMakeLists.txt
@@ -39,6 +39,9 @@ SET(	sflphone_client_kde_SRCS
 	conf/ConfigAccountList.cpp
 	widgets/Dialpad.cpp
 	widgets/ContactItemWidget.cpp
+	widgets/ContactDock.cpp
+	widgets/HistoryDock.cpp
+	widgets/BookmarkDock.cpp
 	Codec.cpp
 	AccountListModel.cpp
         CallView.cpp
@@ -69,7 +72,7 @@ INSTALL(FILES conf/sflphone-client-kde.kcfg DESTINATION ${KCFG_INSTALL_DIR})
 
 KDE4_ADD_EXECUTABLE(sflphone-client-kde ${sflphone_client_kde_SRCS} ${QtApp_RCC_SRCS})
 
-TARGET_LINK_LIBRARIES(sflphone-client-kde qtsflphone ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KABC_LIBS})
+TARGET_LINK_LIBRARIES(sflphone-client-kde qtsflphone ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDEPIMLIBS_AKONADI_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_AKONADI_CONTACT_LIBS} )
 
 ########### install files ###############
 
diff --git a/kde/src/SFLPhone.cpp b/kde/src/SFLPhone.cpp
index ea64b6c4b9b541d7ae9896144ffd5c19df10d1f1..e024f43340082e665995df1d55586389f98e325f 100755
--- a/kde/src/SFLPhone.cpp
+++ b/kde/src/SFLPhone.cpp
@@ -36,6 +36,7 @@
 #include "lib/instance_interface_singleton.h"
 #include "lib/configurationmanager_interface_singleton.h"
 
+SFLPhone* SFLPhone::m_sApp = NULL;
 
 SFLPhone::SFLPhone(QWidget *parent)
     : KXmlGuiWindow(parent),
@@ -43,8 +44,14 @@ SFLPhone::SFLPhone(QWidget *parent)
       view(new SFLPhoneView(this))
 {
     setupActions();
+    m_sApp = this;
 } 
 
+SFLPhone* SFLPhone::app()
+{
+   return m_sApp;
+}
+
 SFLPhone::~SFLPhone()
 {
 }
@@ -55,13 +62,38 @@ bool SFLPhone::initialize()
     qDebug() << "Already initialized.";
     return false;
   }
-
+   
+   
   ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
   // accept dnd
   setAcceptDrops(true);
 
   // tell the KXmlGuiWindow that this is indeed the main widget
-  setCentralWidget(view);
+  //setCentralWidget(view);
+  m_pCentralDW = new QDockWidget(this);
+  m_pCentralDW->setWidget(view);
+  m_pCentralDW->setWindowTitle("Call");
+  m_pCentralDW->setFeatures(QDockWidget::NoDockWidgetFeatures);
+  m_pCentralDW->setStyleSheet("\
+  QDockWidget::title {\
+     display:none;\
+     margin:0px;\
+     padding:0px;\
+     spacing:0px;\
+     max-height:0px;\
+ }\
+  \
+  ");
+  
+  addDockWidget(Qt::BottomDockWidgetArea,m_pCentralDW);
+
+   m_pContactCD = new ContactDock(this);
+   addDockWidget(Qt::LeftDockWidgetArea,m_pContactCD);
+   
+   m_pHistoryDW  = new HistoryDock(this);
+   addDockWidget(Qt::RightDockWidgetArea,m_pHistoryDW);
+   m_pBookmarkDW = new BookmarkDock(this);
+   addDockWidget(Qt::RightDockWidgetArea,m_pBookmarkDW);
 
   setWindowIcon(QIcon(ICON_SFLPHONE));
   setWindowTitle(i18n("SFLphone"));
@@ -106,7 +138,7 @@ void SFLPhone::setObjectNames()
 void SFLPhone::setupActions()
 {
    qDebug() << "setupActions";
-   ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
+   //ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
    
    action_accept = new KAction(this);
    action_refuse = new KAction(this);
@@ -341,7 +373,7 @@ QList<QAction*> SFLPhone::getCallActions()
 
 void SFLPhone::on_view_incomingCall(const Call * call)
 {
-   ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
+   //ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
     //trayIconSignal();
     /*if(configurationManager.popupMode())
    {
diff --git a/kde/src/SFLPhone.h b/kde/src/SFLPhone.h
index d6215347caf6fecad25ef3d5c210abf8f99c9615..8d7489db2612affd51e6dca34ced4bbfac94d42d 100755
--- a/kde/src/SFLPhone.h
+++ b/kde/src/SFLPhone.h
@@ -32,6 +32,9 @@
 
 #include <KXmlGuiWindow>
 #include <KAction>
+#include "widgets/ContactDock.h"
+#include "widgets/HistoryDock.h"
+#include "widgets/BookmarkDock.h"
 #include <QActionGroup>
 
 // #include "ui_SFLPhoneView_base.h"
@@ -96,7 +99,13 @@ private:
    bool iconChanged;
    SFLPhoneTray *trayIcon;
    KNotification *notification;
-   QLabel * statusBarWidget;
+   QLabel*       statusBarWidget;
+   ContactDock*  m_pContactCD;
+   QDockWidget*  m_pCentralDW;
+   HistoryDock*  m_pHistoryDW;
+   BookmarkDock* m_pBookmarkDW;
+   
+   static SFLPhone* m_sApp;
    
 private:
    void setObjectNames();
@@ -118,6 +127,8 @@ public:
 
    friend class SFLPhoneView;
    
+   static SFLPhone* app();
+   
    
 private slots:
    void on_view_statusMessageChangeAsked(const QString & message);
diff --git a/kde/src/SFLPhoneView.cpp b/kde/src/SFLPhoneView.cpp
index 2b252f6d5285c9d230b1eb42bf3ffbfd7905c7e1..78cdba0bdeb56a78cd413515322ddeaa52cbb146 100755
--- a/kde/src/SFLPhoneView.cpp
+++ b/kde/src/SFLPhoneView.cpp
@@ -105,7 +105,6 @@ SFLPhoneView::SFLPhoneView(QWidget *parent)
       
    stackedWidget_screen->setCurrentWidget(page_callList);
    
-   
    //BEGIN Port to CallModel
    connect(&callManager, SIGNAL(callStateChanged(const QString &, const QString &)),
            this,         SLOT(on1_callStateChanged(const QString &, const QString &)));
@@ -741,13 +740,13 @@ void SFLPhoneView::updateVolumeControls()
    if(QString(configurationManager.getAudioManager()) == "alsa") {
       display = true;
 
-      ((SFLPhone*)parent())->action_displayVolumeControls->setEnabled(true);
+      SFLPhone::app()->action_displayVolumeControls->setEnabled(true);
    }
    else {
-      ((SFLPhone*)parent())->action_displayVolumeControls->setEnabled(false);
+      SFLPhone::app()->action_displayVolumeControls->setEnabled(false);
    }
       
-   ((SFLPhone*)parent())->action_displayVolumeControls->setChecked(display);
+   SFLPhone::app()->action_displayVolumeControls->setChecked(display);
    //widget_recVol->setVisible(display);
    //widget_sndVol->setVisible(display);
    toolButton_recVol->setVisible(display && ConfigurationSkeleton::displayVolume());
@@ -786,9 +785,7 @@ void SFLPhoneView::updateStatusMessage()
 
 void SFLPhoneView::displayVolumeControls(bool checked)
 {
-   ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
-   int display = true;//configurationManager.getVolumeControls();
-   //configurationManager.setVolumeControls(!display);
+   //ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance();
    ConfigurationSkeleton::setDisplayVolume(checked);
    updateVolumeControls();
 }
@@ -974,7 +971,7 @@ void SFLPhoneView::contextMenuEvent(QContextMenuEvent *event)
       menu.addAction(action_edit);
    }
    
-   SFLPhone * window = (SFLPhone * ) this->parent();
+   SFLPhone * window = SFLPhone::app();
    QList<QAction *> callActions = window->getCallActions();
    menu.addAction(callActions.at((int) SFLPhone::Accept));
    menu.addAction(callActions[SFLPhone::Refuse]);
@@ -1226,9 +1223,9 @@ void SFLPhoneView::on1_incomingCall(const QString & /*accountID*/, const QString
    //NEED_PORT
    changeScreen(SCREEN_MAIN);
 
-   ((SFLPhone*)parent())->activateWindow();
-   ((SFLPhone*)parent())->raise();
-   ((SFLPhone*)parent())->setVisible(true);
+   SFLPhone::app()->activateWindow();
+   SFLPhone::app()->raise();
+   SFLPhone::app()->setVisible(true);
 
    emit incomingCall(call);
 }
diff --git a/kde/src/SFLPhoneView.h b/kde/src/SFLPhoneView.h
index 2bf53433e1aa774eca83572979ec7590a9f54f9a..fb4ee97c62b8d495ba83fcf5cc1031929b273bb9 100755
--- a/kde/src/SFLPhoneView.h
+++ b/kde/src/SFLPhoneView.h
@@ -230,6 +230,7 @@ private slots:
    void updateVolumeBar();
    void updateVolumeControls();
    void updateDialpad();
+   
 
 public slots:
    /**
diff --git a/kde/src/lib/CMakeLists.txt b/kde/src/lib/CMakeLists.txt
index d8545ef480d23dec37afc2cd602fa8933afa8b91..566789a0bdad40a76059c9420d05cae130a16f6a 100644
--- a/kde/src/lib/CMakeLists.txt
+++ b/kde/src/lib/CMakeLists.txt
@@ -19,7 +19,7 @@ INCLUDE ( KDE4Defaults )
 
 set(GENERIC_LIB_VERSION "0.9.8")
 
-INCLUDE_DIRECTORIES ( ${KDE4_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
+INCLUDE_DIRECTORIES ( ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
 
 
 
diff --git a/kde/src/ui/SFLPhoneView_base.ui b/kde/src/ui/SFLPhoneView_base.ui
index 751dc5674fb5546c0d67b53faee67f39f0300ecd..6791b8a89fccf9f9f0925cedf32b876703c2fb74 100755
--- a/kde/src/ui/SFLPhoneView_base.ui
+++ b/kde/src/ui/SFLPhoneView_base.ui
@@ -23,7 +23,7 @@
       </sizepolicy>
      </property>
      <property name="currentIndex">
-      <number>1</number>
+      <number>2</number>
      </property>
      <widget class="QWidget" name="page_callList">
       <property name="sizePolicy">
diff --git a/kde/src/widgets/ContactDock.cpp b/kde/src/widgets/ContactDock.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..74d7f8cb6fe181b06ad3eb93c09afb00681b8abe
--- /dev/null
+++ b/kde/src/widgets/ContactDock.cpp
@@ -0,0 +1,178 @@
+#include "ContactDock.h"
+
+#include <QtGui/QVBoxLayout>
+
+#include <akonadi/collectionfilterproxymodel.h>
+#include <akonadi/contact/contactstreemodel.h>
+#include <akonadi/kmime/messagemodel.h>
+#include <akonadi/changerecorder.h>
+#include <akonadi/session.h>
+#include <kabc/addressee.h>
+#include <kabc/picture.h>
+#include <kabc/phonenumber.h>
+#include <kabc/vcard.h>
+#include <kabc/addressee.h>
+#include <kabc/field.h>
+#include <kabc/vcardline.h>
+#include <kabc/contactgroup.h>
+#include <akonadi/itemfetchscope.h>
+#include <akonadi/entitydisplayattribute.h>
+#include <akonadi/recursiveitemfetchjob.h>
+#include <kicon.h>
+
+ContactDock::ContactDock(QWidget* parent) : QDockWidget(parent)
+{
+   m_pCollViewCV = new Akonadi::EntityTreeView();
+   m_pItemView   = new Akonadi::ItemView();
+   m_pFilterLE   = new KLineEdit();
+   m_pCollCCB    = new Akonadi::CollectionComboBox;
+   m_pSplitter   = new QSplitter(Qt::Vertical,this);
+
+   QWidget* mainWidget = new QWidget(this);
+   setWidget(mainWidget);
+
+   QVBoxLayout* mainLayout = new QVBoxLayout(mainWidget);
+
+   mainLayout->addWidget(m_pCollCCB);
+   mainLayout->addWidget(m_pSplitter);
+   m_pSplitter->addWidget(m_pCollViewCV);
+   m_pSplitter->addWidget(m_pItemView);
+   mainLayout->addWidget(m_pFilterLE);
+   
+   m_pSplitter->setChildrenCollapsible(true);
+   m_pSplitter->setStretchFactor(0,7);
+   
+   m_pCollCCB->setMimeTypeFilter( QStringList() << KABC::Addressee::mimeType() );
+   m_pCollCCB->setAccessRightsFilter( Akonadi::Collection::ReadOnly );
+
+
+      /////////////
+
+      // use a separated session for this model
+   Akonadi::Session *session = new Akonadi::Session( "SFLPhone::instance" );
+
+   Akonadi::ItemFetchScope scope;
+   // fetch all content of the contacts, including images
+   scope.fetchFullPayload( true );
+   // fetch the EntityDisplayAttribute, which contains custom names and icons
+   scope.fetchAttribute<Akonadi::EntityDisplayAttribute>();
+
+   Akonadi::ChangeRecorder *changeRecorder = new Akonadi::ChangeRecorder;
+   changeRecorder->setSession( session );
+   // include fetching the collection tree
+   changeRecorder->fetchCollection( true );
+   // set the fetch scope that shall be used
+   changeRecorder->setItemFetchScope( scope );
+   // monitor all collections below the root collection for changes
+   changeRecorder->setCollectionMonitored( Akonadi::Collection::root() );
+   // list only contacts and contact groups
+   changeRecorder->setMimeTypeMonitored( KABC::Addressee::mimeType(), true );
+   changeRecorder->setMimeTypeMonitored( KABC::ContactGroup::mimeType(), true );
+
+   Akonadi::ContactsTreeModel *model = new Akonadi::ContactsTreeModel( changeRecorder );
+
+   Akonadi::ContactsTreeModel::Columns columns;
+   columns << Akonadi::ContactsTreeModel::FullName;
+   columns << Akonadi::ContactsTreeModel::AllEmails;
+   model->setColumns( columns );
+
+   //////////////
+
+   for (int i=0;i<model->rowCount();i++) {
+       qDebug() << "\n\n\nChild:" << model->hasChildren(model->index(i,0)) << "Model:" << model->rowCount(model->index(i,0));
+   }
+   qDebug() << "\n\n\nChild:" << model->hasChildren(model->index(0,0)) << "Model:" << model->rowCount(model->index(0,0));
+   qDebug() << "\n\n\nChild:" << model->hasChildren(model->index(1,0)) << "Model:" << model->rowCount(model->index(1,0));
+
+      //qDebug() << "Model:" << *model;
+
+      m_pCollViewCV->setModel( model );
+      m_pItemView->setModel( model );
+      
+      connect (m_pCollCCB, SIGNAL(currentChanged(Akonadi::Collection)),this,SLOT(collectAddressBookContacts()));
+      
+      
+   //collectAllContacts(model);
+   collectAddressBookContacts();
+   
+   setWindowTitle("Contact");
+   //setDockIcon(KIcon("resource-group"));
+}
+
+ContactDock::~ContactDock()
+{
+   
+}
+
+KABC::Addressee::List ContactDock::collectAllContacts(Akonadi::ContactsTreeModel *mModel) const
+{
+  KABC::Addressee::List contacts;
+  for ( int i = 0; i < mModel->rowCount(); ++i ) {
+    const QModelIndex index = mModel->index( i, 0 );
+    if ( index.isValid() ) {
+      const Akonadi::Item item = index.data( Akonadi::EntityTreeModel::ItemRole ).value<Akonadi::Item>();
+      if ( item.isValid() && item.hasPayload<KABC::Addressee>() ) {
+        contacts.append( item.payload<KABC::Addressee>() );
+	qDebug() << item.payload<KABC::Addressee>().toString();
+      }
+    }
+  }
+  return contacts;
+}
+
+KABC::Addressee::List ContactDock::collectAddressBookContacts() const
+{
+   
+   qDebug() << "In colect\n\n\n\n\n";
+  KABC::Addressee::List contacts;
+
+  
+  const Akonadi::Collection collection = m_pCollCCB->currentCollection();
+  if ( !collection.isValid() ) {
+     qDebug() << "The current collection is not valid";
+    return contacts;
+  }
+  qDebug() << "Valid collection";
+
+  //if ( mAddressBookSelectionRecursive->isChecked() ) {
+    Akonadi::RecursiveItemFetchJob *job = new Akonadi::RecursiveItemFetchJob( collection, QStringList() << KABC::Addressee::mimeType() << KABC::ContactGroup::mimeType());
+    job->fetchScope().fetchFullPayload();
+//qDebug() << "Begin \n\n\n";
+    if ( job->exec() ) {
+       
+      const Akonadi::Item::List items = job->items();
+
+      foreach ( const Akonadi::Item &item, items ) {
+	 //qDebug() << "In for" << item.payloadData() << item.mimeType();
+        if ( item.hasPayload<KABC::ContactGroup>() ) {
+          //contacts.append( item.payload<KABC::ContactGroup>() );
+	  qDebug() << "Group:" << item.payload<KABC::ContactGroup>().name();
+        }
+        if ( item.hasPayload<KABC::Addressee>() ) {
+          //contacts.append( item.payload<KABC::ContactGroup>() );
+	  qDebug() << "Addressee:" << item.payload<KABC::Addressee>().name();
+        }
+//         if ( item.hasPayload<KABC::Field>() ) {
+//           //contacts.append( item.payload<KABC::VCard>() );
+// 	  qDebug() << "VCard:" << item.payload<KABC::VCardFormat>().identifiers();
+//         }
+      }
+    }
+//   } else {
+//     Akonadi::ItemFetchJob *job = new Akonadi::ItemFetchJob( collection );
+//     job->fetchScope().fetchFullPayload();
+// 
+//     if ( job->exec() ) {
+//       const Akonadi::Item::List items = job->items();
+// 
+//       foreach ( const Akonadi::Item &item, items ) {
+//         if ( item.hasPayload<KABC::Addressee>() ) {
+//           contacts.append( item.payload<KABC::Addressee>() );
+//         }
+//       }
+//     }
+//   }
+
+  qDebug() << "End collect \n\n\n";
+  return contacts;
+}
diff --git a/kde/src/widgets/ContactDock.h b/kde/src/widgets/ContactDock.h
new file mode 100644
index 0000000000000000000000000000000000000000..249b9dac01b23461ffa7f9e97ee3b24685872d2d
--- /dev/null
+++ b/kde/src/widgets/ContactDock.h
@@ -0,0 +1,33 @@
+#ifndef CONTACT_DOCK_H
+#define CONTACT_DOCK_H
+
+#include <QtGui/QDockWidget>
+#include <QSplitter>
+
+#include <akonadi/entitytreeview.h>
+#include <akonadi/itemview.h>
+//#include <akonadi/contactgroupviewer.h>
+#include <klineedit.h>
+#include <kabc/addressee.h>
+#include <akonadi/contact/contactstreemodel.h>
+#include <akonadi/collectioncombobox.h>
+
+
+class ContactDock : public QDockWidget {
+   Q_OBJECT
+public:
+   ContactDock(QWidget* parent);
+   virtual ~ContactDock();
+private:
+   KABC::Addressee::List collectAllContacts(Akonadi::ContactsTreeModel *mModel) const;
+   Akonadi::EntityTreeView* m_pCollViewCV;
+   Akonadi::ItemView*       m_pItemView;
+   KLineEdit*               m_pFilterLE;
+   Akonadi::CollectionComboBox* m_pCollCCB;
+   QSplitter* m_pSplitter;
+
+public slots:
+   KABC::Addressee::List collectAddressBookContacts() const;
+};
+
+#endif
\ No newline at end of file
diff --git a/kde/src/widgets/HistoryDock.cpp b/kde/src/widgets/HistoryDock.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b5acc8f8cda1ebcb838c3af6a26a972ce7ff3a31
--- /dev/null
+++ b/kde/src/widgets/HistoryDock.cpp
@@ -0,0 +1,37 @@
+#include "HistoryDock.h"
+
+#include <QtGui/QVBoxLayout>
+#include <kicon.h>
+#include <klineedit.h>
+#include <QtGui/QTreeWidget>
+#include <QtGui/QComboBox>
+#include <QtGui/QLabel>
+
+
+HistoryDock::HistoryDock(QWidget* parent) : QDockWidget(parent)
+{
+   m_pFilterLE   = new KLineEdit();
+   m_pItemView   = new QTreeWidget(this);
+   m_pSortByCBB  = new QComboBox();
+   m_pSortByL    = new QLabel();
+   
+   m_pSortByL->setText("Sort by:");
+   m_pSortByCBB->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
+
+   QWidget* mainWidget = new QWidget(this);
+   setWidget(mainWidget);
+
+   QGridLayout* mainLayout = new QGridLayout(mainWidget);
+
+   mainLayout->addWidget(m_pSortByL   ,0,0     );
+   mainLayout->addWidget(m_pSortByCBB ,0,1     );
+   mainLayout->addWidget(m_pItemView  ,1,0,1,2 );
+   mainLayout->addWidget(m_pFilterLE  ,2,0,1,2 );
+   
+   setWindowTitle("History");
+}
+
+HistoryDock::~HistoryDock()
+{
+   
+}
diff --git a/kde/src/widgets/HistoryDock.h b/kde/src/widgets/HistoryDock.h
new file mode 100644
index 0000000000000000000000000000000000000000..91dcf683297b4907ace60b3704eecbf39a40fa44
--- /dev/null
+++ b/kde/src/widgets/HistoryDock.h
@@ -0,0 +1,23 @@
+#ifndef HISTORY_DOCK_H
+#define HISTORY_DOCK_H
+
+#include <QtGui/QDockWidget>
+
+class QTreeWidget;
+class KLineEdit;
+class QComboBox;
+class QLabel;
+
+class HistoryDock : public QDockWidget {
+   Q_OBJECT
+public:
+   HistoryDock(QWidget* parent);
+   virtual ~HistoryDock();
+private:
+   QTreeWidget*  m_pItemView;
+   KLineEdit*    m_pFilterLE;
+   QComboBox*    m_pSortByCBB;
+   QLabel*       m_pSortByL;
+};
+
+#endif
\ No newline at end of file