diff --git a/kde/plasma/dataengine/CMakeLists.txt b/kde/plasma/dataengine/CMakeLists.txt
index 867b10900d910300e50955897785df5fb46c5f9a..5dacb41fed29a63ed0ce3c54eb576fac844b10ea 100644
--- a/kde/plasma/dataengine/CMakeLists.txt
+++ b/kde/plasma/dataengine/CMakeLists.txt
@@ -13,12 +13,14 @@ include_directories(
 
 set(sflphone_engine_SRCS
      sflphonEngine.cpp
+     sflphoneService.cpp
     )
 
 
 kde4_add_plugin(plasma_engine_sflphone ${sflphone_engine_SRCS})
 target_link_libraries(plasma_engine_sflphone
                       qtsflphone
+                      ksflphone
                       ${KDE4_KDECORE_LIBS}
                       ${KDE4_PLASMA_LIBS})
 
@@ -28,4 +30,7 @@ install(TARGETS plasma_engine_sflphone
 install(FILES plasma-engine-sflphone.desktop
         DESTINATION ${SERVICES_INSTALL_DIR})
 
+install(FILES sflphone.operations
+        DESTINATION ${DATA_INSTALL_DIR}/plasma/services)
+
 #TARGET_LINK_LIBRARIES(sflphone-client-kde sflphonekde ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KABC_LIBS})
diff --git a/kde/plasma/dataengine/sflphonEngine.cpp b/kde/plasma/dataengine/sflphonEngine.cpp
index 4c7c51c90c4d4a4ccb464cece20ccbc1963e76f8..a335f0fb6ed39e201f3a873bd1711d4b608c4b02 100644
--- a/kde/plasma/dataengine/sflphonEngine.cpp
+++ b/kde/plasma/dataengine/sflphonEngine.cpp
@@ -3,19 +3,26 @@
 #include <Plasma/DataContainer>
 
 #include "../../src/lib/Call.h"
+#include "../../src/lib/Account.h"
+#include "../../src/lib/AccountList.h"
 #include "../../src/lib/dbus/metatypes.h"
 #include "../../src/lib/instance_interface_singleton.h"
 #include "../../src/lib/configurationmanager_interface_singleton.h"
 #include "../../src/lib/callmanager_interface_singleton.h"
 #include "../../src/lib/sflphone_const.h"
+#include "sflphoneService.h"
+
+CallModel<>* SFLPhoneEngine::m_pModel = NULL;
 
 SFLPhoneEngine::SFLPhoneEngine(QObject* parent, const QVariantList& args)
     : Plasma::DataEngine(parent, args)
 {
    Q_UNUSED(args)
-   m_pModel = new CallModelConvenience(CallModelConvenience::ActiveCall);
-   m_pModel->initCall();
-   m_pModel->initHistory();
+   if (not m_pModel) {
+      m_pModel = new CallModel<>(CallModel<>::ActiveCall);
+      m_pModel->initCall();
+      m_pModel->initHistory();
+   }
 
    CallManagerInterface& callManager = CallManagerInterfaceSingleton::getInstance();
 
@@ -39,6 +46,9 @@ bool SFLPhoneEngine::sourceRequestEvent(const QString &name)
    else if ( name == "info"        ) {
       updateInfo();
    }
+   else if ( name == "accounts"    ) {
+      updateAccounts();
+   }
    return true;//updateSourceEvent(name);
 }
 
@@ -50,10 +60,21 @@ bool SFLPhoneEngine::updateSourceEvent(const QString &name)
 
 QStringList SFLPhoneEngine::sources() const {
    QStringList toReturn;
-   toReturn << "calls" << "history" << "conferences" << "info";
+   toReturn << "calls" << "history" << "conferences" << "info" << "accounts";
    return toReturn;
 }
 
+Plasma::Service* SFLPhoneEngine::serviceForSource(const QString &source)
+{
+    /*if (source != "calls") {
+        return 0;
+    }*/
+
+    SFLPhoneService *service = new SFLPhoneService(this);
+    service->setParent(this);
+    return service;
+}
+
 QString SFLPhoneEngine::getCallStateName(call_state state)
 {
    if (state == CALL_STATE_INCOMING) {
@@ -118,13 +139,22 @@ void SFLPhoneEngine::updateConferenceList()
 
 void SFLPhoneEngine::updateContacts()
 {
-
+   
 }
 
 void SFLPhoneEngine::updateInfo()
 {
    qDebug() << "Currentaccount: " << m_pModel->getCurrentAccountId();
-   setData("info", I18N_NOOP("Account"), m_pModel->getCurrentAccountId());
+   setData("info", I18N_NOOP("Current_account"), m_pModel->getCurrentAccountId());
+}
+
+void SFLPhoneEngine::updateAccounts()
+{
+   const QVector<Account*>& list = m_pModel->getAccountList()->getAccounts();
+   foreach(Account* a,list) {
+      qDebug() << "Account: " << a->getAccountId();
+      setData("accounts", a->getAccountDetail(ACCOUNT_ALIAS), a->getAccountId());
+   }
 }
 
 void SFLPhoneEngine::callStateChangedSignal(Call* call)
@@ -170,4 +200,9 @@ void SFLPhoneEngine::accountChanged()
 
 }
 
+CallModel<>* SFLPhoneEngine::getModel()
+{
+   return m_pModel;
+}
+
 K_EXPORT_PLASMA_DATAENGINE(sflphone, SFLPhoneEngine)
diff --git a/kde/plasma/dataengine/sflphonEngine.h b/kde/plasma/dataengine/sflphonEngine.h
index 9a234f254094761e2d0e6db71e2968f05999f0da..cc3e764324c7399a30f9ae4eb53282358eb19907 100644
--- a/kde/plasma/dataengine/sflphonEngine.h
+++ b/kde/plasma/dataengine/sflphonEngine.h
@@ -22,6 +22,7 @@
 #define SFLPHONEENGINE_H
 
 #include <Plasma/DataEngine>
+#include <Plasma/Service>
 #include <QHash>
 
 #include "../../src/lib/CallModel.h"
@@ -35,8 +36,13 @@ class SFLPhoneEngine : public Plasma::DataEngine
 
    public:
       SFLPhoneEngine(QObject* parent, const QVariantList& args);
+      Plasma::Service *serviceForSource(const QString &source);
       virtual QStringList sources() const;
 
+      static CallModel<>* getModel();
+      
+      friend class SFLPhoneService;
+
    protected:
       bool sourceRequestEvent(const QString& name);
       bool updateSourceEvent(const QString& source);
@@ -45,11 +51,12 @@ class SFLPhoneEngine : public Plasma::DataEngine
       QHash<QString, HashStringString > historyCall  ;
       QHash<QString, HashStringString > currentCall  ;
       QHash<QString, QStringList> currentConferences ;
-      CallModelConvenience* m_pModel;
+      static CallModel<>* m_pModel;
       QString getCallStateName(call_state state);
       void updateHistory        ();
       void updateCallList       ();
       void updateContacts       ();
+      void updateAccounts       ();
       void updateConferenceList ();
       void updateInfo();
    private slots:
diff --git a/kde/plasma/dataengine/sflphone.operations b/kde/plasma/dataengine/sflphone.operations
new file mode 100644
index 0000000000000000000000000000000000000000..f80ca1c77835731302c6ce6301126f2d1f5b45eb
--- /dev/null
+++ b/kde/plasma/dataengine/sflphone.operations
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE kcfg SYSTEM
+    "http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
+<kcfg>
+  <group name="Call">
+    <entry name="AccountId" type="String">
+      <label>Account id to make this call</label>
+    </entry>
+    <entry name="Number" type="String">
+      <label>Number to call</label>
+    </entry>
+  </group>
+</kcfg>
diff --git a/kde/plasma/dataengine/sflphoneService.cpp b/kde/plasma/dataengine/sflphoneService.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6e3e1d3a15983f4c9a3c0c579007796aded224cb
--- /dev/null
+++ b/kde/plasma/dataengine/sflphoneService.cpp
@@ -0,0 +1,24 @@
+#include "sflphoneService.h"
+
+#include "../../src/lib/Call.h"
+
+SFLPhoneService::SFLPhoneService(SFLPhoneEngine *engine)
+
+{
+    m_engine = engine;
+    setName("sflphone");
+}
+
+ServiceJob *SFLPhoneService::createJob(const QString &operation, QMap<QString, QVariant> &parameters)
+{
+    if (!m_engine) {
+        return 0;
+    }
+
+    if (operation == "Call") {
+       return new CallJob(this, operation,parameters);
+    }
+    qDebug() << "\n\n\nIN SERVICE" << parameters["query"];
+    m_engine->setData(operation, parameters["query"]);
+    return 0;
+}
\ No newline at end of file
diff --git a/kde/plasma/dataengine/sflphoneService.h b/kde/plasma/dataengine/sflphoneService.h
new file mode 100644
index 0000000000000000000000000000000000000000..11b87d1bb0372a7674ac447545d7167e531e2282
--- /dev/null
+++ b/kde/plasma/dataengine/sflphoneService.h
@@ -0,0 +1,51 @@
+#ifndef SFLPHONE_SERVICE_H
+#define SFLPHONE_SERVICE_H
+
+#include "sflphonEngine.h"
+
+#include <Plasma/Service>
+#include <Plasma/ServiceJob>
+
+#include "../../src/lib/Call.h"
+#include "../../src/lib/CallModel.h"
+
+using namespace Plasma;
+
+class SFLPhoneService : public Plasma::Service
+{
+    Q_OBJECT
+
+public:
+    SFLPhoneService(SFLPhoneEngine *engine);
+    ServiceJob *createJob(const QString &operation,
+                          QMap<QString, QVariant> &parameters);
+
+private:
+    SFLPhoneEngine *m_engine;
+
+};
+
+class CallJob : public Plasma::ServiceJob
+{
+   Q_OBJECT
+public:
+    CallJob(QObject* parent, const QString& operation, const QVariantMap& parameters = QVariantMap())
+        : Plasma::ServiceJob("", operation, parameters, parent)
+        , m_AccountId ( parameters["AccountId"].toString() )
+        , m_Number    ( parameters["Number"].toString()    )
+    {}
+
+    void start()
+    {
+      qDebug() << "TRYING TO CALL USING" << m_AccountId << m_Number;
+//       Call* call = SFLPhoneEngine::getModel()->addDialingCall("112",m_AccountId);
+//       call->setCallNumber(m_Number);
+//       call->actionPerformed(CALL_ACTION_ACCEPT);
+    }
+
+private:
+    QString m_AccountId;
+    QString m_Number;
+};
+
+#endif //SFLPHONE_SERVICE_H
diff --git a/kde/plasma/plasmoid/SFLPhonePlasmoid.cpp b/kde/plasma/plasmoid/SFLPhonePlasmoid.cpp
index 293df0fa9ab29501536eb13062dbb9a25388d780..8f5a5b6fc5bd9ebc25ee94f1ef7b54a01309e2f0 100644
--- a/kde/plasma/plasmoid/SFLPhonePlasmoid.cpp
+++ b/kde/plasma/plasmoid/SFLPhonePlasmoid.cpp
@@ -13,7 +13,7 @@ SFLPhonePlasmoid::SFLPhonePlasmoid(QObject* parent, const QVariantList& args)
    //m_svg.setImagePath("widgets/background");
    setBackgroundHints(DefaultBackground);
 
-   CallModelConvenience::init();
+   CallModel<>::init();
 
    setMinimumSize(24,24);
 }
diff --git a/kde/src/CMakeLists.txt b/kde/src/CMakeLists.txt
index 41338d80f92adf0b2a415e8c1ae3ef0e8a4fe6d8..3501aa3825b1ccf111176f462f758a893ec94a09 100755
--- a/kde/src/CMakeLists.txt
+++ b/kde/src/CMakeLists.txt
@@ -1,28 +1,30 @@
 
 ADD_DEFINITIONS(
-	${KDE4_DEFINITIONS}
-	${QT_DEFINITIONS}
-	-fexceptions
-	-DDATA_INSTALL_DIR="\\\"${DATA_INSTALL_DIR}\\\""
-	-DSHARE_INSTALL_PREFIX="\\\"${SHARE_INSTALL_PREFIX}\\\""
+   ${KDE4_DEFINITIONS}
+   ${QT_DEFINITIONS}
+   -fexceptions
+   -DDATA_INSTALL_DIR="\\\"${DATA_INSTALL_DIR}\\\""
+   -DSHARE_INSTALL_PREFIX="\\\"${SHARE_INSTALL_PREFIX}\\\""
 )
 
 ADD_DEFINITIONS("-std=c++0x")
 
-add_subdirectory(lib)
+add_subdirectory( lib  )
+add_subdirectory( klib )
 
 find_package(Phonon)
 
 MESSAGE("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
 
 IF(${CMAKE_BUILD_TYPE} MATCHES Release)
-	MESSAGE("NO DEBUG OUTPUT")
-	ADD_DEFINITIONS( -DQT_NO_DEBUG_OUTPUT)
+   MESSAGE("NO DEBUG OUTPUT")
+   ADD_DEFINITIONS( -DQT_NO_DEBUG_OUTPUT)
 ENDIF(${CMAKE_BUILD_TYPE} MATCHES Release)
 
 SET ( KDE4_KABC_LIBS  -lkabc )
 
-SET(	sflphone_client_kde_SRCS
+SET(
+   sflphone_client_kde_SRCS
    SFLPhoneView.cpp
    SFLPhone.cpp
    SFLPhoneapplication.cpp
@@ -53,7 +55,6 @@ SET(	sflphone_client_kde_SRCS
    widgets/SortableDockCommon.cpp
    Codec.cpp
    AccountListModel.cpp
-   AkonadiBackend.cpp
    CallView.cpp
    AccountView.cpp
 )
@@ -66,13 +67,14 @@ QT4_ADD_RESOURCES(QtApp_RCC_SRCS ${QtApp_RCCS})
 
 
 # kde4_automoc(${sflphone_client_kde_SRCS})
-SET(    config_ui_files
-	conf/dlggeneralbase.ui
-	conf/dlgdisplaybase.ui
-	conf/dlgaccountsbase.ui
-	conf/dlgaudiobase.ui
-	conf/dlgaddressbookbase.ui
-	conf/dlghooksbase.ui
+SET(
+   config_ui_files
+   conf/dlggeneralbase.ui
+   conf/dlgdisplaybase.ui
+   conf/dlgaccountsbase.ui
+   conf/dlgaudiobase.ui
+   conf/dlgaddressbookbase.ui
+   conf/dlghooksbase.ui
 )
 
 KDE4_ADD_UI_FILES(sflphone_client_kde_SRCS ui/SFLPhoneView_base.ui  ${config_ui_files}  )
@@ -82,11 +84,11 @@ 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} ${KDEPIMLIBS_AKONADI_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_AKONADI_CONTACT_LIBS} ${KDE4_PHONON_LIBS} )
+TARGET_LINK_LIBRARIES(sflphone-client-kde ksflphone qtsflphone  ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDEPIMLIBS_AKONADI_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_AKONADI_CONTACT_LIBS} ${KDE4_PHONON_LIBS} )
 
 ########### install files ###############
 
-INSTALL(TARGETS sflphone-client-kde DESTINATION ${BIN_INSTALL_DIR})
+INSTALL(TARGETS sflphone-client-kde      DESTINATION  ${BIN_INSTALL_DIR}                      )
 INSTALL( FILES icons/transferarraw.png   DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde )
 INSTALL( FILES icons/transfertarrow.svg  DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde )
 INSTALL( FILES icons/confBlackWhite.svg  DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde )
diff --git a/kde/src/CallView.cpp b/kde/src/CallView.cpp
index d44d330229b66f36026c5243e0e7bcab8fab389e..de0b5dfc42fbb365419ee88b70d7e9347135d8e3 100644
--- a/kde/src/CallView.cpp
+++ b/kde/src/CallView.cpp
@@ -44,7 +44,7 @@
 #include "widgets/CallTreeItem.h"
 #include "SFLPhone.h"
 #include "SFLPhoneView.h"
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 
 
 ///Retrieve current and older calls from the daemon, fill history and the calls TreeView and enable drag n' drop
diff --git a/kde/src/SFLPhone.cpp b/kde/src/SFLPhone.cpp
index c2a60787f5a3b56bf7cd5b8c9b32307cc8f5876b..24c246b725d46eedc07c1b977dd01d757bebe4e5 100755
--- a/kde/src/SFLPhone.cpp
+++ b/kde/src/SFLPhone.cpp
@@ -47,7 +47,7 @@
 #include "lib/Contact.h"
 
 //SFLPhone
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "AccountWizard.h"
 #include "SFLPhoneView.h"
 #include "widgets/SFLPhoneTray.h"
diff --git a/kde/src/AkonadiBackend.cpp b/kde/src/klib/AkonadiBackend.cpp
similarity index 92%
rename from kde/src/AkonadiBackend.cpp
rename to kde/src/klib/AkonadiBackend.cpp
index 52f698723e537b301de783eab8900f7a988f81d2..04700f27e486c4e598f77426608039d19a5d977c 100644
--- a/kde/src/AkonadiBackend.cpp
+++ b/kde/src/klib/AkonadiBackend.cpp
@@ -43,16 +43,17 @@
 #include <kabc/phonenumber.h>
 
 //SFLPhone library
-#include "lib/Contact.h"
-#include "lib/AccountList.h"
-#include "lib/Account.h"
+#include "../lib/Contact.h"
+#include "../lib/AccountList.h"
+#include "../lib/Account.h"
 
 //SFLPhone
-#include "SFLPhone.h"
-#include "SFLPhoneView.h"
+//#include "SFLPhone.h"
+//#include "SFLPhoneView.h"
 
 ///Init static attributes
 AkonadiBackend*  AkonadiBackend::m_pInstance = 0;
+CallModel<>*     AkonadiBackend::m_pModel = 0;
 
 ///Constructor
 AkonadiBackend::AkonadiBackend(QObject* parent) : ContactBackend(parent)
@@ -60,6 +61,12 @@ AkonadiBackend::AkonadiBackend(QObject* parent) : ContactBackend(parent)
    //QTimer::singleShot( 0, this, SLOT( delayedInit() ) );
    m_pSession = new Akonadi::Session( "SFLPhone::instance" );
 
+   if ( not m_pModel ) {
+      m_pModel = new CallModel<>(CallModel<>::ActiveCall);
+      m_pModel->initCall();
+      m_pModel->initHistory();
+   }
+
    // fetching all collections containing emails recursively, starting at the root collection
    Akonadi::CollectionFetchJob *job = new Akonadi::CollectionFetchJob( Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive, this );
    job->fetchScope().setContentMimeTypes( QStringList() << "text/directory" );
@@ -95,7 +102,7 @@ Contact* AkonadiBackend::getContactByPhone(const QString& phoneNumber,bool resol
    if (!resolveDNS || phoneNumber.indexOf("@") == -1)
       return m_ContactByPhone[phoneNumber];
    else if (!getHostNameFromPhone(phoneNumber).isEmpty() && m_ContactByPhone[getUserFromPhone(phoneNumber)]) {
-      foreach (Account* a, SFLPhone::model()->getAccountList()->getAccounts()) {
+      foreach (Account* a, m_pModel->getAccountList()->getAccounts()) {
          if (a->getAccountDetail(ACCOUNT_HOSTNAME) == getHostNameFromPhone(phoneNumber))
             return m_ContactByPhone[getUserFromPhone(phoneNumber)];
       }
@@ -173,24 +180,24 @@ ContactList AkonadiBackend::update(Akonadi::Collection collection)
 }
 
 ///Edit backend value using an updated frontend contact
-void AkonadiBackend::editContact(Contact* contact)
+void AkonadiBackend::editContact(Contact* contact,QWidget* parent)
 {
    KABC::Addressee ct = m_AddrHash[contact->getUid()];
    if (ct.uid() != contact->getUid()) {
       kDebug() << "Contact not found";
       return;
    }
-   Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::EditMode, SFLPhone::app()->view() );
+   Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::EditMode, parent );
    Akonadi::Item item;
    item.setPayload<KABC::Addressee>(ct);
    editor->loadContact(item);
-   KDialog* dlg = new KDialog(SFLPhone::app()->view());
+   KDialog* dlg = new KDialog(parent);
    dlg->setMainWidget(editor);
    dlg->exec();
 }
 
 ///Add a new contact
-void AkonadiBackend::addNewContact(Contact* contact)
+void AkonadiBackend::addNewContact(Contact* contact,QWidget* parent)
 {
    KABC::Addressee newContact;
    newContact.setNickName       ( contact->getNickName()        );
@@ -222,14 +229,13 @@ void AkonadiBackend::addNewContact(Contact* contact)
       newContact.insertPhoneNumber(pn);
    }
 
-
    //aContact->setPhoneNumbers   (newNumbers           );//TODO
 
-    Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::CreateMode, SFLPhone::app()->view() );
+   Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::CreateMode, parent );
 
    editor->setContactTemplate(newContact);
 
-   KDialog* dlg = new KDialog(SFLPhone::app()->view());
+   KDialog* dlg = new KDialog(parent);
    dlg->setMainWidget(editor);
    dlg->exec();
 
@@ -239,6 +245,18 @@ void AkonadiBackend::addNewContact(Contact* contact)
    }
 }
 
+///Implement virtual pure method
+void AkonadiBackend::editContact(Contact* contact)
+{
+   editContact(contact,0);
+}
+
+///Implement virtual pure method
+void AkonadiBackend::addNewContact(Contact* contact)
+{
+   addNewContact(contact,0);
+}
+
 
 /*****************************************************************************
  *                                                                           *
diff --git a/kde/src/AkonadiBackend.h b/kde/src/klib/AkonadiBackend.h
similarity index 84%
rename from kde/src/AkonadiBackend.h
rename to kde/src/klib/AkonadiBackend.h
index cfbf5cde5deff6243edc52a4d29e2921d634147e..180a5b6a5ab99811efcff5580995dbf728cf9bd2 100644
--- a/kde/src/AkonadiBackend.h
+++ b/kde/src/klib/AkonadiBackend.h
@@ -20,7 +20,9 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  **************************************************************************/
-#include <lib/ContactBackend.h>
+#include "../lib/ContactBackend.h"
+#include "../lib/CallModel.h"
+#include "../lib/typedefs.h"
 #include <akonadi/collectionmodel.h>
 
 //Qt
@@ -44,14 +46,17 @@ class Contact;
 typedef QList<Contact*> ContactList;
 
 ///@class AkonadiBackend Implement a backend for Akonadi
-class AkonadiBackend : public ContactBackend {
+class LIB_EXPORT AkonadiBackend : public ContactBackend {
    Q_OBJECT
 public:
    static   ContactBackend* getInstance();
    Contact* getContactByPhone ( const QString& phoneNumber ,bool resolveDNS = false );
    Contact* getContactByUid   ( const QString& uid                                  );
-   void     editContact       ( Contact*       contact                              );
-   void     addNewContact     ( Contact*       contact                              );
+   void     editContact       ( Contact*       contact , QWidget* parent = 0        );
+   void     addNewContact     ( Contact*       contact , QWidget* parent = 0        );
+   
+   virtual void     editContact   ( Contact*   contact                              );
+   virtual void     addNewContact ( Contact*   contact                              );
 
 private:
    AkonadiBackend(QObject* parent);
@@ -63,6 +68,7 @@ private:
 
    //Attributes
    static AkonadiBackend*         m_pInstance  ;
+   static CallModel<>*            m_pModel     ;
    Akonadi::Session*              m_pSession   ;
    Akonadi::Collection            m_Collection ;
    QHash<QString,KABC::Addressee> m_AddrHash   ;
diff --git a/kde/src/klib/CMakeLists.txt b/kde/src/klib/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e476e0f444985b845faccbf90cfc25706d5d56f0
--- /dev/null
+++ b/kde/src/klib/CMakeLists.txt
@@ -0,0 +1,55 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+ADD_DEFINITIONS("-std=c++0x")
+
+ADD_DEFINITIONS(
+	${QT_DEFINITIONS} 
+	-fexceptions
+)
+
+PROJECT(ksflphone)
+
+SET ( KDE4_KABC_LIBS  -lkabc )
+
+SET(LOCAL_CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/")
+SET(CMAKE_MODULE_PATH "${LOCAL_CMAKE_MODULE_PATH}")
+
+FIND_PACKAGE ( KDE4 REQUIRED )
+FIND_PACKAGE ( Qt4 REQUIRED )
+
+INCLUDE ( KDE4Defaults )
+
+set(GENERIC_LIB_VERSION "1.1.0")
+
+INCLUDE_DIRECTORIES ( ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
+
+#File to compile
+set( ksflphone_LIB_SRCS
+   AkonadiBackend.cpp
+)
+ 
+kde4_add_library( ksflphone  SHARED ${ksflphone_LIB_SRCS} )
+ 
+target_link_libraries( ksflphone
+  qtsflphone
+  ${QT_QTCORE_LIBRARY}
+  ${KDEPIMLIBS_AKONADI_KMIME_LIBS}
+  ${KDEPIMLIBS_AKONADI_LIBS}
+  ${KDEPIMLIBS_AKONADI_CONTACT_LIBS}
+  ${KDE4_KDEUI_LIBS}
+)
+
+set_target_properties( ksflphone
+  PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION}
+)
+
+set( ksflphone_LIB_HDRS
+  AkonadiBackend.h
+)
+
+install( FILES ${ksflphone_LIB_HDRS}
+  DESTINATION ${INCLUDE_INSTALL_DIR}/ksflphone
+  COMPONENT Devel
+)
+ 
+install( TARGETS ksflphone  ${INSTALL_TARGETS_DEFAULT_ARGS} )
diff --git a/kde/src/klib/dataengine.h b/kde/src/klib/dataengine.h
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/kde/src/lib/CMakeLists.txt b/kde/src/lib/CMakeLists.txt
index f0c574c9d0f4296a9c5fc15b43dd237ab1cdfe76..3db06e46222025221271cb49ff41cf8d14a01202 100644
--- a/kde/src/lib/CMakeLists.txt
+++ b/kde/src/lib/CMakeLists.txt
@@ -20,7 +20,7 @@ FIND_PACKAGE ( Qt4 REQUIRED )
 
 INCLUDE ( KDE4Defaults )
 
-set(GENERIC_LIB_VERSION "1.0.2")
+set(GENERIC_LIB_VERSION "1.1.0")
 
 INCLUDE_DIRECTORIES ( ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
 
diff --git a/kde/src/lib/Call.cpp b/kde/src/lib/Call.cpp
index d700174dda1cbecba349c2566486c3d942a90eda..223bb0706ee3ea48dc282718db565aabb10b2257 100644
--- a/kde/src/lib/Call.cpp
+++ b/kde/src/lib/Call.cpp
@@ -625,7 +625,7 @@ void Call::call()
    qDebug() << "account = " << m_Account;
    if(m_Account.isEmpty()) {
       qDebug() << "Account is not set, taking the first registered.";
-      this->m_Account = CallModelConvenience::getCurrentAccountId();
+      this->m_Account = CallModel<>::getCurrentAccountId();
    }
    if(!m_Account.isEmpty()) {
       qDebug() << "Calling " << m_CallNumber << " with account " << m_Account << ". callId : " << m_CallId;
diff --git a/kde/src/lib/CallModel.h b/kde/src/lib/CallModel.h
index 3346f93d6c3921466fda1f999ee6f14150436004..ae19567b0c0fafd667a57f5cc60d959daff8309f 100644
--- a/kde/src/lib/CallModel.h
+++ b/kde/src/lib/CallModel.h
@@ -23,6 +23,8 @@
 
 #include <QObject>
 #include <QVector>
+#include <QWidget>
+#include <QModelIndex>
 #include <QMap>
 #include "typedefs.h"
 
@@ -86,7 +88,7 @@ signals:
  *  solution may be less "clean" than MVC, but is 3 time smaller and easier to improve (in fact, possible to improve).      
  */
 ///@class CallModel Central model/frontend to deal with sflphoned
-template  <typename CallWidget, typename Index>
+template  <typename CallWidget = QWidget*, typename Index = QModelIndex*>
 class LIB_EXPORT CallModel : public CallModelBase {
    public:
       enum ModelType {
@@ -212,11 +214,11 @@ class LIB_EXPORT CallModel : public CallModelBase {
       bool  updateCommon (Call* call);
 };
 
-class CallModelConvenience : public CallModel<QWidget*,QModelIndex*>
+/*class CallModelConvenience : public CallModel<QWidget*,QModelIndex*>
 {
    public:
       CallModelConvenience(ModelType type) : CallModel<QWidget*,QModelIndex*>(type) {}
-};
+};*/
 
 #include "CallModel.hpp"
 
diff --git a/kde/src/lib/Contact.cpp b/kde/src/lib/Contact.cpp
index 6aa277e09460954b5434c8601b509327a19e213e..bc64c91e69fffad8b49cef54460f5efd63ac1067 100644
--- a/kde/src/lib/Contact.cpp
+++ b/kde/src/lib/Contact.cpp
@@ -150,7 +150,7 @@ void Contact::setFamilyName(const QString& name)
 ///Set the Photo/Avatar
 void Contact::setPhoto(QPixmap* photo)
 {
-   m_pPhoto      = photo;
+   m_pPhoto = photo;
 }
 
 ///Set the formatted name (display name)
diff --git a/kde/src/widgets/BookmarkDock.cpp b/kde/src/widgets/BookmarkDock.cpp
index 4b6722456b3dc4d9af6149ba02d805b1e34ee343..82195d52f4d7935fea7e8dd34231c7edd6f29b0c 100644
--- a/kde/src/widgets/BookmarkDock.cpp
+++ b/kde/src/widgets/BookmarkDock.cpp
@@ -40,7 +40,7 @@
 #include "SFLPhone.h"
 #include "widgets/CategoryDrawer.h"
 #include "widgets/CategorizedTreeWidget.h"
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 
 ///@class QNumericTreeWidgetItem : Tree widget with different sorting criterias
 class QNumericTreeWidgetItem : public QTreeWidgetItem {
diff --git a/kde/src/widgets/CallTreeItem.cpp b/kde/src/widgets/CallTreeItem.cpp
index 9ea46ccc42c5ec81f937287098a773adb8967a17..041ddaae881455186e99daea9fbf569b9b095448 100644
--- a/kde/src/widgets/CallTreeItem.cpp
+++ b/kde/src/widgets/CallTreeItem.cpp
@@ -48,7 +48,7 @@
 #include "lib/Call.h"
 
 //SFLPhone
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "widgets/TranslucentButtons.h"
 #include "SFLPhone.h"
 
diff --git a/kde/src/widgets/ContactDock.cpp b/kde/src/widgets/ContactDock.cpp
index 6003df1fed88ff9f63e1ec7902ea585c9a741bd7..80119af710445aee824f7e6a3b08e61e22fcf59b 100644
--- a/kde/src/widgets/ContactDock.cpp
+++ b/kde/src/widgets/ContactDock.cpp
@@ -40,7 +40,7 @@
 #include <KIcon>
 
 //SFLPhone
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "ContactItemWidget.h"
 #include "SFLPhone.h"
 #include "conf/ConfigurationSkeleton.h"
diff --git a/kde/src/widgets/ContactItemWidget.cpp b/kde/src/widgets/ContactItemWidget.cpp
index db15eaa48bca58d0e31186ffb1d15bb4919b2776..b253adfff36ad505dab9ab0e4bb4a234d1d9c16c 100644
--- a/kde/src/widgets/ContactItemWidget.cpp
+++ b/kde/src/widgets/ContactItemWidget.cpp
@@ -40,7 +40,7 @@
 #include <unistd.h>
 
 //SFLPhone
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "widgets/BookmarkDock.h"
 #include "SFLPhone.h"
 
diff --git a/kde/src/widgets/HistoryDock.cpp b/kde/src/widgets/HistoryDock.cpp
index 8202c3405e8a9afa412a80f3317e05d0d743cacf..b53bfa1f78fc82c81fdaf1540548599a7b3c4ff5 100644
--- a/kde/src/widgets/HistoryDock.cpp
+++ b/kde/src/widgets/HistoryDock.cpp
@@ -42,7 +42,7 @@
 //SFLPhone
 #include "SFLPhone.h"
 #include "widgets/HistoryTreeItem.h"
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "conf/ConfigurationSkeleton.h"
 
 //SFLPhone library
diff --git a/kde/src/widgets/HistoryTreeItem.cpp b/kde/src/widgets/HistoryTreeItem.cpp
index 74f54d9f8344ff22bbe4500bbd4089decbe8ea8b..3b6612e0c3f7f68654ddcd2a7b9057a3410259b5 100644
--- a/kde/src/widgets/HistoryTreeItem.cpp
+++ b/kde/src/widgets/HistoryTreeItem.cpp
@@ -52,7 +52,7 @@
 #include "lib/Call.h"
 
 //SFLPhone
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 #include "SFLPhone.h"
 #include "widgets/BookmarkDock.h"
 
diff --git a/kde/src/widgets/SortableDockCommon.cpp b/kde/src/widgets/SortableDockCommon.cpp
index caaea4666b95756528e2fec3bec69b41faa17cb6..6740f7921e4ff6d6686ff31846d2ca5b4d1ee5e6 100644
--- a/kde/src/widgets/SortableDockCommon.cpp
+++ b/kde/src/widgets/SortableDockCommon.cpp
@@ -10,7 +10,7 @@
 #include "lib/Contact.h"
 #include "lib/CallModel.h"
 #include "SFLPhone.h"
-#include "AkonadiBackend.h"
+#include "klib/AkonadiBackend.h"
 
 ///StaticEventHandler constructor
 StaticEventHandler::StaticEventHandler(QObject* parent) : QObject(parent)