Revision: 201035
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:27:32 +0300
changeset 71 7cc7d74059f9
parent 65 ae724a111993
child 75 4ecbe3571b5a
Revision: 201035 Kit: 201037
contacts_info/contacts_metadata/contacts_metadata.mrp
contacts_plat/contacts_ui_api/inc/cntuids.h
contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h
contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h
contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h
contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css
contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp
contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp
contactwidgethsplugin/contactwidgethsplugin.pro
contactwidgethsplugin/resource/contactwidgethsplugin.manifest
contactwidgethsplugin/rom/contactwidgeths.iby
inc/cntdebug.h
package_definition.xml
package_map.xml
phonebookengines/cntactions/src/cntaction.cpp
phonebookengines/cntactions/src/cntmessageaction.cpp
phonebookengines/cntlistmodel/inc/cntcache_p.h
phonebookengines/cntlistmodel/src/cntcache.cpp
phonebookengines/cntlistmodel/src/cntcache_p.cpp
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp
phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp
phonebookengines/cntsimutility/inc/cntsimutility.h
phonebookengines/cntsimutility/src/cntsimutility.cpp
phonebookui/bwins/cnthistorymodelu.def
phonebookui/cnthistorymodel/inc/cnthistorymodel.h
phonebookui/cnthistorymodel/src/cnthistorymodel.cpp
phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp
phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp
phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro
phonebookui/eabi/cnthistorymodelu.def
phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h
phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h
phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h
phonebookui/pbkcommonui/inc/cntcollectionview.h
phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h
phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h
phonebookui/pbkcommonui/inc/cntcontactcardview_p.h
phonebookui/pbkcommonui/inc/cntdetaileditor.h
phonebookui/pbkcommonui/inc/cnteditview.h
phonebookui/pbkcommonui/inc/cntfavourite.h
phonebookui/pbkcommonui/inc/cnthistoryviewitem.h
phonebookui/pbkcommonui/inc/cntkeygrabber.h
phonebookui/pbkcommonui/inc/cntmainwindow.h
phonebookui/pbkcommonui/inc/cntnamesview_p.h
phonebookui/pbkcommonui/pbkcommonui.pro
phonebookui/pbkcommonui/resources/pbkcommonui.qrc
phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css
phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml
phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css
phonebookui/pbkcommonui/resources/style/cntselectiondialogmarkwidget_color.css
phonebookui/pbkcommonui/src/cntaddressmodel.cpp
phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp
phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp
phonebookui/pbkcommonui/src/cntcollectionview.cpp
phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp
phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp
phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp
phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp
phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp
phonebookui/pbkcommonui/src/cntdetaileditor.cpp
phonebookui/pbkcommonui/src/cnteditview_p.cpp
phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp
phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp
phonebookui/pbkcommonui/src/cntfavourite.cpp
phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp
phonebookui/pbkcommonui/src/cntfetchmarkall.cpp
phonebookui/pbkcommonui/src/cntgroupactionsview.cpp
phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp
phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp
phonebookui/pbkcommonui/src/cnthistoryview.cpp
phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp
phonebookui/pbkcommonui/src/cntimportsview.cpp
phonebookui/pbkcommonui/src/cntkeygrabber.cpp
phonebookui/pbkcommonui/src/cntmainwindow.cpp
phonebookui/pbkcommonui/src/cntnamesview.cpp
phonebookui/pbkcommonui/src/cntnamesview_p.cpp
phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp
phonebookui/pbkcommonui/src/cntsettingsmodel.cpp
phonebookui/pbkcommonui/src/cntsettingsview.cpp
phonebookui/pbkcommonui/src/cntviewnavigator.cpp
phonebookui/phonebookapp/phonebookapp.pro
phonebookui/phonebookapp/src/main.cpp
phonebookui/phonebookservices/inc/cntservices.h
phonebookui/phonebookservices/phonebookservices.pro
phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp
phonebookui/phonebookservices/src/cntservices.cpp
phonebookui/phonebookservices/src/cntserviceviewfactory.cpp
phonebookui/phonebookservices/src/cntserviceviewmanager.cpp
phonebookui/phonebookservices/src/main.cpp
phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp
phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf
phonebookui/rom/phonebook.iby
phonebookui/rom/phonebookservices.iby
presencecache/inc/presencecacheids.hrh
presencecache/presencecacheqt/tsrc/presencefeeddemo_qt/presencefeeddemo.sisx
presencecache/presencecachesymbian/group/presencecacheuids.hrh
presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp
presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp
presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp
presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp
presencecache/presencecachesymbian/presencecacheutils/inc/presencetrace.h
presencecache/presencecachesymbian/presencecacheutils/inc/prestrace.h
presencecache/presencecachesymbian/presencecacheutils/src/presencetrace.cpp
presencecache/presencecachesymbian/presencecacheutils/src/prestrace.cpp
--- a/contacts_info/contacts_metadata/contacts_metadata.mrp	Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-component           contacts_metadata
-source   \sf\app\contacts\contacts_info\contacts_metadata 
-source   \sf\app\contacts\package_definition.xml
-source   \sf\app\contacts\distribution.policy.s60
-notes_source      \component_defs\release.src
-ipr T 
--- a/contacts_plat/contacts_ui_api/inc/cntuids.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/contacts_plat/contacts_ui_api/inc/cntuids.h	Fri Sep 17 08:27:32 2010 +0300
@@ -49,7 +49,8 @@
 // name list row enumerations
 enum CntNameListRowSetting {
     CntOneRowNameOnly = 0x0,
-    CntTwoRowsNameAndPhoneNumber = 0x1
+    CntTwoRowsNameAndPhoneNumber = 0x1,
+    CntTwoRowsStatusUpdate = 0x2
 };
 
 
--- a/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/contacts_plat/contacts_ui_extensions_api/inc/cntviewsupplier.h	Fri Sep 17 08:27:32 2010 +0300
@@ -50,6 +50,16 @@
      */
     virtual CntAbstractView* viewAt( int aIndex ) = 0;
 
+    /**
+     * Sets the view id base value for supplier. 
+     * The supplier method viewIdAt should return view ids in range
+     * from aViewIdBase to aViewIdBase + viewCount.
+     *
+     * @param int, action index 
+     * @return QString, process name
+     */
+    virtual void setViewIdBase( int aViewIdBase ) = 0;
+
 protected:
     // prevent deleting by client
     virtual ~CntViewSupplier() {}
--- a/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/inc/commlauncherwidget.h	Fri Sep 17 08:27:32 2010 +0300
@@ -21,6 +21,8 @@
 #include <HbPopup>
 #include <qtcontacts.h>
 #include <xqaiwrequest.h>
+#include <QObjectCleanupHandler>
+#include <QScopedPointer>
 
 #include "contactwidgetplugin_global.h"
 
@@ -52,8 +54,11 @@
                                  QRectF& sceneRect, QRectF& launcherRect);
     void selectAppearEffect(QPointF FriendPos, QPointF LauncherPos);
     
+    bool isPendingRequest();
+    
 signals:
     void launcherClosed();
+    void requestCompleted();
         
 protected:
     void keyPressEvent(QKeyEvent *event);
@@ -68,10 +73,11 @@
 
     void makeCall();
     void sendMessage(); 
-    // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
-    //void sendEmail();
+    void sendEmail();
     void openPhonebook();
     
+    void handleRequestOk(const QVariant& value);
+    
     int commLauncherWidth();
 
 private:
@@ -80,8 +86,11 @@
     QGraphicsLinearLayout *mLayout;
     
     int mButtonCount;
+    
+    
 
     XQAiwRequest *mRequest;
+    QContactAction* mCommLauncherAction;
     
     HbPushButton *mCallButton;
     HbPushButton *mSendMsgButton;
@@ -91,6 +100,10 @@
     XQApplicationManager *mApplicationManager;
     QString mAppearEffect;
     
+    QObjectCleanupHandler mCleanupHandler;
+    
+    bool mPendingRequest;
+    
     CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget)
 
 };
--- a/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/inc/contactwidgeths.h	Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,8 @@
 #include <XQServiceUtil.h>
 #include <xqappmgr.h>
 #include <thumbnailmanager_qt.h>
-
+#include <QObjectCleanupHandler>
+#include <QScopedPointer>
 #include "contactwidgetplugin_global.h"
 #include "commlauncherwidget.h"
 
@@ -89,6 +90,7 @@
     void onContactsRemoved( const QList<QContactLocalId> &contactIds );
     void thumbnailReady(QPixmap, void*, int, int);
     void loadNormalLayout();
+    void onRequestComplete();
     
 private:
     void createUI();
@@ -117,11 +119,15 @@
     CommLauncherWidget *mLauncher;
     HbFrameDrawer *mWidgetFrameDrawer;
     HbFrameDrawer *mShareFrameDrawer;
+    QScopedPointer<HbIcon> mAvatarIcon;
+   
     // Contact
     QContact mContact;
     QContactLocalId mContactLocalId;
     QString mContactImageFileName;
-    QContactAvatar* mAvatar;
+    // need to use scopepointer as QObjectCleanupHandler is not accepting
+    // it as a parameter
+    QScopedPointer<QContactAvatar> mAvatar;
     bool mContactHasAvatarDetail;
     // Contact manager
     QContactManager *mContactManager;
@@ -129,11 +135,15 @@
     XQAiwRequest *mContactSelectRequest;
 
     HbMainWindow *mMainWindow;
-    ThumbnailManager *mThumbnailManager;
+    QScopedPointer<ThumbnailManager> mThumbnailManager;
     QPixmap mThumbnailPixmap;
     // When true, thumbnail generating is in progress
     bool mThumbnailInProgress; 
-    HbTranslator* mTranslator;
+    QScopedPointer<HbTranslator> mTranslator;
+    
+    QObjectCleanupHandler mCleanupHandler;
+    
+    bool mPendingExit;
     
     CONTACTWIDGET_TEST_FRIEND_CLASS(TestContactWidget)
 
--- a/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/resource/commlauncherbuttons.css	Fri Sep 17 08:27:32 2010 +0300
@@ -1,23 +1,74 @@
 
-HbPushButton
+
+HbPushButton#callApp
 {
     fixed-width:  9.0un;
     fixed-height: 9.0un;
 }
 
-HbPushButton::icon
+HbPushButton#callApp::icon
 {
     fixed-width:  8.0un;
     fixed-height: 8.0un;
 }
 
-HbPushButtonSpacer
+HbPushButton#callApp::Spacer
+{
+    fixed-width: 0.0un;
+    fixed-height: 0.0un;
+}
+
+HbPushButton#msgApp
+{
+    fixed-width:  9.0un;
+    fixed-height: 9.0un;
+}
+
+HbPushButton#msgApp::icon
+{
+    fixed-width:  8.0un;
+    fixed-height: 8.0un;
+}
+
+HbPushButton#msgApp::Spacer
 {
     fixed-width: 0.0un;
     fixed-height: 0.0un;
 }
 
 
+HbPushButton#emailApp
+{
+    fixed-width:  9.0un;
+    fixed-height: 9.0un;
+}
 
+HbPushButton#emailApp::icon
+{
+    fixed-width:  8.0un;
+    fixed-height: 8.0un;
+}
+
+HbPushButton#emailApp::Spacer
+{
+    fixed-width: 0.0un;
+    fixed-height: 0.0un;
+}
 
+HbPushButton#phoneApp
+{
+    fixed-width:  9.0un;
+    fixed-height: 9.0un;
+}
 
+HbPushButton#phoneApp::icon
+{
+    fixed-width:  8.0un;
+    fixed-height: 8.0un;
+}
+
+HbPushButton#phoneApp::Spacer
+{
+    fixed-width: 0.0un;
+    fixed-height: 0.0un;
+}
--- a/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/src/commlauncherwidget.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
 #include <qtcontacts.h>
 #include <hbdocumentloader.h>
 #include <xqappmgr.h>
-
+#include <xqaiwdecl.h>
 #include "commlauncherwidget.h"
 
 // ContactManager backend
@@ -39,13 +39,20 @@
 const QString messageButtonName  = "ButtonMessage";
 const QString mycardButtonName   = "ButtonMycard";
 
-const QString appearTL = "appear_tl";
-const QString appearTR = "appear_tr";
-const QString appearBL = "appear_bl";
-const QString appearBR = "appear_br"; 
+const QString appearEffectName = "appear";
 
 const int commLauncherMargin = 120;  // heights of titlebar & comm.launcher 
 
+// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED
+// WHEN EVERYBODY ARE USING IT OR LATER VERSION
+#ifndef XQOP_CONTACTS_VIEW_CONTACT_CARD
+#define XQOP_CONTACTS_VIEW_CONTACT_CARD QLatin1String("openContactCard(int)")
+#endif
+#ifndef XQI_CONTACTS_VIEW
+#define XQI_CONTACTS_VIEW QLatin1String("com.nokia.symbian.IContactsView")
+#endif
+
+
 /*!
   \class CommLauncherWidget
 */
@@ -62,7 +69,9 @@
  mSendMsgButton(0),
  mEmailButton(0),
  mPhonebookButton(0),
- mApplicationManager(0)
+ mApplicationManager(0),
+ mCommLauncherAction(0),
+ mPendingRequest(false)
 {    
     
     HbStyleLoader::registerFilePath(":/commlauncherbuttons.css");
@@ -81,30 +90,37 @@
                                 horizontalMargin, 2*verticalMargin);
     
     // create document loader
-    HbDocumentLoader *documentLoader = new HbDocumentLoader();
+    QScopedPointer<HbDocumentLoader> documentLoader ( new HbDocumentLoader()	);
     bool result = false;
     documentLoader->load(commLauncherDocml, &result);
     ASSERT(result);
     
     // create buttons
     const QString callIconName = "qtg_large_active_call";
-    mCallButton = createButton(callIconName, callButtonName, documentLoader);
+    mCallButton = createButton(callIconName, callButtonName, documentLoader.data());
+    HbStyle::setItemName(mCallButton, "callApp");
+    mCallButton->setObjectName("callApp");
     connect(mCallButton, SIGNAL(clicked()), this, SLOT(makeCall()));
     
     const QString messagingIconName = "qtg_large_message";
-    mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader);
+    mSendMsgButton = createButton(messagingIconName, messageButtonName, documentLoader.data());
+    HbStyle::setItemName(mSendMsgButton, "msgApp");
+    mSendMsgButton->setObjectName("msgApp");
     connect(mSendMsgButton, SIGNAL(clicked()), this, SLOT(sendMessage()));
     
     const QString emailIconName = "qtg_large_email";
-    mEmailButton = createButton(emailIconName, emailButtonName, documentLoader);
-    // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
-    //connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail()));
+    mEmailButton = createButton(emailIconName, emailButtonName, documentLoader.data());
+    HbStyle::setItemName(mEmailButton, "emailApp");
+    mEmailButton->setObjectName("emailApp");
+    connect(mEmailButton, SIGNAL(clicked()), this, SLOT(sendEmail()));
     
     const QString phonebookIconName = "qtg_large_mycard";
-    mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader);
+    mPhonebookButton = createButton(phonebookIconName, mycardButtonName, documentLoader.data());
+    HbStyle::setItemName(mPhonebookButton, "phoneApp");
+    mPhonebookButton->setObjectName("phoneApp");
     connect(mPhonebookButton, SIGNAL(clicked()), this, SLOT(openPhonebook()));
         
-    delete documentLoader;
+    
 }
 
 /*!
@@ -113,11 +129,6 @@
 CommLauncherWidget::~CommLauncherWidget()
 {
     // Deleting request cancels all pending requests 
-    if (mRequest) {
-        delete mRequest;
-        mRequest = NULL;
-    }
-
 }
 
 /*!
@@ -182,8 +193,7 @@
     }
         
     // Create email button, if email count exists
-    // EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE PLATFORM DOES NOT SUPPORT IT!
-    /*QList<QContactActionDescriptor> emailActionDescriptors =
+    QList<QContactActionDescriptor> emailActionDescriptors =
             QContactAction::actionDescriptors("email", cmBackend);
     if (emailActionDescriptors.count() > 0) {
         QList<QContactEmailAddress> emailList = mContact->details<QContactEmailAddress>();
@@ -200,16 +210,12 @@
     } else {
         qDebug() << "Email button not created";
     }
-    */
+    
 
     mLayout->addItem(mPhonebookButton);
     mButtonCount++;
 
-    // add Effects
-    HbEffect::add(this, QString(":/friend_expand_tl.fxml"), appearTL);
-    HbEffect::add(this, QString(":/friend_expand_tr.fxml"), appearTR);
-    HbEffect::add(this, QString(":/friend_expand_bl.fxml"), appearBL);
-    HbEffect::add(this, QString(":/friend_expand_br.fxml"), appearBR);       
+    // Set the disappear effect.
     HbEffect::add(this, QString(":/friend_minimize.fxml"),  "disappear");
     
     setLayout(mLayout);    
@@ -220,7 +226,7 @@
 */
 void CommLauncherWidget::popupAboutToShow()
 { 
-    HbEffect::start(this, mAppearEffect);  
+    // no implementation
 }
 
 /*
@@ -241,18 +247,26 @@
         left = false;
     }	
 
+    // Remove the previous appear effect.
+    if (!mAppearEffect.isEmpty()) {
+        HbEffect::remove(this, mAppearEffect, appearEffectName);
+    }
+
+    // Define the new appear effect and set it as active appear effect.
     if (top && left) {
-        mAppearEffect = appearTL;
+        mAppearEffect = ":/friend_expand_tl.fxml";
     }
     else if (top && !left) {
-        mAppearEffect = appearTR;
+        mAppearEffect = ":/friend_expand_tr.fxml";
     }
     else if (!top && left) {
-        mAppearEffect = appearBL;
+        mAppearEffect = ":/friend_expand_bl.fxml";
     }
     else {
-        mAppearEffect = appearBR;
+        mAppearEffect = ":/friend_expand_br.fxml";
     }
+    HbEffect::add(this, mAppearEffect, appearEffectName);
+
     qDebug() << "---------------top " << top << "--- left " << left << " " << mAppearEffect;
 }
 
@@ -261,7 +275,6 @@
 */
 void CommLauncherWidget::popupAboutToClose()
 {
-    HbEffect::start(this, "disappear");  
     emit launcherClosed();
 }
 
@@ -274,8 +287,10 @@
     HbPushButton *button = 0;
     button = qobject_cast<HbPushButton *>
                     (documentLoader->findWidget(buttonName));
+                    
     if (button) {
-        button->setIcon(HbIcon(iconName));
+    	mCleanupHandler.add(button);    
+        button->setIcon(HbIcon(iconName));        
     }
 
     return button;
@@ -351,10 +366,14 @@
             //if preferred is not set select the first number
             phoneNumber = mContact->detail<QContactPhoneNumber>();
         }
-        // invoke action
-        QContactAction *callAction = QContactAction::action(callActionDescriptors.at(0));
+        // invoke action yasir memory leak
+        
+       if(mCommLauncherAction)
+        	delete mCommLauncherAction;
+        mCommLauncherAction = QContactAction::action(callActionDescriptors.at(0));
+        mCleanupHandler.add(mCommLauncherAction);        
         if (!phoneNumber.isEmpty()) {
-            callAction->invokeAction(*mContact, phoneNumber);
+            mCommLauncherAction->invokeAction(*mContact, phoneNumber);
             
             qDebug() << "call to number " << phoneNumber.number();
         }
@@ -385,9 +404,13 @@
             messageNumber = mContact->detail<QContactPhoneNumber>();
         }
         // invoke action
-        QContactAction *messageAction = QContactAction::action(messageActionDescriptors.at(0));
+        if(mCommLauncherAction)
+        	delete mCommLauncherAction;
+        mCommLauncherAction = QContactAction::action(messageActionDescriptors.at(0));
+        mCleanupHandler.add(mCommLauncherAction);
+        
         if (!messageNumber.isEmpty()) {
-            messageAction->invokeAction(*mContact, messageNumber);
+            mCommLauncherAction->invokeAction(*mContact, messageNumber);
             
             qDebug() << "send to number " << messageNumber.number();
         }
@@ -401,20 +424,21 @@
 /*!
     Sends an email to contact.
 */
-// EMAIL FUNCTIONALITY COMMENTED OUT BECAUSE WK20 PLATFORM DOES NOT SUPPORT IT!
 
-/*
 void CommLauncherWidget::sendEmail()
 {
 
     QList<QContactActionDescriptor> emailActionDescriptors =
                 QContactAction::actionDescriptors("email", cmBackend);
-    if (emailActionDescriptors.count() > 0) {
-        QContactAction *emailAction = QContactAction::action(emailActionDescriptors.at(0));
+    if (emailActionDescriptors.count() > 0) {   
+       if(mCommLauncherAction)
+        	delete mCommLauncherAction;
+        mCommLauncherAction = QContactAction::action(emailActionDescriptors.at(0));
+        mCleanupHandler.add(mCommLauncherAction);        
     //TODO: implement
         QList<QContactEmailAddress> emailList = mContact->details<QContactEmailAddress>();
         if (emailList.count() > 0) {
-            emailAction->invokeAction(*mContact, emailList.at(0));
+            mCommLauncherAction->invokeAction(*mContact, emailList.at(0));
        
             QString emailAddress = emailList.at(0).emailAddress();
             qDebug() << "send to email " << emailAddress;
@@ -443,6 +467,7 @@
     
     mRequest = mApplicationManager->create("com.nokia.symbian.IMessage",
                                            "Send", "send(QVariant)", false);
+    mCleanupHandler.add(mRequest);
     if (mRequest) {
         mRequest->setSynchronous(false);
         QList<QVariant> arguments;
@@ -458,7 +483,23 @@
     
     close();
 }
+
+/*!
+    SLOT for handle end of assync request.
 */
+void CommLauncherWidget::handleRequestOk(const QVariant& /*value*/)
+{
+	mPendingRequest = false;	
+	emit requestCompleted();
+}
+
+/*!
+    Return true if any pending request is in progress (at the moment phone book my cart is open).
+*/
+bool CommLauncherWidget::isPendingRequest()
+{
+	return mPendingRequest;
+}
 
 /*!
     Opens contact card from phonebook to contact.
@@ -470,15 +511,21 @@
         delete mRequest;
         mRequest = NULL;
     }
-    mRequest = mApplicationManager->create("com.nokia.services.phonebookservices",
-                                           "Fetch", "open(int)", false);
+    mRequest = mApplicationManager->create(XQI_CONTACTS_VIEW,
+                                           XQOP_CONTACTS_VIEW_CONTACT_CARD,
+                                           false);
+    mCleanupHandler.add(mRequest);
     if (mRequest) {
-        mRequest->setSynchronous(false);
+        mPendingRequest = true;
+        connect(mRequest, SIGNAL(requestOk(const QVariant&)), 
+        		this, SLOT(handleRequestOk(const QVariant&)));
+    	mRequest->setSynchronous(false);
         QList<QVariant> arguments;
         arguments.append(QVariant(mContact->localId()));
         mRequest->setArguments(arguments);
         bool result = mRequest->send();
         if (!result) {
+        	mPendingRequest = false;
             qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
         }
     } else {
@@ -498,22 +545,17 @@
         delete mRequest;
         mRequest = NULL;
     }
-    mRequest = mApplicationManager->create("com.nokia.services.phonebookservices",
-                                           "Fetch", "editCreateNew(QString,QString)", false);
+    
+    // Launching the phonebook to main view
+    mRequest = mApplicationManager->create("com.nokia.services.phonebookappservices",
+                                           "Launch", "launch()", false);
+    mCleanupHandler.add(mRequest);
     if (mRequest) {
-        QList<QVariant> arguments;
-        QString type = QContactPhoneNumber::DefinitionName;
-        arguments.append(QVariant( type ));
-        arguments.append(QVariant( "" ));        
-        mRequest->setArguments(arguments);
-   
-        bool result = mRequest->send();
-        if (!result) {
-            qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
+        QVariant retValue(-1);
+		bool result = mRequest->send(retValue);
+		if (!result) {
+        	qDebug() << "Sending request failed: " << mRequest->lastErrorMessage();
         }
-    
-    } else {
-        qDebug() << "Creating service request failed";
     }
 }
 
--- a/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgeths/src/contactwidgeths.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -31,7 +31,7 @@
 #include <QPixmap>
 #include <QGraphicsSceneMouseEvent>
 #include <HbEvent>
-
+#include <xqaiwdecl.h>
 #include <cntservicescontact.h>
 #include <hbaction.h>
 
@@ -55,6 +55,18 @@
 // Docml file
 const QString contactWidgetDocml = ":/commlauncherwidget.docml";
 
+
+// TODO: THESE STRINGS ARE IN W32 SDK. THESE DEFINITIONS CAN BE REMOVED
+// WHEN EVERYBODY ARE USING IT OR LATER VERSION
+#ifndef XQI_CONTACTS_FETCH
+#define XQI_CONTACTS_FETCH QLatin1String("com.nokia.symbian.IContactsFetch")
+#endif
+#ifndef XQOP_CONTACTS_FETCH_SINGLE
+#define XQOP_CONTACTS_FETCH_SINGLE QLatin1String("singleFetch(QString,QString)")
+#endif
+
+
+
 /*!
   \class ContactWidgetHs
 */
@@ -76,13 +88,14 @@
   mAppManager(0),
   mContactSelectRequest(0),
   mMainWindow(0),
-  mThumbnailManager(0),
+  mThumbnailManager(new ThumbnailManager(this)),
   mThumbnailPixmap(QPixmap()),
   mThumbnailInProgress(false),
-  mTranslator(0)
+  mTranslator(new HbTranslator(translationsPath, translationsFile)),
+  mAvatarIcon(0),
+  mPendingExit(false)
 {
-    // Localization file loading   
-	mTranslator = new HbTranslator(translationsPath, translationsFile);
+    // Localization file loading   		
 	mTranslator->loadCommon();    
     
     // UI creation done in onInitialize()
@@ -95,39 +108,36 @@
 
     // avatar icon item has to be created without parent else the drawing goes wrong
     mAvatarIconItem = new HbIconItem();
-    
-    //Create Communication launcher
+    mCleanupHandler.add(mAvatarIconItem);
+    //Create Communication launchernew
     //Has to be created without parent, otherwise timout, dismissPolicy and modality have no effect
     mLauncher = new CommLauncherWidget();
+    mCleanupHandler.add(mLauncher);
     mLauncher->setTimeout(0);
     mLauncher->setDismissPolicy(HbPopup::TapAnywhere); 
     mLauncher->setBackgroundFaded(false);
     mLauncher->setModal(false);
     mLauncher->hide();
     // USE CONNECT WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM
-    //connect(mLauncher, SIGNAL(launcherClosed()),
-    //        this, SLOT(loadNormalLayout()));
-    
-    mAppManager = new XQApplicationManager();
+    connect(mLauncher, SIGNAL(launcherClosed()),
+            this, SLOT(loadNormalLayout()));
+    connect(mLauncher, SIGNAL(requestCompleted()),
+    		this, SLOT(onRequestComplete()));
+    mAppManager = new XQApplicationManager();    
     ASSERT(mAppManager);
+    mCleanupHandler.add(mAppManager);
     mLauncher->setApplicationManager(*mAppManager);
     
-    // Thumbnail manager so we can handle large size images as contact avatars
-    mThumbnailManager = new ThumbnailManager(this);
+    // Thumbnail manager so we can handle large size images as contact avatars    
     mThumbnailManager->setMode(ThumbnailManager::Default);
     mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
     mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailMedium );
     
-    connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
+    connect(mThumbnailManager.data(), SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
         this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
     
-    mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName, 
-                                           HbFrameDrawer::NinePieces);
-    ASSERT(mWidgetFrameDrawer);
-    
-    mShareFrameDrawer = new HbFrameDrawer(normalFrameName, 
-                                          HbFrameDrawer::NinePieces);
-    ASSERT(mShareFrameDrawer);
+
+      
 }
 
 /*!
@@ -135,37 +145,17 @@
 */
 ContactWidgetHs::~ContactWidgetHs()
 {
-	if (mLauncher) 
-		{
-		delete mLauncher;
-		}
-    if (mContactManager)
-    	{
-    	delete mContactManager;
-    	}
-    if (mAppManager)
-    	{
-    	delete mAppManager;
-    	}
-    if (mAvatar)
-    	{
-    	delete mAvatar;
-    	}
-    
-    // Deleting request cancels all pending requests
-    if (mContactSelectRequest)
-    	{
-    	delete mContactSelectRequest;
-    	}
-    
-    if (mThumbnailManager)
-    	{
-    	delete mThumbnailManager;
-    	}
-    if (mTranslator)
-    	{
-    	delete mTranslator;
-    	}
+
+}
+
+/*!
+    Slot for handle request complete
+    if pending exit was set , do it.
+*/
+void ContactWidgetHs::onRequestComplete()
+{
+ if (mPendingExit)
+	 emit finished();
 }
 
 /*!
@@ -238,13 +228,13 @@
 bool ContactWidgetHs::setContactImage(QPixmap& inputPixmap)
 {
     bool ret = false;
-        
-    HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces);
-    ASSERT(avatarDrawer);
 
-    // Try to load the image first, because setFrameGraphicsName() returns void.
-    //,,mContactImageFileName = imageFile;
-    
+    QScopedPointer<HbFrameDrawer> avatarDrawer( new HbFrameDrawer(defaultAvatar, 
+					  HbFrameDrawer::NinePieces));
+    //TODO: do check other way 
+    // This assert must be commented because QScopedPointer not support it this way
+    //ASSERT(avatarDrawer.isNull());
+            
     ret=true;
     qDebug() << "setContactImage av 0, inputsize " << inputPixmap.width() << "x" << inputPixmap.height(); 
     
@@ -256,8 +246,7 @@
     avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background
     qDebug() << "setContactImage av 1"; //,,
   
-    QPainter painter(&avatarPixmap); 
-    QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem;
+    QPainter painter(&avatarPixmap);      
     avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize));
     painter.end();
     qDebug() << "setContactImage av 2"; //,,             
@@ -289,16 +278,17 @@
     }
 	} 
     
-    HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap));
-       
-    mAvatarIconItem->setIcon(*avatarIcon);
+
+    mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap))); 
+  
+    mAvatarIconItem->setIcon(*mAvatarIcon.data());
     mAvatarIconItem->setSize(QSize(contactIconSize, contactIconSize));
     mAvatarIconItem->setAspectRatioMode(Qt::KeepAspectRatio);
         
     // Then display the new image
     update();
     qDebug() << "setContactImage av 3"; //,,
-    
+       
     return ret;
 }
 
@@ -308,10 +298,12 @@
 bool ContactWidgetHs::setContactImage(const QString &imageFile)
 {
     bool ret = false;
-        
-    HbFrameDrawer *avatarDrawer = new HbFrameDrawer("qtg_fr_hsshortcut_normal", HbFrameDrawer::NinePieces);
-    ASSERT(avatarDrawer);
-
+    QScopedPointer<HbFrameDrawer> avatarDrawer( new HbFrameDrawer(defaultAvatar, 
+					  HbFrameDrawer::NinePieces));
+    //TODO: do check other way 
+    //This assert must be commented because QScopedPointer not support it this way
+    //ASSERT(avatarDrawer.isNull());
+ 
     // Try to load the image first, because setFrameGraphicsName() returns void.
     mContactImageFileName = imageFile;
     qDebug() << "setContactImage ok " << imageFile;
@@ -331,24 +323,28 @@
     avatarPixmap.fill(QColor(0, 0, 0, 0)); //transparent background
         
     QPainter painter(&avatarPixmap);
-    QStyleOptionGraphicsItem *item = new QStyleOptionGraphicsItem;
+    
     avatarDrawer->paint(&painter, QRectF(0, 0, contactIconSize, contactIconSize));
     painter.end();
              
-    HbIcon *avatarIcon = new HbIcon(QIcon(avatarPixmap));
+
+     
+    mAvatarIcon.reset(new HbIcon(QIcon(avatarPixmap))); 
     
     // Add badge if needed
     if (imageFile == addContactAvatar) {
         HbIcon addIcon(addContactAvatar);
-        QSizeF avatarSize = avatarIcon->size();
+        QSizeF avatarSize = mAvatarIcon->size();
         addIcon.setSize(QSize(avatarSize.width()/2, avatarSize.height()/2));
-        avatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1);    
+        mAvatarIcon->addBadge(Qt::AlignTop | Qt::AlignRight, addIcon, 1);    
     }
     
-    mAvatarIconItem->setIcon(*avatarIcon);
+    mAvatarIconItem->setIcon(*mAvatarIcon.data());
         
     // Then display the new image
     update();
+    
+ 
 
     return ret;
 }
@@ -376,8 +372,20 @@
     const int textRow = 2;
     const int rows = 4; // 4 using 2 margins
     
+    setContentsMargins(0, 0, 0, 0);
+
     QGraphicsGridLayout *layout = new QGraphicsGridLayout(this);
 
+    mWidgetFrameDrawer = new HbFrameDrawer(normalFrameName, 
+                                           HbFrameDrawer::NinePieces);
+    ASSERT(mWidgetFrameDrawer);
+    
+    mShareFrameDrawer = new HbFrameDrawer(normalFrameName, 
+                                          HbFrameDrawer::NinePieces);
+    ASSERT(mShareFrameDrawer);
+    
+    
+    
     // Widget frame
     qreal corner = 1.5 * unit; // from shortcut widget layout spec: 1.5un    
     mWidgetFrameDrawer->setBorderWidths(corner, corner); 
@@ -426,14 +434,20 @@
     layout->setRowFixedHeight(textRow,   fontSpec.textHeight());    
     layout->setRowFixedHeight(textRow+1, widgetMargin);
     
+    layout->setHorizontalSpacing(0.5);
+    layout->setVerticalSpacing(1.5);
+    layout->setContentsMargins(0, 0, 0, 0);
     setLayout(layout);
 
     // Widget size
-    qreal sizeX = widgetMargin * 2 * unit;  //margins from layout spec
-    qreal sizeY = widgetMargin * 3 * unit;  //margins from layout spec
+    qreal sizeX = widgetMargin * 2; // margins from layout spec
+    sizeX += contactIconSize;
+    sizeX += 1;                     // 2*0.5 horizontal spacing
+    qreal sizeY = widgetMargin * 2; // margins from layout spec
+    sizeY += contactIconSize;
     sizeY += fontSpec.textHeight();
-    sizeY += contactIconSize;
-    sizeX += contactIconSize;
+    sizeY += 5;                     // 3*0.5 vertical spacing, 5 because 4.5 broke snaping
+    
     
     qDebug() << "widget sizex, sizey, unit, rows " << sizeX << sizeY << unit << rows;
     
@@ -444,10 +458,11 @@
 
 QString ContactWidgetHs::getContactDisplayName(QContact& contact)
 {
-	QString name = mContactManager->synthesizedDisplayLabel(contact);
-    if (name.isEmpty()) {
-        name = hbTrId("txt_friend_widget_contact_unnamed");    
-	}
+    QString name = mContactManager->synthesizedContactDisplayLabel(contact);
+    if (name.isEmpty())
+    {
+        name = hbTrId("txt_friend_widget_contact_unnamed");
+    }
     return name;
 }
 
@@ -457,7 +472,7 @@
 */
 void ContactWidgetHs::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
-	Q_UNUSED(event);
+    Q_UNUSED(event);
 }
 
 /*!
@@ -492,11 +507,12 @@
                 }
             }
         } else if (!mLauncher->isVisible()) {
+            // Change the frame layout
+            loadLayout(latchedFrameName, latchedTextColor);
+
             // create and show CommunicationsLauncher
             createLauncherWithPosition();
             mLauncher->show();
-            // USE LOADLAYOUT-FUNCTION WHEN THE LATCHED GRAPHICS IS IN THE PLATFORM
-            //loadLayout(latchedFrameName, latchedTextColor);
 
             mLauncherRect = mLauncher->boundingRect();
             qDebug() << "after exec rect() " << mLauncherRect;
@@ -528,9 +544,10 @@
         for (int i=0; i<details.count(); i++)
         {
             if (details.at(i).imageUrl().isValid())
-            {
-				delete mAvatar;				
-				mAvatar = new QContactAvatar(details.at(i));
+            {			
+            	    					
+				mAvatar.reset( new QContactAvatar(details.at(i)));
+				//mCleanupHandler.add(mAvatar);
 				avatarFile = mAvatar->imageUrl().toString();  //,,remove this once tn is working
 
 				mThumbnailInProgress = true;
@@ -576,6 +593,7 @@
     }    
     qDebug() << "createContactManager() backend " << sBackend;
     mContactManager = new QContactManager(sBackend);
+    mCleanupHandler.add(mContactManager);
     if (mContactManager->error()) {
         qDebug() << "cm can't connect to backend " << sBackend;
     } else { // connect contact change observation
@@ -690,19 +708,15 @@
     qDebug() << "- launchSingleContactSelecting() starts";  //,,
     mContactLocalId = unUsedContactId;
     
-    /* TODO! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */                                      
-    mContactSelectRequest = mAppManager->create(
-        "com.nokia.services.phonebookservices",
-        "Fetch", 
-        "Dofetch(QString,QString,QString,QString)", 
-        false);   
+    mContactSelectRequest = mAppManager->create(XQI_CONTACTS_FETCH,
+                                                XQOP_CONTACTS_FETCH_SINGLE,
+                                                false);
+    mCleanupHandler.add(mContactSelectRequest);
     connect(mContactSelectRequest, SIGNAL(requestOk(QVariant)),
             this, SLOT(onContactSelectCompleted(QVariant)));  
     QList<QVariant> args;
     args << hbTrId("txt_friend_widget_title_select_contact");
     args << KCntActionAll;
-    args << KCntFilterDisplayAll;
-    args << KCntSingleSelectionMode;
     mContactSelectRequest->setArguments(args);
     
     qDebug() << "---- setArgs done ---------------------"; //,,28.5.          
@@ -800,15 +814,18 @@
 
             mAvatarIconItem->deleteLater();
             mContactNameLabel->deleteLater();
-            mAppManager->deleteLater();
-            mLauncher->deleteLater();
+            
             mContactLocalId = unUsedContactId;
-            delete mAvatar;
+            
             mContactHasAvatarDetail = false;
-            mContactManager->deleteLater();
-            mThumbnailManager->deleteLater();
+            
             
-            emit finished();
+            if (!mLauncher->isPendingRequest()){
+            	emit finished();
+            }
+            else {
+            	mPendingExit = true;
+            }
             break;
         }
     }
@@ -862,10 +879,10 @@
 void ContactWidgetHs::loadLayout(const QString frameName, const QString textColor)
 {
     mWidgetFrameDrawer->setFrameGraphicsName(frameName);
-    mWidgetFrameDrawer->themeChanged();
+//    mWidgetFrameDrawer->themeChanged();
     
     mShareFrameDrawer->setFrameGraphicsName(frameName);
-    mShareFrameDrawer->themeChanged();
+//    mShareFrameDrawer->themeChanged();
     
     QColor color = HbColorScheme::color(textColor);
     mContactNameLabel->setTextColor(color);
--- a/contactwidgethsplugin/contactwidgethsplugin.pro	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/contactwidgethsplugin.pro	Fri Sep 17 08:27:32 2010 +0300
@@ -57,9 +57,22 @@
     # xml files for emulator, sisx and hw rom
     BLD_INF_RULES.prj_exports += "./resource/contactwidgethsplugin.xml z:$$PLUGIN_SUBDIR/contactwidgethsplugin.xml"
 
+	BLD_INF_RULES.prj_exports += "./resource/qtg_large_friend.svg z:$$PLUGIN_SUBDIR/qtg_large_friend.svg"
+
     # copy iby file
     BLD_INF_RULES.prj_exports += "./rom/contactwidgeths.iby CORE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths.iby)"
     BLD_INF_RULES.prj_exports += "./rom/contactwidgeths_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(contactwidgeths_resources.iby)"
+    
+    
+    contactwidgethsplugin_buildstubsis_extension = \
+        "$${LITERAL_HASH}ifdef MARM" \
+        "    START EXTENSION app-services/buildstubsis" \
+        "    OPTION SRCDIR ." \
+        "    OPTION SISNAME contactwidgethsplugin_stub" \
+        "    END" \
+        "$${LITERAL_HASH}endif" 
+        
+    BLD_INF_RULES.prj_extensions += contactwidgethsplugin_buildstubsis_extension
 }
 
 symbian {
@@ -67,6 +80,21 @@
     ICON = qtg_large_friend.svg
     # themable icon for application library
     SKINICON = qtg_large_friend
-}
+
+    DESTDIR = /private/20022F35/import/widgetregistry/2002C353
+    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 
+    # plugins.path = $${DESTDIR}
+    # plugins.sources = $${TARGET}.dll 
+    
+    widgetResources.path = $${DESTDIR}
+    widgetResources.sources += resource/$${TARGET}.xml    
+    widgetResources.sources += resource/$${TARGET}.manifest
+    widgetResources.sources += resource/qtg_large_friend.svg
+    widgetResources.sources += resource/qtg_graf_hswidget_preview_contact.svg
+    # widgetResources.sources += resource/$${TARGET}.svg
+        
+    DEPLOYMENT += plugins \
+                  widgetResources
+}
 include(contactwidgethsplugin.pri)
--- a/contactwidgethsplugin/resource/contactwidgethsplugin.manifest	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/resource/contactwidgethsplugin.manifest	Fri Sep 17 08:27:32 2010 +0300
@@ -3,7 +3,8 @@
     <uri>contactwidgethsplugin</uri>
     <title>txt_long_caption_friend</title>
     <description>txt_friend_widget_dblist_friend_widget_val_quickly</description>
-    <icon>qtg_large_friend</icon>
+    <icon>qtg_large_friend.svg</icon>
+    <previewimage>qtg_graf_hswidget_preview_contact.svg</previewimage>
     <hidden>false</hidden>
     <servicexml>contactwidgethsplugin.xml</servicexml>
     <translationfile>contactwidgethsplugin</translationfile>
--- a/contactwidgethsplugin/rom/contactwidgeths.iby	Thu Sep 02 20:16:15 2010 +0300
+++ b/contactwidgethsplugin/rom/contactwidgeths.iby	Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,7 @@
 data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml         private\20022f35\import\widgetregistry\2002C353\contactwidgethsplugin.xml
 
 data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg              private\20022f35\import\widgetregistry\2002C353\qtg_large_friend.svg
+data=ZPRIVATE\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg private\20022f35\import\widgetregistry\2002C353\qtg_graf_hswidget_preview_contact.svg 
 
-data=DATAZ_\APP_RESOURCE_DIR\contactwidgethsplugin.rsc                                  APP_RESOURCE_DIR\contactwidgethsplugin.rsc
-
+data=ZSYSTEM\Install\contactwidgethsplugin_stub.sis \system\install\contactwidgethsplugin_stub.sis
 #endif //__CONTACTWIDGETHSPLUGIN_IBY__
--- a/inc/cntdebug.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/inc/cntdebug.h	Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
 #include <QtGlobal> // qDebug()
 
 // #define TRACK_MEMORY_LEAKS
-#define TRACES
+// #define TRACES
 // #define TRACE2FILE
 
 /*!
--- a/package_definition.xml	Thu Sep 02 20:16:15 2010 +0300
+++ b/package_definition.xml	Fri Sep 17 08:27:32 2010 +0300
@@ -1,26 +1,93 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="contacts" name="Contacts Apps" levels="engine support services ui">
-    <collection id="phonebookengines" name="Phonebook Engines" level="engine">
-      <component id="contactsmodel" name="Contacts Model" introduced="ER5" purpose="optional">
+<SystemDefinition schema="3.0.0" xmlns:qt="http://www.nokia.com/qt">
+ <package id="contacts" name="Contacts Apps" levels="engine support services plugin ui">
+  <collection id="contacts_plat" name="Contacts Apps Platform Interfaces" level="ui">
+	<!-- none of these APIs are built here. Are they on the way in,  way out or just built elsewhere?-->
+   <component id="contacts_services_api" name="Contacts Services API" class="api" filter="s60"  introduced="^4">
+    <unit base="contacts_plat/contacts_services_api"/>
+   </component>
+   <component id="contacts_ui_api" name="Contacts UI API" class="api" filter="s60"  introduced="^4">
+    <unit base="contacts_plat/contacts_ui_api"/>
+   </component>
+   <component id="contacts_ui_extensions_api" name="Contacts UI Extensions API" class="api" filter="s60" introduced="^4">
+    <unit base="contacts_plat/contacts_ui_extensions_api"/>
+   </component>
+   <component id="presence_cache_api" name="Presence Cache API" class="api" filter="s60">	
+    <meta rel="Api" href="contacts_plat/presence_cache_api/presence_cache_api.metaxml"/>
+    <unit base="contacts_plat/presence_cache_api"/>
+   </component>
+  </collection>
+  <collection id="phonebookui" name="Phonebook UI" level="ui">
+   <component id="cnthistorymodel" filter="s60" name="Contacts History Model" introduced="^4">
+    <!--<unit bldFile="phonebookui/cnthistorymodel" qt:proFile="cnthistorymodel.pro"/> -->
+   </component>
+   <component id="pbkcommonui" filter="s60" name="Phonebook Common UI" introduced="^4">
+    <!--<unit bldFile="phonebookui/pbkcommonui" qt:proFile="pbkcommonui.pro"/> -->
+   </component>
+   <component id="phonebookapp" filter="s60" name="Phonebook Application" introduced="^4">
+    <!--<unit bldFile="phonebookui/phonebookapp" qt:proFile="phonebookapp.pro"/> -->
+   </component>
+   <component id="phonebookservices" filter="s60" name="Phonebook Services" introduced="^4">
+    <!--<unit bldFile="phonebookui/phonebookservices" qt:proFile="phonebookservices.pro"/> -->
+   </component>
+   <component id="phonebookui_build" filter="s60" name="Phonebook UI Build" introduced="^4">
+    <!-- break up into components -->
+    <unit bldFile="phonebookui" qt:proFile="phonebookui.pro"/>
+   </component>
+  </collection>
+  <collection id="phonebookengines_old" name="Old Phonebook Engines" level="engine">
+   <component id="contactsmodel" name="Contacts Model" introduced="ER5" purpose="optional">
         <unit version="2" bldFile="phonebookengines_old/contactsmodel/groupsql" mrp="phonebookengines_old/contactsmodel/groupsql/app-engines_cntmodel.mrp"/>
-      </component>
-    </collection>
-    <collection id="pimprotocols" name="PIM Protocols" level="services">
-      <component id="phonebooksync" name="Phonebook Sync" purpose="optional" class="plugin">
-        <unit bldFile="pimprotocols/phonebooksync/group" mrp="pimprotocols/phonebooksync/group/telephony_phbksync.mrp"/>
-      </component>
-      <component id="mtpcontactdp" filter="s60" name="Media Transport Protocol contact Data Provider" introduced="9.2" purpose="optional">
-        <unit bldFile="pimprotocols/mtpcontactdp/group" mrp="pimprotocols/mtpcontactdp/group/mtp_contactdp.mrp"/>
-      </component>
-      <component id="pbap" filter="s60" name="Bluetooth PBAP" introduced="9.2" purpose="optional">
-        <unit bldFile="pimprotocols/pbap/group" mrp="pimprotocols/pbap/group/bluetooth_accesshost.mrp"/>
-      </component>
-    </collection>
-    <collection id="contacts_info" name="Contacts Apps Info" level="ui">
-      <component id="contacts_metadata" name="Contacts Apps Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="contacts_info/contacts_metadata/contacts_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
+   </component>
+  </collection>
+  <collection id="phonebookengines" name="Phonebook Engines" level="engine">
+   <component id="cntfindplugin" filter="s60" name="Contacts Find Plugin" class="plugin" introduced="^2">
+    <unit bldFile="phonebookengines/cntfindplugin" qt:proFile="cntfindplugin.pro"/>
+   </component>
+   <component id="cntsortplugin" filter="s60" name="Contacts Sort Plugin" class="plugin" introduced="^2">
+    <unit bldFile="phonebookengines/cntsortplugin" qt:proFile="cntsortplugin.pro"/>
+   </component>
+   <component id="qtcontactsmobility" filter="s60" name="Qt Contacts Mobility" class="plugin" introduced="^4">
+	<!-- need to move to this actual dir rather than including something from another collection -->
+    <!-- <unit bldFile="qtcontactsmobility" qt:proFile="qtcontactsmobility.pro"/> -->
+   </component>
+   <component id="cntlistmodel" filter="s60" name="Contact List Model" introduced="^4">
+    <unit bldFile="phonebookengines/cntlistmodel" qt:proFile="cntlistmodel.pro"/>
+   </component>
+   <component id="cntactions" filter="s60" name="Contacts Actions" introduced="^4">
+    <unit bldFile="phonebookengines/cntactions" qt:proFile="cntactions.pro"/>
+   </component>
+   <component id="cntmaptileservice" filter="s60" name="Contacts Map Tile Service" introduced="^4">
+    <unit bldFile="phonebookengines/cntmaptileservice" qt:proFile="cntmaptileservice.pro"/>
+   </component>
+   <component id="cntsimutility" filter="s60" name="Contacts SIM Utility" introduced="^4">
+    <unit bldFile="phonebookengines/cntsimutility" qt:proFile="cntsimutility.pro"/>
+   </component>
+   <component id="cntimageutility" name="Contacts Image Utility" filter="s60" introduced="^4">
+      <unit bldFile="phonebookengines/cntimageutility" qt:proFile="cntimageutility.pro"/>
+   </component>
+  </collection>
+  <collection id="pimprotocols" name="PIM Protocols" level="services">
+   <component id="phonebooksync" name="Phonebook Sync" purpose="optional" class="plugin">
+    <unit bldFile="pimprotocols/phonebooksync/group" mrp="pimprotocols/phonebooksync/group/telephony_phbksync.mrp"/>
+   </component>
+   <component id="pbap" filter="s60" name="Bluetooth PBAP" introduced="9.2" purpose="optional">
+    <unit bldFile="pimprotocols/pbap/group" mrp="pimprotocols/pbap/group/bluetooth_accesshost.mrp"/>
+   </component>
+  </collection>
+  <collection id="presencecache" name="Presence Cache" level="support">
+   <component id="presencecachesymbian" filter="s60" name="Presence Cache Symbian" introduced="^4">
+    <unit bldFile="presencecache/presencecachesymbian" qt:proFile="presencecachesymbian.pro"/>
+   </component>
+   <component id="presencecacheqt" filter="s60" name="Presence Cache Qt" introduced="^4">
+    <unit bldFile="presencecache/presencecacheqt" qt:proFile="presencecacheqt.pro"/>
+   </component>
+  </collection>
+  <collection id="contactwidgethsplugin" name="Contact Widget Homescreen Plugin" level="plugin">
+	<!-- collection is really a component, move down a directory -->
+   <component id="contactwidgethsplugin_build" name="Contact Widget Homescreen Plugin Build" introduced="^4" filter="s60">
+      <unit bldFile="contactwidgethsplugin" qt:proFile="contactwidgethsplugin.pro"/>
+   </component>
+  </collection>
+ </package>
 </SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="app"/>
--- a/phonebookengines/cntactions/src/cntaction.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntactions/src/cntaction.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -160,28 +160,35 @@
 //common code to perform a call, videocall action
 void CntAction::performNumberAction(const QString &interface, const QString &operation)
 {
+    QVariantList args;
     QVariant retValue;
     
-    // XQApplicationManager is not supported by PhoneUI to initiate calls,
-    // only old approarch using XQServiceRequest can be used. 
-    XQServiceRequest snd(interface, operation); //sync request
+    delete m_request;
+    m_request = NULL;
+    m_request = m_AppManager.create(interface, operation, false); // not embedded
+    if (!m_request) {
+        emitResult(GeneralError, retValue);
+        return;
+    }
 
     //QContactType == TypeGroup
     if (QContactType::TypeGroup == m_contact.type()) {
         QContactPhoneNumber conferenceCall = m_contact.detail<QContactPhoneNumber>();
-        
-        snd << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel();
-        snd.send(retValue);
-        emitResult(snd.latestError(), retValue);
+        args << conferenceCall.number() << m_contact.localId() << m_contact.displayLabel();
+        m_request->setArguments(args);
+        m_request->setSynchronous(true);
+        m_request->send(retValue);
+        emitResult(m_request->lastError(), retValue);
     }
     //QContactType == TypeContact
     //detail exist use it
     else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) {
 		const QContactPhoneNumber &phoneNumber = static_cast<const QContactPhoneNumber &>(m_detail);
-		
-        snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
-        snd.send(retValue);
-        emitResult(snd.latestError(), retValue);
+		args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
+		m_request->setArguments(args);
+		m_request->setSynchronous(true);
+        m_request->send(retValue);
+        emitResult(m_request->lastError(), retValue);
 	}
     //QContactType == TypeContact
     //if no detail, pick preferred
@@ -200,9 +207,11 @@
 			phoneNumber = static_cast<QContactPhoneNumber>(detail);
 		}
 		
-        snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
-        snd.send(retValue);
-        emitResult(snd.latestError(), retValue);
+	    args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel();
+	    m_request->setArguments(args);
+	    m_request->setSynchronous(true);
+	    m_request->send(retValue);
+	    emitResult(m_request->lastError(), retValue);
 	}
 	//else return an error
 	else {
--- a/phonebookengines/cntactions/src/cntmessageaction.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntactions/src/cntmessageaction.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -76,7 +76,7 @@
     if (QContactType::TypeGroup == m_contact.type()) {
         QString interface("com.nokia.symbian.IMessageSend");
         QString operation("send(QVariantMap,QString)");
-        m_request = m_AppManager.create(interface, operation, false); // not embedded
+        m_request = m_AppManager.create(interface, operation, true); // embedded
         if (m_request==NULL) {
             emitResult(GeneralError, retValue);
             return;
@@ -104,7 +104,7 @@
     else if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) {
         QString interface("com.nokia.symbian.IMessageSend");
         QString operation("send(QString,qint32,QString)");
-        m_request = m_AppManager.create(interface, operation, false); // not embedded
+        m_request = m_AppManager.create(interface, operation, true); // embedded
         if (m_request==NULL) {
             emitResult(GeneralError, retValue);
             return;
--- a/phonebookengines/cntlistmodel/inc/cntcache_p.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/inc/cntcache_p.h	Fri Sep 17 08:27:32 2010 +0300
@@ -127,7 +127,7 @@
     ThumbnailManager* mThumbnailManager;    // for fetching icons
 
     // maps info providers to their responsibilities
-    QMap<CntInfoProvider*, ContactInfoFields> mDataProviders;
+    QMap<CntInfoProvider*, ContactInfoFields> mInfoProviders;
 
     QMutex mJobMutex;                       // guards access to the job lists
     bool mStarted;                          // true when thread has been started
--- a/phonebookengines/cntlistmodel/src/cntcache.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/src/cntcache.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -92,8 +92,6 @@
     qDeleteAll(mIconCache);
     mIconCache.clear();
 
-    mInstance = NULL;
-
     CNT_EXIT
 }
 
@@ -651,6 +649,7 @@
 {
 	CNT_ENTRY
 
+    mInstance = NULL;
     deleteLater();
 
 	CNT_EXIT
--- a/phonebookengines/cntlistmodel/src/cntcache_p.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/src/cntcache_p.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -64,8 +64,8 @@
     CNT_ENTRY
 
     // create static provider plugins
-    mDataProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields);
-    mDataProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field);
+    mInfoProviders.insert(new CntDefaultInfoProvider(), ContactInfoAllFields);
+    mInfoProviders.insert(new CntPresenceInfoProvider(), ContactInfoIcon2Field);
 
     // load dynamic provider plugins
     QDir pluginsDir(CNT_INFO_PROVIDER_EXTENSION_PLUGIN_DIRECTORY);
@@ -80,13 +80,13 @@
             if (factory)
             {
                 CntInfoProvider *provider = factory->infoProvider();
-                mDataProviders.insert(provider, provider->supportedFields());
+                mInfoProviders.insert(provider, provider->supportedFields());
             }
         }
     }
     
     // connect the providers
-    QMapIterator<CntInfoProvider*, ContactInfoFields> i(mDataProviders);
+    QMapIterator<CntInfoProvider*, ContactInfoFields> i(mInfoProviders);
     while (i.hasNext()) {
         i.next();
         connect(static_cast<CntInfoProvider*>(i.key()),
@@ -130,8 +130,8 @@
     delete mThumbnailManager;
     mThumbnailManager = NULL;
 
-    qDeleteAll(mDataProviders.keys());
-    mDataProviders.clear();
+    qDeleteAll(mInfoProviders.keys());
+    mInfoProviders.clear();
 
     mJobMutex.unlock();
 
@@ -339,7 +339,7 @@
 			QContact contact = mContactManager->contact(contactId, restrictions);
 
             // request contact info from providers
-            QMapIterator<CntInfoProvider*, ContactInfoFields> i(mDataProviders);
+            QMapIterator<CntInfoProvider*, ContactInfoFields> i(mInfoProviders);
             while (i.hasNext()) {
                 i.next();
                 if (i.value() != 0) {
@@ -388,9 +388,9 @@
     // 1) the sender is in the list of providers
     // 2) exactly one field bit is set in parameter 'field'
     // 3) the field bit has been assigned to this provider
-    if (mDataProviders.contains(sender)
+    if (mInfoProviders.contains(sender)
         && ((field & (field - 1)) == 0)
-        && ((field & mDataProviders.value(sender)) != 0)) {
+        && ((field & mInfoProviders.value(sender)) != 0)) {
         emit infoFieldUpdated(contactId, field, text);
     }
 
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/inc/ut_cntlistmodel.h	Fri Sep 17 08:27:32 2010 +0300
@@ -34,6 +34,9 @@
 
 private:
     void contactReady(int start, int end);
+    QContact createContact(const QString& firstName, const QString& lastName);
+    void addGroupMember(const QContact& group, const QContact& contact);
+    void removeGroupMember(const QContact& group, const QContact& contact);
 
 private slots:
 	void initTestCase();
@@ -43,7 +46,9 @@
 	void rowCount();
 	
 	void contact();
+	void contactId();
 	void indexOfContact();
+	void indexOfContactId();
 	void contactManager();
 	void setFilter();
 	void myCard();
@@ -55,6 +60,7 @@
     void handleChanged();
     void handleRemoved();
 	void handleMyCardChanged();
+    void handleRelationships();
 	
 	void cleanupTestCase();
 	
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/main.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -65,6 +65,7 @@
         printf("Press any key...\n");
         getchar(); 
     }
+
     return 0;   
 }
 
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntcache.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -21,6 +21,7 @@
 
 void TestCntCache::initTestCase()
 {
+    // get contact manager
     mContactManager = new QContactManager("symbian");
 
     // start with a clean database
@@ -65,15 +66,11 @@
     QVERIFY(cache->mContactManager != NULL);
     QVERIFY(worker->mContactManager != NULL);
     QVERIFY(worker->mThumbnailManager != NULL);
-    QVERIFY(!worker->mStarted);
-    QVERIFY(!worker->mProcessingJobs);
-    QVERIFY(!worker->mPostponeJobs);
-    QVERIFY(worker->mDataProviders.count() >= 1);
+    QVERIFY(worker->mInfoProviders.count() >= 1);
 
     // test deletion
     cache->onShutdown();
-    QVERIFY(cache == NULL);
-    QVERIFY(worker == NULL);
+    QVERIFY(CntCache::mInstance == NULL);
 }
 
 /*
@@ -158,7 +155,7 @@
     }
     QVERIFY(cacheItemCount == 2*2); // two images, both used by two contacts
 
-    delete cache;
+    cache->onShutdown();
 }
 
 /*
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdefaultinfoprovider.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,8 @@
     fields = ContactInfoIcon1Field | ContactInfoTextField;
     
     mCntDefaultInfoProvider->requestInfo(c, fields);
-    QCOMPARE(spy.count(), 0);
+    QCOMPARE(spy.count(), 2);
+    spy.clear();
     
     QContactPhoneNumber number;
     number.setNumber("1234567");
@@ -61,20 +62,26 @@
     c.saveDetail(&number);
     
     mCntDefaultInfoProvider->requestInfo(c, fields);
-    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.count(), 2);
     spy.clear();
     
     c.setPreferredDetail("call", number);
+
+    QContactPhoneNumber number2;
+    number2.setNumber("7654321");
+    number2.setContexts(QContactDetail::ContextWork);
+    number2.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+    c.saveDetail(&number2);
     
     mCntDefaultInfoProvider->requestInfo(c, fields);
-    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.count(), 2);
     spy.clear();
     
     QContactAvatar avatar;
     c.saveDetail(&avatar);
     
     mCntDefaultInfoProvider->requestInfo(c, fields);
-    QCOMPARE(spy.count(), 1);
+    QCOMPARE(spy.count(), 2);
     spy.clear();
     
     avatar.setImageUrl(QUrl("dummyavatar"));
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntdisplaytextformatter.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -21,7 +21,7 @@
 
 void TestCntDisplayTextFormatter::testFormatter()
 {
-    QColor color = HbColorScheme::color("qtc_lineedit_selected ");
+    QColor color = HbColorScheme::color("qtc_lineedit_selected");
     QColor bg = HbColorScheme::color("qtc_lineedit_marker_normal");
     QString foo = QString("<span style=\"background-color:%1;color:%2\">f</span>oo").arg(bg.name().toUpper()).arg(color.name().toUpper());
     
--- a/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntlistmodel/tsrc/ut_cntlistmodel/src/ut_cntlistmodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -234,6 +234,14 @@
     QVERIFY(!c.isEmpty());
 }
 
+void TestCntListModel::contactId()
+{
+    QModelIndex modelIndex = mCntModel->index(1, 0);
+    QContact c = mCntModel->contact(modelIndex);
+    
+    QVERIFY(mCntModel->contactId(modelIndex) == c.localId());
+}
+
 void TestCntListModel::indexOfContact()
 {
     QModelIndex modelIndex = mCntModel->index(1, 0);
@@ -242,6 +250,14 @@
     QVERIFY(mCntModel->indexOfContact(c) == modelIndex);
 }
 
+void TestCntListModel::indexOfContactId()
+{
+    QModelIndex modelIndex = mCntModel->index(1, 0);
+    QContact c = mCntModel->contact(modelIndex);
+    
+    QVERIFY(mCntModel->indexOfContactId(c.localId()) == modelIndex);
+}
+
 void TestCntListModel::contactManager()
 {
     QVERIFY(mManager == &(mCntModel->contactManager()));
@@ -278,7 +294,7 @@
     QModelIndex modelIndex = mCntModel->indexOfContact(c);
     QVERIFY(modelIndex.row() < 0);
     QVERIFY(mCntModel->d->m_filter == unionFilter);
-    QVERIFY(mCntModel->d->m_sortOrders.count() == 3);
+    QVERIFY(mCntModel->d->m_sortOrders.count() == 2);
 }
 
 void TestCntListModel::myCard()
@@ -455,6 +471,106 @@
     QVERIFY(mCntModel->d->m_myCardId == c.localId());
 }
 
+void TestCntListModel::handleRelationships()
+{
+    // remove all contacts
+    QList<QContactLocalId> ids = mManager->contactIds();
+    QMap<int, QContactManager::Error> errorMap;
+    mManager->removeContacts(ids,&errorMap);
+    QTest::qWait(1000);
+
+    // create group "myGroup"
+    QContact group;
+    group.setType(QContactType::TypeGroup);
+    QContactName groupName;
+    groupName.setCustomLabel("myGroup");
+    group.saveDetail(&groupName);
+    mManager->saveContact(&group);
+
+    // create a relationship filter
+    QContactRelationshipFilter groupFilter;
+    groupFilter.setRelationshipType(QContactRelationship::HasMember);
+    groupFilter.setRelatedContactRole(QContactRelationship::First);
+    groupFilter.setRelatedContactId(group.id()); 
+
+    // create new listmodel
+    CntListModel* groupListModel = new CntListModel(mManager, groupFilter, false);
+    QVERIFY(groupListModel != NULL);
+
+    QCOMPARE(groupListModel->rowCount(), 0);
+
+    // create contacts
+    QList<QContact> contacts;
+    contacts << createContact("Alfa", "One");
+    contacts << createContact("Beta", "Two");
+    contacts << createContact("Gamma", "Three");
+    QTest::qWait(1000);
+    QCOMPARE(groupListModel->rowCount(), 0);
+
+    // add contacts to group
+    foreach (QContact contact, contacts) {
+        addGroupMember(group, contact);
+    }
+    QTest::qWait(1000);
+    QCOMPARE(groupListModel->rowCount(), 3);
+
+    // remove contact from group
+    removeGroupMember(group, contacts.at(1));
+    QTest::qWait(1000);
+    QCOMPARE(groupListModel->rowCount(), 2);
+
+    // add and remove empty list
+    QList<QContactLocalId> emptyList;
+    emptyList << group.localId();
+    mCntModel->handleAddedRelationship(emptyList);
+    QCOMPARE(groupListModel->rowCount(), 2);
+    mCntModel->handleRemovedRelationship(emptyList);
+    QCOMPARE(groupListModel->rowCount(), 2);
+
+    // verify that contact on second row is "Gamma Three" (comes after "Alfa One"
+    // regardless of sorting type and Beta Two was removed)
+    QVERIFY(groupListModel->indexOfContact(contacts.at(0)).row() == 0);
+    QVERIFY(groupListModel->indexOfContact(contacts.at(1)).row() == -1);
+    QVERIFY(groupListModel->indexOfContact(contacts.at(2)).row() == 1);
+
+    // create a contact and make sure list model count does not change
+    createContact("Delta", "Four");
+    QTest::qWait(1000);
+    QCOMPARE(groupListModel->rowCount(), 2);
+    
+    delete groupListModel;
+}
+
+QContact TestCntListModel::createContact(const QString& firstName, const QString& lastName)
+{
+    QContact contact;
+    QContactName name;
+    name.setFirstName(firstName);
+    name.setLastName(lastName);
+    contact.saveDetail(&name);
+    mManager->saveContact(&contact);
+
+    return contact;
+}
+
+void TestCntListModel::addGroupMember(const QContact& group, const QContact& contact)
+{
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(group.id());
+    relationship.setSecond(contact.id());
+    mManager->saveRelationship(&relationship);
+}
+
+void TestCntListModel::removeGroupMember(const QContact& group, const QContact& contact)
+{
+    QContactRelationship relationship;
+    relationship.setRelationshipType(QContactRelationship::HasMember);
+    relationship.setFirst(group.id());
+    relationship.setSecond(contact.id());
+    mManager->removeRelationship(relationship);
+}
+
 void TestCntListModel::cleanupTestCase()
 {
     mCntModel->d->m_cache->onShutdown();
--- a/phonebookengines/cntsimutility/inc/cntsimutility.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntsimutility/inc/cntsimutility.h	Fri Sep 17 08:27:32 2010 +0300
@@ -89,12 +89,14 @@
         bool AdnStorePresent;
         bool SdnStorePresent;
         bool FdnStorePresent;
+        bool OnStorePresent;
         
         AvailableStores() {
             SimPresent = false;
             AdnStorePresent = false;
             SdnStorePresent = false;
             FdnStorePresent = false;
+            OnStorePresent = false;
         };
     };
     
--- a/phonebookengines/cntsimutility/src/cntsimutility.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookengines/cntsimutility/src/cntsimutility.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -450,6 +450,13 @@
         else {
             availableStores->FdnStorePresent = false;
         }
+        
+        if (m_serviceTable.iServices17To24 & RMobilePhone::KUstMSISDN) {
+            availableStores->OnStorePresent = true;
+        }
+        else {
+            availableStores->OnStorePresent = false;
+        }
     }
     else if (m_serviceTableType == RMobilePhone::ESIMServiceTable) {
         //ADN store is always present if SIM card is inserted
@@ -468,6 +475,13 @@
         else {
             availableStores->FdnStorePresent = false;
         }
+        
+        if (m_serviceTable.iServices9To16 & RMobilePhone::KSstMSISDN) {
+            availableStores->OnStorePresent = true;
+        }
+        else {
+            availableStores->OnStorePresent = false;
+        }
     }
 }
     
--- a/phonebookui/bwins/cnthistorymodelu.def	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/bwins/cnthistorymodelu.def	Fri Sep 17 08:27:32 2010 +0300
@@ -6,12 +6,12 @@
 	?doBeginInsertRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 5 NONAME ; void CntHistoryModel::doBeginInsertRows(class QModelIndex const &, int, int)
 	??1CntHistoryModel@@UAE@XZ @ 6 NONAME ; CntHistoryModel::~CntHistoryModel(void)
 	?doEndRemoveRows@CntHistoryModel@@AAEXXZ @ 7 NONAME ; void CntHistoryModel::doEndRemoveRows(void)
-	?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 8 NONAME ; void * CntHistoryModel::qt_metacast(char const *)
-	?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 9 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const
-	?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 10 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int)
-	?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject
-	?sort@CntHistoryModel@@UAEXHW4SortOrder@Qt@@@Z @ 13 NONAME ; void CntHistoryModel::sort(int, enum Qt::SortOrder)
+	?doBeginResetModel@CntHistoryModel@@AAEXXZ @ 8 NONAME ; void CntHistoryModel::doBeginResetModel(void)
+	?qt_metacast@CntHistoryModel@@UAEPAXPBD@Z @ 9 NONAME ; void * CntHistoryModel::qt_metacast(char const *)
+	?metaObject@CntHistoryModel@@UBEPBUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const * CntHistoryModel::metaObject(void) const
+	?doBeginRemoveRows@CntHistoryModel@@AAEXABVQModelIndex@@HH@Z @ 11 NONAME ; void CntHistoryModel::doBeginRemoveRows(class QModelIndex const &, int, int)
+	?qt_metacall@CntHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int CntHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@CntHistoryModel@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const CntHistoryModel::staticMetaObject
 	?trUtf8@CntHistoryModel@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString CntHistoryModel::trUtf8(char const *, char const *)
 	?d_func@CntHistoryModel@@ABEPBVCntHistoryModelPrivate@@XZ @ 15 NONAME ; class CntHistoryModelPrivate const * CntHistoryModel::d_func(void) const
 	?tr@CntHistoryModel@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString CntHistoryModel::tr(char const *, char const *, int)
@@ -23,5 +23,6 @@
 	?markAllAsSeen@CntHistoryModel@@QAEXXZ @ 22 NONAME ; void CntHistoryModel::markAllAsSeen(void)
 	??0CntHistoryModel@@QAE@IPAVQContactManager@QtMobility@@PAVQObject@@@Z @ 23 NONAME ; CntHistoryModel::CntHistoryModel(unsigned int, class QtMobility::QContactManager *, class QObject *)
 	?data@CntHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 24 NONAME ; class QVariant CntHistoryModel::data(class QModelIndex const &, int) const
-	??_ECntHistoryModel@@UAE@I@Z @ 25 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int)
+	?doEndResetModel@CntHistoryModel@@AAEXXZ @ 25 NONAME ; void CntHistoryModel::doEndResetModel(void)
+	??_ECntHistoryModel@@UAE@I@Z @ 26 NONAME ; CntHistoryModel::~CntHistoryModel(unsigned int)
 
--- a/phonebookui/cnthistorymodel/inc/cnthistorymodel.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/inc/cnthistorymodel.h	Fri Sep 17 08:27:32 2010 +0300
@@ -56,7 +56,6 @@
 public: // from QAbstractTableModel/QAbstractItemModel
     QVariant data(const QModelIndex& index, int role) const;
     int rowCount(const QModelIndex& parent = QModelIndex()) const;
-    void sort(int column = 0, Qt::SortOrder order = Qt::AscendingOrder);
 
 public:
     void clearHistory();
@@ -68,6 +67,8 @@
     void doEndInsertRows();
     void doBeginRemoveRows(const QModelIndex &parent, int first, int last);
     void doEndRemoveRows();
+    void doBeginResetModel();
+    void doEndResetModel();
     void doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
     
 private:
--- a/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/src/cnthistorymodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -17,6 +17,7 @@
 
 #include "cnthistorymodel_p.h"
 #include "cnthistorymodel.h"
+#include "cntdebug.h"
 
 /*!
  * Construct a new CntHistoryModel object to communicate 
@@ -32,14 +33,22 @@
     : QAbstractListModel(parent),
       d_ptr(new CntHistoryModelPrivate(contactId, manager))
 {
+    CNT_ENTRY
+    
     Q_D(CntHistoryModel);
     d->q_ptr = this;
+    
+    CNT_EXIT
 }
 
 CntHistoryModel::~CntHistoryModel()
 {
+    CNT_ENTRY
+    
     Q_D(CntHistoryModel);
     delete d;
+    
+    CNT_EXIT
 }
 
 /*!
@@ -69,26 +78,18 @@
 }
 
 /*!
- * Sort list items on the model.
- *
- * \param column Column to be sorted. It is not used.
- * \param order Order to sort the list items.
- */
-void CntHistoryModel::sort(int column, Qt::SortOrder order)
-{
-    Q_D(CntHistoryModel);
-    d->sort(column, order);
-}
-
-/*!
  * Clear history from the database. If the history cached
  * is specific to one contact, only that history is cleared.
  * 
  */
 void CntHistoryModel::clearHistory()
-{    
-    Q_D(CntHistoryModel);    
+{
+    CNT_ENTRY
+    
+    Q_D(CntHistoryModel);
     d->clearHistory();
+    
+    CNT_EXIT
 }
 
 /*!
@@ -97,43 +98,91 @@
  */
 void CntHistoryModel::markAllAsSeen()
 {
+    CNT_ENTRY
+    
     Q_D(CntHistoryModel);
     d->markAllAsSeen();
+    
+    CNT_EXIT
 }
 
 /*!
  * Sort items in the model and refresh the view
- * 
+ *
+ * \param order Order to sort the list items.
  */
 void CntHistoryModel::sortAndRefresh(Qt::SortOrder order)
 {
+    CNT_ENTRY_ARGS(order)
+    
     Q_D(CntHistoryModel);
+    
+    doBeginResetModel();
     d->sort(order);
-    beginInsertRows(QModelIndex(), 0, rowCount());
-    endInsertRows();
+    doEndResetModel();
+    
+    CNT_EXIT
 }
 
 void CntHistoryModel::doBeginInsertRows(const QModelIndex &parent, int first, int last)
 {
+    CNT_ENTRY_ARGS(parent << first << last)
+    
     beginInsertRows(parent, first, last);
+    
+    CNT_EXIT
 }
 
-void CntHistoryModel::doEndRemoveRows()
+void CntHistoryModel::doEndInsertRows()
 {
-    endRemoveRows();
+    CNT_ENTRY
+    
+    endInsertRows();
+    
+    CNT_EXIT
 }
 
 void CntHistoryModel::doBeginRemoveRows(const QModelIndex &parent, int first, int last)
 {
+    CNT_ENTRY_ARGS(parent << first << last)
+    
     beginRemoveRows(parent, first, last);
+    
+    CNT_EXIT
+}
+
+void CntHistoryModel::doEndRemoveRows()
+{
+    CNT_ENTRY
+    
+    endRemoveRows();
+    
+    CNT_EXIT
 }
 
-void CntHistoryModel::doEndInsertRows()
+void CntHistoryModel::doBeginResetModel()
 {
-    endInsertRows();
+    CNT_ENTRY
+    
+    beginResetModel();
+    
+    CNT_EXIT
+}
+
+void CntHistoryModel::doEndResetModel()
+{
+    CNT_ENTRY
+    
+    endResetModel();
+    
+    CNT_EXIT
 }
 
 void CntHistoryModel::doDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
 {
+    CNT_ENTRY_ARGS(topLeft << bottomRight)
+    
     emit dataChanged(topLeft, bottomRight);
+    
+    CNT_EXIT
 }
--- a/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/src/cnthistorymodel_p.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -89,12 +89,18 @@
       m_initLogs(false),
       m_extendedLocale(HbExtendedLocale::system())
 {
+    CNT_ENTRY
+    
     // Create the model structure and cache history data from the databases
     initializeModel();
+    
+    CNT_EXIT
 }
 
 CntHistoryModelPrivate::~CntHistoryModelPrivate()
 {
+    CNT_ENTRY
+    
     if (m_logsModel) {
         delete m_logsModel;
         m_logsModel = NULL;
@@ -107,6 +113,8 @@
         delete m_msgHistory;
         m_msgHistory = NULL;
     }
+    
+    CNT_EXIT
 }
 
 /*!
@@ -119,6 +127,7 @@
  */
 QVariant CntHistoryModelPrivate::data(const QModelIndex& index, int role) const
 {
+    CNT_ENTRY_ARGS(index << role)
     // Invalid index
     int row = index.row();
     
@@ -128,7 +137,7 @@
     HItemPointer p = m_List.at(row);
     if ( p.isNull() )
         return QVariant();
-    
+        
     switch( role )
     {       
         case Qt::DisplayRole:
@@ -160,6 +169,8 @@
  */
 QVariant CntHistoryModelPrivate::displayRoleData(const HistoryItem& item) const
 {
+    CNT_ENTRY
+    
     QStringList list;
     HbExtendedLocale locale = m_extendedLocale;
     
@@ -172,6 +183,8 @@
         list << item.title << item.message << locale.format(item.timeStamp.date(), r_qtn_date_usual);
     }
     
+    CNT_EXIT_ARGS(list)
+    
     return QVariant(list);
 }
 
@@ -183,6 +196,8 @@
  */
 QVariant CntHistoryModelPrivate::decorationRoleData(const HistoryItem& item) const
 {
+    CNT_ENTRY
+    
     // Messages
     if (item.flags & CntMessage)
         return QVariant(HbIcon(MESSAGE_ICON));
@@ -227,7 +242,7 @@
     int id(-1);
     if ( p.data()->flags & CntMessage )
         id = m_msgMap.key(p, -1);
-    
+
     if (id != -1)
         return QVariant(id);
     else
@@ -253,10 +268,14 @@
  */
 void CntHistoryModelPrivate::sort(int /*column*/, Qt::SortOrder order)
 {
+    CNT_ENTRY_ARGS(order)
+    
     if ( order == Qt::AscendingOrder )
         qStableSort(m_List.begin(), m_List.end(), lessThan);
     else
         qStableSort(m_List.begin(), m_List.end(), greaterThan);
+    
+    CNT_EXIT
 }
 
 /*!
@@ -266,11 +285,18 @@
  */
 void CntHistoryModelPrivate::clearHistory()
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
     if ( m_List.isEmpty() )
         return;
     
+    // Clear all data from the history model.
+    int count = rowCount();
+    
+    q->doBeginRemoveRows( QModelIndex(), 0, count );
+    
     // Call logs
     if ( !m_isMyCard && m_logsFilter )
         m_logsFilter->clearEvents();
@@ -281,15 +307,14 @@
     if (m_msgHistory)
         m_msgHistory->clearMessages( (int)m_contactId );
     
-    // Clear all data from the history model.
-    int count = rowCount();
-    
     m_List.clear();
     m_msgMap.clear();
     m_logsMap.clear();
     
-    q->doBeginRemoveRows( QModelIndex(), 0, count );
+    
     q->doEndRemoveRows();
+    
+    CNT_EXIT
 }
 
 /*!
@@ -298,12 +323,16 @@
  */
 void CntHistoryModelPrivate::markAllAsSeen()
 {
+    CNT_ENTRY
+    
     if ( m_isMarkedAsSeen )
         return;
     
     // Messages
     if (m_msgHistory->markRead( m_contactId ))
         m_isMarkedAsSeen = true;
+    
+    CNT_EXIT
 }
 
 /*!
@@ -313,12 +342,18 @@
  */
 void CntHistoryModelPrivate::initializeModel()
 {
+    CNT_ENTRY
+    
     initializeLogsModel();
     initializeMsgModel();
+    
+    CNT_EXIT
 }
 
 void CntHistoryModelPrivate::initializeMsgModel()
 {
+    CNT_ENTRY
+    
     if( m_isMyCard )
         return;
     
@@ -339,10 +374,14 @@
     
     // Initial fetch of all messages
     m->getMessages(m_contactId);
+    
+    CNT_EXIT
 }
 
 void CntHistoryModelPrivate::initializeLogsModel()
 {
+    CNT_ENTRY
+    
     //populate model with call events
     m_logsModel = new LogsModel(LogsModel::LogsFullModel);
     if (!m_isMyCard) {
@@ -377,6 +416,7 @@
                 this, SLOT(logsDataChanged(const QModelIndex &, const QModelIndex &)));
     connect(m_AbstractLogsModel, SIGNAL(modelReset()), this, SLOT(handleLogsReset()));
 
+    CNT_EXIT
 }
 
 /*!
@@ -386,7 +426,7 @@
  * \param item Conversation history item
  */
 void CntHistoryModelPrivate::readLogEvent(LogsEvent* event, HistoryItem& item)
-{    
+{
     QString bodyText;
     QString title;
     
@@ -435,9 +475,18 @@
  */
 void CntHistoryModelPrivate::logsRowsInserted(const QModelIndex& /*parent*/, int first, int last)
 {
+    CNT_ENTRY_ARGS(first << last)
+    
     Q_Q(CntHistoryModel);
     
-    int oldRowCount = rowCount();
+    // Check if this is the first time to receive events
+    if ( !m_initLogs ) {
+        q->doBeginResetModel();
+    }
+    else {
+        q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() + (last - first) );
+    }
+    
     QList<HItemPointer> l;
     
     for ( int i = first; i < m_AbstractLogsModel->rowCount() && i <= last; ++i ) {
@@ -456,12 +505,14 @@
     // and sort the entire list.
     if ( !m_initLogs ) {
         sort();
-        oldRowCount = 0;
         m_initLogs = true;
+        q->doEndResetModel();
+    }
+    else {
+        q->doEndInsertRows();
     }
     
-    q->doBeginInsertRows(QModelIndex(), oldRowCount, rowCount());
-    q->doEndInsertRows();
+    CNT_EXIT
 }
 
 /*!
@@ -473,6 +524,8 @@
  */
 void CntHistoryModelPrivate::logsRowsRemoved(const QModelIndex& /*parent*/, int first, int last)
 {
+    CNT_ENTRY_ARGS(first << last)
+    
     Q_Q(CntHistoryModel);
     
     QList< int > indices;
@@ -498,6 +551,8 @@
             q->doEndRemoveRows();
         }
     }
+    
+    CNT_EXIT
 }
 
 /*!
@@ -509,6 +564,8 @@
  */
 void CntHistoryModelPrivate::logsDataChanged(const QModelIndex& first, const QModelIndex& last)
 {
+    CNT_ENTRY_ARGS(first << last)
+    
     Q_Q(CntHistoryModel);
     
     int f = first.row();
@@ -537,16 +594,22 @@
         foreach( QList<int> l, batches )
             q->doDataChanged( q->index(l.first(), 0), q->index(l.last(), 0) );
     }
+    
+    CNT_EXIT
 }
 
 /*
- * Clear all call logs after receiving a reset model
- * signal from logs model
+ * Clear all call logs and refetches new call events after 
+ * receiving a reset model signal from logs model
  */
 void CntHistoryModelPrivate::handleLogsReset()
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
+    q->doBeginResetModel();
+    
     // Remove all call logs
     QList<HItemPointer> values = m_logsMap.values();
     foreach(HItemPointer p, values) {
@@ -569,8 +632,10 @@
     }
     
     sort();
-    q->doBeginInsertRows(QModelIndex(), 0, rowCount());
-    q->doEndInsertRows();
+
+    q->doEndResetModel();
+    
+    CNT_EXIT
 }
 
 /*!
@@ -592,6 +657,8 @@
  */
 QList< QList<int> > CntHistoryModelPrivate::findIndices( const QList< int >& indices )
 {
+    CNT_ENTRY_ARGS(indices)
+    
     QList< QList<int> > sequences;
     QList<int> currSequence;
     int prevIndex = indices.at(0) - 1;
@@ -616,6 +683,8 @@
         sequences.append( currSequence );
     }
     
+    CNT_EXIT_ARGS(sequences)
+    
     return sequences;
 }
 
@@ -627,6 +696,8 @@
  */
 void CntHistoryModelPrivate::readMsgEvent(MsgItem& event, HistoryItem& item)
 {
+    CNT_ENTRY
+    
     // Msg direction
     if ( event.direction() == MsgItem::MsgDirectionIncoming ) {
         item.flags |= CntIncoming;
@@ -657,6 +728,8 @@
     item.timeStamp = event.timeStamp().toLocalTime();
     
     LOG_ITEM(item);
+    
+    CNT_EXIT
 }
 
 /*!
@@ -668,8 +741,12 @@
  */
 void CntHistoryModelPrivate::messagesReady(QList<MsgItem>& msgs)
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
+    q->doBeginResetModel();
+    
     foreach( MsgItem m, msgs ) {
         // Create a new hst item
         HItemPointer item(new HistoryItem());
@@ -686,8 +763,9 @@
     
     sort();
     
-    q->doBeginInsertRows(QModelIndex(), 0, rowCount());
-    q->doEndInsertRows();
+    q->doEndResetModel();
+    
+    CNT_EXIT
 }
 
 /*!
@@ -698,9 +776,11 @@
  */
 void CntHistoryModelPrivate::messageAdded(MsgItem& msg)
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
-    int oldRowCount = rowCount();
+    q->doBeginInsertRows( QModelIndex(), rowCount(), rowCount() );
     
     // Create a new hst item
     HItemPointer item(new HistoryItem());
@@ -714,8 +794,9 @@
     // Append the hst item to our list
     m_List.append( item );
     
-    q->doBeginInsertRows( QModelIndex(), oldRowCount, rowCount() );
     q->doEndInsertRows();
+    
+    CNT_EXIT
 }
 
 /*!
@@ -726,6 +807,8 @@
  */
 void CntHistoryModelPrivate::messageChanged(MsgItem& msg)
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
     // Fetch the hst item that maps to this MsgItem
@@ -742,6 +825,8 @@
     int pIndex = m_List.indexOf( p );
     
     q->doDataChanged(q->index(pIndex, 0), q->index(pIndex, 0));
+    
+    CNT_EXIT
 }
 
 /*!
@@ -752,6 +837,8 @@
  */
 void CntHistoryModelPrivate::messageDeleted(MsgItem& msg)
 {
+    CNT_ENTRY
+    
     Q_Q(CntHistoryModel);
     
     // Fetch the hst item that maps to this MsgItem
@@ -765,8 +852,10 @@
     m_msgMap.remove( msg.id() );
     int index = m_List.indexOf( p );
     if ( index > -1 ) {
+        q->doBeginRemoveRows(QModelIndex(), index, index);
         m_List.removeAt( index );
-        q->doBeginRemoveRows(QModelIndex(), index, index);
         q->doEndRemoveRows();
     }
+    
+    CNT_EXIT
 }
--- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -39,7 +39,7 @@
 
 void TestCntHistoryModel::testLogsInsertions()
 {   
-    QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+    QSignalSpy spy( model, SIGNAL(modelReset()));
     model->d_ptr->logsRowsInserted(QModelIndex(), 0, 0);
     
     QVERIFY(model->rowCount() == 1);
@@ -86,7 +86,7 @@
     msgs.append(msg2);
     msgs.append(msg3);
     
-    QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+    QSignalSpy spy( model, SIGNAL(modelReset()));
     model->d_ptr->messagesReady(msgs);
     
     QVERIFY(model->rowCount() == 3);
@@ -223,6 +223,10 @@
     var = modelIndex.data(Qt::BackgroundRole);
     QVERIFY(var.type() > (QVariant::UserType - 1));
     
+    // ConversationRole
+    var = modelIndex.data(CntConverstaionIdRole);
+    QVERIFY(var.type() == QVariant::Int);
+    
     // Invalid role
     var = modelIndex.data(-10);
     QVERIFY(var.type() == QVariant::Invalid);
@@ -271,7 +275,7 @@
     } 
     
     // Sort ascending
-    QSignalSpy spy( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
+    QSignalSpy spy( model, SIGNAL(modelReset()));
     model->sortAndRefresh(Qt::AscendingOrder);
     
     QVERIFY(spy.count() == 1);    
@@ -282,7 +286,7 @@
     }
     
     // Sort descending
-    QSignalSpy spy1( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
+    QSignalSpy spy1( model, SIGNAL( modelReset()));
     model->sortAndRefresh(Qt::DescendingOrder);
     
     QVERIFY(spy1.count() == 1);    
@@ -307,6 +311,11 @@
     QSignalSpy spy1( model, SIGNAL( rowsRemoved(const QModelIndex &, int, int)));
     model->clearHistory();
     QVERIFY(spy1.count() == 0);
+    
+    // test reset
+    QSignalSpy spy2( model, SIGNAL(modelReset()));
+    model->d_ptr->handleLogsReset();
+    QVERIFY(spy2.count() == 1);
 }
 
 void TestCntHistoryModel::testMarkSeen()
--- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.pro	Fri Sep 17 08:27:32 2010 +0300
@@ -20,11 +20,14 @@
 
 QT += testlib xml core
 CONFIG  += qtestlib hb
-DEFINES += PBK_UNIT_TEST \
-           CNTHISTORYMODEL_NO_EXPORT
+DEFINES += QT_NO_DEBUG_OUTPUT
+DEFINES += QT_NO_WARNING_OUTPUT
+DEFINES += PBK_UNIT_TEST
+DEFINES += CNTHISTORYMODEL_NO_EXPORT
 
 DEPENDPATH += .
 INCLUDEPATH += .
+INCLUDEPATH += ../../../../inc
 
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE 
 	
--- a/phonebookui/eabi/cnthistorymodelu.def	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/eabi/cnthistorymodelu.def	Fri Sep 17 08:27:32 2010 +0300
@@ -7,19 +7,20 @@
 	_ZN15CntHistoryModel14sortAndRefreshEN2Qt9SortOrderE @ 6 NONAME
 	_ZN15CntHistoryModel15doEndInsertRowsEv @ 7 NONAME
 	_ZN15CntHistoryModel15doEndRemoveRowsEv @ 8 NONAME
-	_ZN15CntHistoryModel16staticMetaObjectE @ 9 NONAME DATA 16
-	_ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 10 NONAME
-	_ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 11 NONAME
-	_ZN15CntHistoryModel19getStaticMetaObjectEv @ 12 NONAME
-	_ZN15CntHistoryModel4sortEiN2Qt9SortOrderE @ 13 NONAME
-	_ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 14 NONAME
-	_ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME
-	_ZN15CntHistoryModelD0Ev @ 16 NONAME
-	_ZN15CntHistoryModelD1Ev @ 17 NONAME
-	_ZN15CntHistoryModelD2Ev @ 18 NONAME
-	_ZNK15CntHistoryModel10metaObjectEv @ 19 NONAME
-	_ZNK15CntHistoryModel4dataERK11QModelIndexi @ 20 NONAME
-	_ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 21 NONAME
-	_ZTI15CntHistoryModel @ 22 NONAME
-	_ZTV15CntHistoryModel @ 23 NONAME
+	_ZN15CntHistoryModel15doEndResetModelEv @ 9 NONAME
+	_ZN15CntHistoryModel16staticMetaObjectE @ 10 NONAME DATA 16
+	_ZN15CntHistoryModel17doBeginInsertRowsERK11QModelIndexii @ 11 NONAME
+	_ZN15CntHistoryModel17doBeginRemoveRowsERK11QModelIndexii @ 12 NONAME
+	_ZN15CntHistoryModel17doBeginResetModelEv @ 13 NONAME
+	_ZN15CntHistoryModel19getStaticMetaObjectEv @ 14 NONAME
+	_ZN15CntHistoryModelC1EjPN10QtMobility15QContactManagerEP7QObject @ 15 NONAME
+	_ZN15CntHistoryModelC2EjPN10QtMobility15QContactManagerEP7QObject @ 16 NONAME
+	_ZN15CntHistoryModelD0Ev @ 17 NONAME
+	_ZN15CntHistoryModelD1Ev @ 18 NONAME
+	_ZN15CntHistoryModelD2Ev @ 19 NONAME
+	_ZNK15CntHistoryModel10metaObjectEv @ 20 NONAME
+	_ZNK15CntHistoryModel4dataERK11QModelIndexi @ 21 NONAME
+	_ZNK15CntHistoryModel8rowCountERK11QModelIndex @ 22 NONAME
+	_ZTI15CntHistoryModel @ 23 NONAME
+	_ZTV15CntHistoryModel @ 24 NONAME
 
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel.h	Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,7 @@
     
 public:
     // removing and adding groups
-    void removeGroup(int localId);
+    bool removeGroup(int localId);
     void addGroup(int localId);
     
     // extension (plugin) group handling
@@ -74,10 +74,19 @@
     bool validateRowIndex(const int index) const;
     
 private slots:
-    void informationUpdated(int id, const QString& secondRowText, int memberCount);
+    void informationUpdated(int id, const QString& secondRowText, const QList<int>& members);
     void onIconReady(const QPixmap& pixmap, void *data, int id, int error);
     void extensionGroupsReady();
     
+    void handleAdded(const QList<QContactLocalId>& contactIds);
+    void handleRemoved(const QList<QContactLocalId>& contactIds);
+    void handleChanged(const QList<QContactLocalId>& contactIds);
+    void handleAddedRelationship(const QList<QContactLocalId>& contactIds);
+    void handleRemovedRelationship(const QList<QContactLocalId>& contactIds);
+    
+signals:
+    void groupCountChanged();
+    
 private:
     QSharedDataPointer<CntCollectionListModelData>  d;
     CntCollectionListModelWorker                   *mThread;
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodel_p.h	Fri Sep 17 08:27:32 2010 +0300
@@ -52,6 +52,7 @@
         icon = other.icon;
         secondaryIcon = other.secondaryIcon;
         memberCount = other.memberCount;
+        members = other.members;
         isPlugin = other.isPlugin;
         id = other.id;
         return *this;
@@ -68,6 +69,7 @@
     HbIcon      icon;
     HbIcon      secondaryIcon;
     int         memberCount;
+    QList<int>  members;
     bool        isPlugin;
     bool        fetched;
     int         id;
--- a/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionlistmodelworker.h	Fri Sep 17 08:27:32 2010 +0300
@@ -22,7 +22,7 @@
 #include <QMutex>
 #include <QPair>
 
-#include <qmobilityglobal.h>
+#include <qtcontacts.h>
 
 QTM_BEGIN_NAMESPACE
 class QContactManager;
@@ -49,7 +49,7 @@
     void fetchInformation(int id);
     
 signals:
-    void fetchDone(int id, const QString& secondRowText, int memberCount);
+    void fetchDone(int id, const QString& secondRowText, const QList<int>& members);
     
 private:
     bool                        mStarted;
--- a/phonebookui/pbkcommonui/inc/cntcollectionview.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcollectionview.h	Fri Sep 17 08:27:32 2010 +0300
@@ -77,6 +77,8 @@
     void deleteGroups();
     void handleDeleteGroups(HbAction* action);
     
+    void groupCountChanged();
+    
 private:
     QContactManager* getContactManager();
     void saveNewGroup(QContact* aContact);
--- a/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcarddatacontainer.h	Fri Sep 17 08:27:32 2010 +0300
@@ -66,6 +66,8 @@
 private:    
 #endif       
     QContact*                       mContact;
+    QContactAction*                 mCallAction;
+    QContactAction*                 mMessageAction;
     QList<CntContactCardDataItem*>  mDataItemList;
     int                             mSeparatorIndex;
     CntStringMapper                 mStringMapper;
--- a/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcardheadingitem.h	Fri Sep 17 08:27:32 2010 +0300
@@ -44,7 +44,6 @@
     
     Q_PROPERTY( QString first_line_text READ getFirstLineText )
     Q_PROPERTY( QString primary_text READ getPrimaryText )
-    Q_PROPERTY( QString second_line_text READ getSecondLineText )
     Q_PROPERTY( QString secondary_text READ getSecondaryText )
     Q_PROPERTY( QString marquee_item READ getTinyMarqueeText )
     Q_PROPERTY( HbIcon icon READ getIcon )
@@ -90,7 +89,6 @@
 
     QString getFirstLineText() const { return firstLineText; }
     QString getPrimaryText() const { return primaryText; }
-    QString getSecondLineText() const { return secondLineText; }
     QString getSecondaryText() const { return secondaryText; }
     QString getTinyMarqueeText() const { return tinyMarqueeText; }
 
@@ -103,7 +101,6 @@
     HbIconItem              *mSecondaryIcon;
     HbTextItem              *mFirstLineText;
     HbTextItem              *mPrimaryText;
-    HbTextItem              *mSecondLineText;
     HbTextItem              *mSecondaryText;
     HbMarqueeItem           *mMarqueeItem;
     HbFrameItem             *mFrameItem;
@@ -111,7 +108,6 @@
     
     QString                 firstLineText;
     QString                 primaryText;
-    QString                 secondLineText;
     QString                 secondaryText;
     QString                 tinyMarqueeText;
     HbIcon                  icon;
--- a/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntcontactcardview_p.h	Fri Sep 17 08:27:32 2010 +0300
@@ -135,6 +135,7 @@
 	void setMaptileLabel( HbLabel*& mapLabel, const HbIcon& icon );
 	void updateMaptileImage();
 	HbLabel* loadMaptileLabel( int addressType );
+    void populateListItems();
 	
 	// Presence related function
 	void updateItemPresence(const QString& accountUri, bool online);
@@ -162,13 +163,13 @@
     void executeDynamicAction(QContact& aContact, QContactDetail aDetail, QContactActionDescriptor aActionDescriptor);
     bool sendKeyPressed();
     void populateHeadingItem();
-    void populateListItems();
     
 public:
     CntAbstractViewManager*     mViewManager;   // not own
     HbView*                     mView;
     HbScrollArea                *mScrollArea;
     QGraphicsLinearLayout       *mContainerLayout;
+    QGraphicsWidget*            mContainerWidget;
     QContact                    *mContact;
     CntContactCardDataContainer *mDataContainer;
     CntContactCardHeadingItem   *mHeadingItem;
@@ -197,6 +198,8 @@
     CntAbstractEngine* mEngine;
     QTimer* mProgressTimer; // own
     QList<CntContactCardDetailItem*>    mDetailPtrs;
+    int                         mListPopulationProgress;
+    bool                        mStopListPopulation;
 };
 
 #endif // CNTCOMMLAUNCHERVIEW_H
--- a/phonebookui/pbkcommonui/inc/cntdetaileditor.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntdetaileditor.h	Fri Sep 17 08:27:32 2010 +0300
@@ -32,6 +32,7 @@
 class HbAction;
 class CntEditorFactory;
 class CntSaveManager;
+class HbShrinkingVkbHost;
 
 class CntDetailEditor : public QObject,
                         public CntAbstractView
@@ -51,6 +52,8 @@
     void saveContact();
     void contactDeletedFromOtherSource(const QList<QContactLocalId>& contactIds);
     void showRootView();
+    void handleKeypadOpen();
+    void handleKeypadClosed();
     
 public:
     void setViewId( int aId );
@@ -87,6 +90,7 @@
     CntViewParameters               mArgs;
     CntSaveManager                 *mSaveManager; // own
     CntAbstractEngine*              mEngine; // not own
+    HbShrinkingVkbHost*             mVirtualKeyboard;
     friend class TestCntDetailEditor;
     };
 #endif /* CNTDETAILEDITOR_H_ */
--- a/phonebookui/pbkcommonui/inc/cnteditview.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cnteditview.h	Fri Sep 17 08:27:32 2010 +0300
@@ -51,7 +51,9 @@
 private:
     CntEditViewPrivate* const d_ptr;
     Q_DECLARE_PRIVATE_D(d_ptr, CntEditView)
-    Q_DISABLE_COPY(CntEditView)   
+    Q_DISABLE_COPY(CntEditView)
+    
+    friend class TestCntEditView;
 };
 #endif //CNTEDITVIEW__H
 // EOF
--- a/phonebookui/pbkcommonui/inc/cntfavourite.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntfavourite.h	Fri Sep 17 08:27:32 2010 +0300
@@ -38,5 +38,9 @@
     static bool isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact );
     static void addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId );
     static void removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId );
+
+private:
+    static int mCachedSymbianFavouriteId;
 };
+
 #endif /* CNTFAVOURITE_H_ */
--- a/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cnthistoryviewitem.h	Fri Sep 17 08:27:32 2010 +0300
@@ -50,7 +50,6 @@
      * Overriden method to draw the custom item in the list view
      */
     void updateChildItems();
-    bool event(QEvent* e);
     
     bool getIncoming() const { return mIncoming; }
     bool isNewMessage() const { return mNewMessage; }
--- a/phonebookui/pbkcommonui/inc/cntkeygrabber.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntkeygrabber.h	Fri Sep 17 08:27:32 2010 +0300
@@ -24,6 +24,7 @@
 
 class HbMainWindow;
 class XQAiwRequest;
+class XqKeyCapture;
 
 class QTPBK_EXPORT CntKeyGrabber : public QObject
 {
@@ -40,6 +41,7 @@
 private:
     HbMainWindow    *mMainWindow;
     XQAiwRequest    *mRequest;
+    XqKeyCapture    *mKeyCapture;
 
 };
 
--- a/phonebookui/pbkcommonui/inc/cntmainwindow.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntmainwindow.h	Fri Sep 17 08:27:32 2010 +0300
@@ -24,6 +24,7 @@
 #include <cntviewparams.h>
 
 class CntDefaultViewManager;
+class XqKeyCapture;
 
 class QTPBK_EXPORT CntMainWindow : public HbMainWindow
 {
--- a/phonebookui/pbkcommonui/inc/cntnamesview_p.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/inc/cntnamesview_p.h	Fri Sep 17 08:27:32 2010 +0300
@@ -80,6 +80,7 @@
     
 private slots:
     void switchOrientation();
+    void handleImportContacts( HbAction *aAction );
     
 public:
     bool isFinderVisible();
@@ -114,12 +115,11 @@
     HbAction*                   mNewContact;
     QContactLocalId             mHandledContactId;
     HbAction*                   mMultipleDeleter;
-    bool                        mIsDefault;
-    int                         mId;
     QActionGroup*               mActionGroup;
 	HbMenu*                     mMenu;
 	bool                        mFilterChanged;
 	CntAbstractEngine*          mEngine;
+	static bool                 mIsFirstTimeUse; // FTU flag
 };
 
 #endif /* CNTABSTRACTLISTVIEW_H_ */
--- a/phonebookui/pbkcommonui/pbkcommonui.pro	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/pbkcommonui.pro	Fri Sep 17 08:27:32 2010 +0300
@@ -257,7 +257,8 @@
        -lcntsimutility \
        -lshareui \
        -lpresencecacheqt \
-       -lxqsettingsmanager
+       -lxqsettingsmanager \
+       -lxqkeycapture
 
 # capability
 TARGET.CAPABILITY = CAP_GENERAL_DLL
--- a/phonebookui/pbkcommonui/resources/pbkcommonui.qrc	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/pbkcommonui.qrc	Fri Sep 17 08:27:32 2010 +0300
@@ -41,5 +41,6 @@
         <file alias="cntfetchmarkall.css">style/cntfetchmarkall.css</file>
         <file alias="cntfetchmarkall_color.css">style/cntfetchmarkall_color.css</file>
         <file alias="fetchdialog.css">temp/fetchdialog.css</file>
+        <file alias="cntselectiondialogmarkwidget_color.css">style/cntselectiondialogmarkwidget_color.css</file>
     </qresource>
 </RCC>
--- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.css	Fri Sep 17 08:27:32 2010 +0300
@@ -1,30 +1,38 @@
-CntContactCardHeadingItem[icon][primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]{
+CntContactCardHeadingItem[primary_text]{
     layout:layout_one_row;
 }
 
-CntContactCardHeadingItem[icon][first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]{
+CntContactCardHeadingItem[secondary_text][!marquee_item]{
+    layout:layout_two_rows_secondary;
+}
+
+CntContactCardHeadingItem[!secondary_text][marquee_item]{
+    layout:layout_two_rows_marquee;
+}
+
+CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]{
     layout:layout_three_rows;
 }
 
-CntContactCardHeadingItem[primary_text][!secondary_text][!marquee_item][!first_line_text][!second_line_text]:landscape{
+CntContactCardHeadingItem[primary_text]:landscape{
     layout:layout_one_row-landscape;
 }
 
-CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item][!primary_text][!second_line_text]:landscape{
-    layout:layout_three_rows-landscape;
+CntContactCardHeadingItem[secondary_text][!marquee_item]:landscape{
+    layout:layout_two_rows_secondary-landscape;
 }
 
-CntContactCardHeadingItem:landscape{
-    layout:layout_two_rows-landscape;
+CntContactCardHeadingItem[!secondary_text][marquee_item]:landscape{
+    layout:layout_two_rows_marquee-landscape;
 }
 
-CntContactCardHeadingItem{
-    layout:layout_two_rows;
+CntContactCardHeadingItem[first_line_text][secondary_text][marquee_item]:landscape{
+    layout:layout_three_rows-landscape;
 }
 
 CntContactCardHeadingItem::icon{
     fixed-width:var(hb-param-graphic-size-primary-large);
-		fixed-height:var(hb-param-graphic-size-primary-large);
+    fixed-height:var(hb-param-graphic-size-primary-large);
 }
 
 CntContactCardHeadingItem::first_line_text{
@@ -39,12 +47,6 @@
     text-align:left;
 }
 
-CntContactCardHeadingItem::second_line_text{
-    text-height:var(hb-param-text-height-primary);
-    font-variant:primary;
-    text-align:left;
-}
-
 CntContactCardHeadingItem::secondary_text{
     text-height:var(hb-param-text-height-secondary);
     font-variant:secondary;
@@ -58,8 +60,8 @@
 }
 
 CntContactCardHeadingItem::secondary_icon{
-  fixed-height: var(hb-param-graphic-size-primary-small);
-  fixed-width: var(hb-param-graphic-size-primary-small);
+  fixed-height: var(hb-param-graphic-size-secondary);
+  fixed-width: var(hb-param-graphic-size-secondary);
 }
 
 CntContactCardHeadingItem::background{
--- a/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntcontactcardheadingitem.widgetml	Fri Sep 17 08:27:32 2010 +0300
@@ -5,10 +5,10 @@
     <meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
     <meshitem src="icon" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
 
-	 <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-	 <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
-	 <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-     
+    <meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+    <meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
+    <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
     <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
     <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
     <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
@@ -19,50 +19,49 @@
     <meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
     <meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
 
-	 <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="TOP" spacing="-expr(var(hb-param-text-height-primary)/2)" />
   </layout>
-  
-  <layout name="layout_one_row-landscape" type="mesh">
-	<meshitem src="primary_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
-	<meshitem src="primary_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-top)" />
-	<meshitem src="primary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-bottom)" />
-	<meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-right)" />
+
+  <layout name="layout_two_rows_secondary" type="mesh">
+    <meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+    <meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+
+    <meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+    <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+    <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+    <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+    <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
     
     <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
     <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
     <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
     <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
 
-	 <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+    <meshitem src="pictureArea" srcEdge="TOP" dst="" dstEdge="TOP" />
+    <meshitem src="pictureArea" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+    <meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+    <meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
+
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
   </layout>
-  
-  <layout name="layout_two_rows" type="mesh">
+
+  <layout name="layout_two_rows_marquee" type="mesh">
     <meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
     <meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
 
     <meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-    <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
-    <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
-		<meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-		<meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
-		<meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-	
-		<meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-    <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
-    <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-		<meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
     
-    <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" /> 
+    <meshitem src="marquee_item" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+    <meshitem src="marquee_item" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" /> 
+    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
     <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
     
     <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
     <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
@@ -74,67 +73,27 @@
     <meshitem src="pictureArea" srcEdge="LEFT" dst="" dstEdge="LEFT" />
     <meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
 
-		<meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
   </layout>
-  
-   <layout name="layout_two_rows-landscape" type="mesh">
-    <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-    <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
-    <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
-		<meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-		<meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
-		<meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-		
-		<meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-    <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
 
-    <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-		<meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    
-    <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" /> 
-    <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    
-    <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
-    <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-    <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
-    <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
-
-		<meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
-  </layout>
-  
   <layout name="layout_three_rows" type="mesh">
     <meshitem src="icon" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
     <meshitem src="icon" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
 
     <meshitem src="first_line_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-    <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
-    <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
-		<meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-		<meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
-		<meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-		
-		<meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-    <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="first_line_text" srcEdge="TOP" dst="icon" dstEdge="TOP" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
 
     <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
     <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
     <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
     
     <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" /> 
+    <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" />
+    <meshitem src="marquee_item" srcEdge="RIGHT" dst="secondary_text" dstEdge="RIGHT" />
     <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-     
+    
     <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
     <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
     <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
@@ -146,21 +105,66 @@
     <meshitem src="pictureArea" srcEdge="RIGHT" dst="icon" dstEdge="RIGHT" />
     
     <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
+  </layout>
+  
+  <layout name="layout_one_row-landscape" type="mesh">
+    <meshitem src="primary_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+    <meshitem src="primary_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-top)" />
+    <meshitem src="primary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-bottom)" />
+    <meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+    
+    <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+    <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+    <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+    <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="TOP" spacing="-expr(var(hb-param-text-height-primary)/2)" />
+  </layout>
+  
+  <layout name="layout_two_rows_secondary-landscape" type="mesh">
+    <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+    <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+    <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+    <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+    <meshitem src="secondary_text" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
+    <meshitem src="secondary_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+    
+    <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+    <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+    <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+    <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
+  </layout>
+
+  <layout name="layout_two_rows_marquee-landscape" type="mesh">
+    <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
+    <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
+
+    <meshitem src="marquee_item" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+    <meshitem src="marquee_item" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
+    <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
+    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+    
+    <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
+    <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+    <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+    <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
   </layout>
   
   <layout name="layout_three_rows-landscape" type="mesh">
-    <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
+    <meshitem src="first_line_text" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-left)" />
     <meshitem src="first_line_text" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-1un" />
-    <meshitem src="first_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-
-		<meshitem src="primary_text" srcEdge="LEFT" dst="icon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" />
-		<meshitem src="primary_text" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
-		<meshitem src="primary_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
-		
-		<meshitem src="second_line_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
-    <meshitem src="second_line_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
-    <meshitem src="second_line_text" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="first_line_text" srcEdge="RIGHT" dst="secondary_icon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" />
 
     <meshitem src="secondary_text" srcEdge="TOP" dst="first_line_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
     <meshitem src="secondary_text" srcEdge="LEFT" dst="first_line_text" dstEdge="LEFT" />
@@ -169,14 +173,14 @@
     <meshitem src="marquee_item" srcEdge="TOP" dst="secondary_text" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-middle-vertical)" />
     <meshitem src="marquee_item" srcEdge="LEFT" dst="secondary_text" dstEdge="LEFT" /> 
     <meshitem src="marquee_item" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="1un" />
-    <meshitem src="marquee_item" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-     
+    <meshitem src="marquee_item" srcEdge="RIGHT" dst="secondary_text" dstEdge="RIGHT" />
+    
     <meshitem src="background" srcEdge="TOP" dst="" dstEdge="TOP" />
     <meshitem src="background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
     <meshitem src="background" srcEdge="LEFT" dst="" dstEdge="LEFT" />
     <meshitem src="background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
 
-		<meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
-    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="primary_text" dstEdge="CENTERV" />
+    <meshitem src="secondary_icon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)" />
+    <meshitem src="secondary_icon" srcEdge="CENTERV" dst="first_line_text" dstEdge="CENTERV" />
   </layout>
 </hbwidget>
--- a/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/resources/style/cntfetchmarkall_color.css	Fri Sep 17 08:27:32 2010 +0300
@@ -3,4 +3,7 @@
     color: var(qtc_viewtitle_normal);
 }
 
-
+CntFetchMarkAll  > HbCheckBox::text
+{
+    color: var(qtc_viewtitle_normal);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/pbkcommonui/resources/style/cntselectiondialogmarkwidget_color.css	Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,5 @@
+HbSelectionDialogMarkWidget  > HbCheckBox::text
+{
+    color: var(qtc_viewtitle_normal);
+}
+
--- a/phonebookui/pbkcommonui/src/cntaddressmodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntaddressmodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -35,21 +35,25 @@
     foreach ( QContactAddress a, mContact->details<QContactAddress>() )
         {
         QStringList context = a.contexts();
-        if ( context.isEmpty() && !mAddress ) // no context
-            {
-            mAddress = new QContactAddress( a );
-            createAddressItems( address, mAddress );
-            }
-        else if (context.first() == QContactAddress::ContextHome && !mAddressHome )
+        QString type = context.isEmpty() ? "" : context.first();
+        // Context HOME
+        if (type == QContactAddress::ContextHome && !mAddressHome )
             {
             mAddressHome = new QContactAddress( a );
             createAddressItems( addressHome, mAddressHome );
             }
-        else if (context.first() == QContactAddress::ContextWork && !mAddressWork )
+        // Context WORK
+        else if (type == QContactAddress::ContextWork && !mAddressWork )
             {
             mAddressWork = new QContactAddress( a );
             createAddressItems( addressWork, mAddressWork );
             }
+        // Context WHATEVER
+        else if ( !mAddress ) // no context
+            {
+            mAddress = new QContactAddress( a );
+            createAddressItems( address, mAddress );
+            }
         }
     
     // Check that all items (address, addressHome, addressWork) are created
@@ -107,8 +111,7 @@
     HbDataFormModelItem* postal = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_postal_codezip_code"));
     postal->setContentWidgetData( "text", aAddress->postcode() );
     postal->setContentWidgetData( "maxLength", CNT_POSTCODE_MAXLENGTH );
-    postal->setContentWidgetData( "preferDigits", true);
-    
+        
     HbDataFormModelItem* city = new HbDataFormModelItem( HbDataFormModelItem::TextItem, hbTrId("txt_phob_formlabel_city"));
     city->setContentWidgetData( "text", aAddress->locality() );
     city->setContentWidgetData( "maxLength", CNT_LOCALITY_MAXLENGTH );
--- a/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -33,6 +33,16 @@
 #include <hbglobal.h>
 #include <hbicon.h>
 
+#include <QtAlgorithms>
+
+namespace
+{
+    bool caseInsensitiveLessThan(const QContact &c1, const QContact &c2)
+    {
+        return c1.displayLabel().toLower() < c2.displayLabel().toLower();
+    }
+}
+
 /*!
     Constructor
 */
@@ -54,7 +64,8 @@
     QString noMembers = hbTrId("txt_phob_dblist_val_no_members_selected");
     mThread = new CntCollectionListModelWorker(unnamed, noFavs, noMembers, order);
     
-    connect(mThread, SIGNAL(fetchDone(int, const QString&, int)), this, SLOT(informationUpdated(int, const QString&, int)));
+    connect(mThread, SIGNAL(fetchDone(int, const QString&, const QList<int>&)), this, 
+            SLOT(informationUpdated(int, const QString&, const QList<int>&)));
     connect(d->mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)),
              this, SLOT(onIconReady(QPixmap, void *, int, int)));
     
@@ -94,6 +105,8 @@
 */
 QVariant CntCollectionListModel::data(const QModelIndex& index, int role) const
 {
+    CNT_ENTRY_ARGS(index << role)
+    
     int row = index.row();
     
     if ( !validateRowIndex(row) )
@@ -190,20 +203,25 @@
 
     \param localId QContactLocalId of the group that should be removed
 */
-void CntCollectionListModel::removeGroup(int localId)
+bool CntCollectionListModel::removeGroup(int localId)
 {
-    CNT_ENTRY
+    CNT_ENTRY_ARGS(localId)
+    
+    bool groupRemoved = false;
     
     for (int i = 0;i < rowCount();i++)
     {
         if (!d->mList.at(i)->isPlugin && d->mList.at(i)->id == localId)
         {
             removeRow(i);
+            groupRemoved = true;
             break;
         }
     }
     
-    CNT_EXIT
+    CNT_EXIT_ARGS(groupRemoved)
+    
+    return groupRemoved;
 }
 
 /*!
@@ -214,7 +232,7 @@
 */
 void CntCollectionListModel::addGroup(int localId)
 {
-    CNT_ENTRY
+    CNT_ENTRY_ARGS(localId)
     
     QContactDetailFilter groupFilter;
     groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
@@ -312,6 +330,8 @@
 */
 CntViewParameters CntCollectionListModel::extensionGroupActivated(int row)
 {
+    CNT_ENTRY_ARGS(row)
+
     CntViewParameters params;
     for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++)
     {
@@ -322,6 +342,9 @@
             break;
         }
     }
+    
+    CNT_EXIT_ARGS(params)
+    
     return params;
 }
 
@@ -335,7 +358,7 @@
 */
 void CntCollectionListModel::extensionGroupLongPressed(int row, const QPointF& coords, CntExtensionGroupCallback* interface)
 {
-    CNT_ENTRY
+    CNT_ENTRY_ARGS(row << coords << interface)
     
     for(int i = 0;i < d->mExtensions.value(row)->groupCount();i++)
     {
@@ -358,15 +381,22 @@
 */
 QModelIndex CntCollectionListModel::indexOfGroup(int localId)
 {
+    CNT_ENTRY_ARGS(localId)
+            
+    QModelIndex groupIndex;
+
     for (int i = 0;i < d->mList.count();i++)
     {
         if (d->mList.at(i)->id == localId && !d->mList.at(i)->isPlugin)
         {
-            return index(i);
+            groupIndex = index(i);
+            break;
         }
     }
     
-    return QModelIndex();
+    CNT_EXIT_ARGS(groupIndex)
+    
+    return groupIndex;
 }
 
 /*!
@@ -380,6 +410,13 @@
     initializeExtensions();
     initializeUserGroups();
     
+    connect(d->mContactManager, SIGNAL(contactsAdded(const QList<QContactLocalId>&)), this, SLOT(handleAdded(const QList<QContactLocalId>&)));
+    connect(d->mContactManager, SIGNAL(contactsChanged(const QList<QContactLocalId>&)), this, SLOT(handleChanged(const QList<QContactLocalId>&)));
+    connect(d->mContactManager, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), this, SLOT(handleRemoved(const QList<QContactLocalId>&)));
+    connect(d->mContactManager, SIGNAL(relationshipsAdded(const QList<QContactLocalId>&)), this, SLOT(handleAddedRelationship(const QList<QContactLocalId>&)));
+    connect(d->mContactManager, SIGNAL(relationshipsRemoved(const QList<QContactLocalId>&)), this, SLOT(handleRemovedRelationship(const QList<QContactLocalId>&)));
+
+    
     CNT_EXIT
 }
 
@@ -526,6 +563,8 @@
 */
 QVariant CntCollectionListModel::displayRoleData(const CntCollectionItem& item) const
 {
+    CNT_ENTRY
+    
     QStringList list;
 
     list << item.groupName << item.secondLineText;
@@ -539,6 +578,8 @@
         list << " ";
     }
     
+    CNT_EXIT
+    
     return QVariant(list);
 }
 
@@ -550,6 +591,8 @@
 */
 QVariant CntCollectionListModel::decorationRoleData(const CntCollectionItem& item) const
 {
+    CNT_ENTRY
+    
     QList<QVariant> icons;
     icons << item.icon;
     
@@ -558,6 +601,8 @@
         icons << item.secondaryIcon;
     }
     
+    CNT_EXIT
+    
     return QVariant(icons);
 }
 
@@ -580,9 +625,9 @@
     \param secondRowText text to be shown in the second row
     \param memberCount the amount of members the group has (shown in text-3 in HbListViewItem)
 */
-void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, int memberCount)
+void CntCollectionListModel::informationUpdated(int id, const QString& secondRowText, const QList<int>& members)
 {
-    CNT_ENTRY
+    CNT_ENTRY_ARGS(id << secondRowText << members)
     
     for (int i = 0;i < d->mList.count();i++)
     {
@@ -591,7 +636,8 @@
             CollectionItemPointer item = d->mList.at(i);
             
             item->secondLineText = secondRowText;
-            item->memberCount = memberCount;
+            item->memberCount = members.count();
+            item->members = members;
             
             int idx = d->mList.indexOf(item);
             emit dataChanged(index(idx, 0), index(idx, 0));
@@ -614,7 +660,7 @@
 */
 void CntCollectionListModel::onIconReady(const QPixmap& pixmap, void *data, int id, int error)
 {
-    CNT_ENTRY
+    CNT_ENTRY_ARGS(pixmap << data << id << error)
     
     Q_UNUSED(data);
     
@@ -649,6 +695,8 @@
 */
 void CntCollectionListModel::extensionGroupsReady()
 {
+    CNT_ENTRY
+    
     CntUiGroupSupplier* groupSupplier = static_cast<CntUiGroupSupplier*>(sender());
     
     int addedCount = groupSupplier->groupCount();
@@ -693,4 +741,198 @@
         
         endInsertRows();
     }
+    
+    CNT_EXIT
 }
+
+void CntCollectionListModel::handleAdded(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY_ARGS(contactIds)
+            
+    if (contactIds.count() == 1)
+    {
+        QContactFetchHint noRelationshipsFetchHint;
+        noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+        
+        QContact contact = d->mContactManager->contact(contactIds.first(), noRelationshipsFetchHint);
+        
+        if (contact.type() == QContactType::TypeGroup)
+        {
+            addGroup(contactIds.first());
+            emit groupCountChanged();
+        }
+    }
+    else
+    {
+        QList<QContact> addedGroups;
+        
+        foreach (QContactLocalId id, contactIds)
+        {
+            QContactFetchHint noRelationshipsFetchHint;
+            noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+            
+            QContact contact = d->mContactManager->contact(id, noRelationshipsFetchHint);
+            
+            if (contact.type() == QContactType::TypeGroup)
+            {
+                addedGroups << contact;
+            }
+        }
+        
+        if (addedGroups.count() == 1)
+        {
+            addGroup(addedGroups.first().localId());
+            emit groupCountChanged();
+        }
+        else if (addedGroups.count() > 1)
+        {
+            qSort(addedGroups.begin(), addedGroups.end(), caseInsensitiveLessThan);
+            
+            foreach (QContact c, addedGroups)
+            {
+                addGroup(c.localId());
+            }
+            emit groupCountChanged();
+        }
+    }
+
+    CNT_EXIT
+}
+
+void CntCollectionListModel::handleRemoved(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY_ARGS(contactIds)
+            
+    foreach (QContactLocalId id, contactIds)
+    {
+        if (removeGroup(id))
+        {
+            emit groupCountChanged();
+        }
+        else
+        {
+            for (int i = 0;i < d->mList.count();i++)
+            {
+                if (d->mList.at(i)->members.contains(id))
+                {
+                    CollectionItemPointer item = d->mList.at(i);
+
+                    item->fetched = false;
+
+                    int idx = d->mList.indexOf(item);
+                    emit dataChanged(index(idx, 0), index(idx, 0));
+                }
+            }
+        }
+    }
+            
+    CNT_EXIT
+}
+
+void CntCollectionListModel::handleChanged(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY_ARGS(contactIds)
+
+    foreach (QContactLocalId id, contactIds)
+    {
+        QContact contact = d->mContactManager->contact(id);
+
+        if (contact.type() == QContactType::TypeGroup)
+        {
+            for (int i = 0;i < d->mList.count();i++)
+            {
+                if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+                {
+                    CollectionItemPointer item = d->mList.at(i);
+
+                    QContactName contactName = contact.detail<QContactName>();
+                    QString groupName = contactName.customLabel();
+
+                    if (groupName != item->groupName)
+                    {
+                        if (groupName.isNull())
+                        {
+                            item->groupName = hbTrId("txt_phob_dblist_unnamed");
+                        }
+                        else
+                        {
+                            item->groupName = groupName;
+                        }
+
+                        int idx = d->mList.indexOf(item);
+                        emit dataChanged(index(idx, 0), index(idx, 0));
+                    }
+
+                    break;
+                }
+            }
+        }
+        else if (contact.type() == QContactType::TypeContact)
+        {
+            for (int i = 0;i < d->mList.count();i++)
+            {
+                if (d->mList.at(i)->members.contains(id))
+                {
+                    CollectionItemPointer item = d->mList.at(i);
+
+                    item->fetched = false;
+
+                    int idx = d->mList.indexOf(item);
+                    emit dataChanged(index(idx, 0), index(idx, 0));
+                }
+            }
+        }
+    }
+    
+    CNT_EXIT
+}
+
+void CntCollectionListModel::handleAddedRelationship(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY_ARGS(contactIds)
+            
+    foreach (QContactLocalId id, contactIds)
+    {      
+        for (int i = 0;i < d->mList.count();i++)
+        {
+            if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+            {
+                CollectionItemPointer item = d->mList.at(i);
+
+                item->fetched = false;
+
+                int idx = d->mList.indexOf(item);
+                emit dataChanged(index(idx, 0), index(idx, 0));
+
+                break;
+            }
+        }
+    }
+            
+    CNT_EXIT
+}
+
+void CntCollectionListModel::handleRemovedRelationship(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY_ARGS(contactIds)
+    
+    foreach (QContactLocalId id, contactIds)
+    {      
+        for (int i = 0;i < d->mList.count();i++)
+        {
+            if (d->mList.at(i)->id == id && !d->mList.at(i)->isPlugin)
+            {
+                CollectionItemPointer item = d->mList.at(i);
+
+                item->fetched = false;
+
+                int idx = d->mList.indexOf(item);
+                emit dataChanged(index(idx, 0), index(idx, 0));
+
+                break;
+            }
+        }
+    }
+            
+    CNT_EXIT
+}
--- a/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionlistmodelworker.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -195,7 +195,6 @@
     int favoriteGroupId = CntFavourite::favouriteGroupId( mManager );
 
     QString secondLineText;
-    int memberCount = 0;
 
     QContactRelationshipFilter rFilter;
     rFilter.setRelationshipType(QContactRelationship::HasMember);
@@ -228,8 +227,15 @@
     // group members and their count
     QList<QContactLocalId> groupMemberIds = mManager->contactIds(rFilter, sortOrders);
 
+    QList<int> groupMemberIdsToInt;
     if (!groupMemberIds.isEmpty())
     {
+        // first copy all the ids to QList<int>
+        // (convert unsigned int -> int due to signalling problems with unsigned ints)
+        for(int i = 0;i < groupMemberIds.count();i++)
+        {
+            groupMemberIdsToInt << groupMemberIds.at(i);
+        }
         QStringList nameList;
         for(int i = 0;i < groupMemberIds.count();i++)
         {
@@ -257,7 +263,6 @@
         QString names = nameList.join(", ").trimmed();
 
         secondLineText = names;
-        memberCount = groupMemberIds.count();
     }
     else
     {
@@ -271,7 +276,7 @@
         }
     }
 
-    emit fetchDone(id, secondLineText, memberCount);
+    emit fetchDone(id, secondLineText, groupMemberIdsToInt);
     
     CNT_EXIT
 }
--- a/phonebookui/pbkcommonui/src/cntcollectionview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcollectionview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -39,6 +39,8 @@
 #include <hbgroupbox.h>
 #include <hbmessagebox.h>
 #include <hbparameterlengthlimiter.h>
+#include <hbeffect.h>
+#include <hbtoolbar.h>
 
 #include <QActionGroup>
 #include <QApplication>
@@ -75,6 +77,9 @@
         qFatal("Unable to read :/xml/contacts_collections.docml");
     }
     
+    // disable toolbar effects
+    HbEffect::disable(mView->toolBar());
+    
     //back button
     mSoftkey = new HbAction(Hb::BackNaviAction, mView);
     connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
@@ -156,6 +161,7 @@
     mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon);
     mListView->listItemPrototype()->setStretchingStyle(HbListViewItem::StretchLandscape);
     mModel = new CntCollectionListModel( mEngine, this);
+    connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged()));
     mListView->setModel(mModel);
     
     CNT_EXIT
@@ -343,7 +349,6 @@
         mHandledContact->saveDetail(&groupName);
         getContactManager()->saveContact(mHandledContact);
         
-        // Select some contact(s) to add to the group
         QString groupNameCreated = mHandledContact->displayLabel();
         if (groupNameCreated.isEmpty())
         {
@@ -358,9 +363,6 @@
        QList<QContactLocalId> contactIds = getContactManager()->contactIds(gFilter);   
        if (contactIds.isEmpty())
        {
-           mModel->addGroup(mHandledContact->localId());
-           mDeleteGroupsAction->setEnabled(true);
-               
            notifyNewGroup();
        }      
        else
@@ -395,19 +397,13 @@
         viewParameters.insert(ESelectedGroupContact, var);
         mViewManager->changeView(viewParameters);
     }
-    else
-    {
-        mModel->addGroup(mHandledContact->localId());
-        mDeleteGroupsAction->setEnabled(true);
-    }
+
     notifyNewGroup();
 }
 
 void CntCollectionView::handleCancelGroupMembers()
 {
     mSelectedContactsSet.clear();
-    mModel->addGroup(mHandledContact->localId());
-    mDeleteGroupsAction->setEnabled(true);
     
     notifyNewGroup();
 }
@@ -437,6 +433,7 @@
     mModel = NULL;
     
     mModel = new CntCollectionListModel(mEngine, this);
+    connect(mModel, SIGNAL(groupCountChanged()), this, SLOT(groupCountChanged()));
     mListView->setModel(mModel);
 }
 
@@ -462,17 +459,6 @@
     if (action == HbMessageBox::Delete)
     {
         getContactManager()->removeContact(mHandledContact->localId());
-        mModel->removeGroup(mHandledContact->localId());
-        
-        // disable delete group(s) button if only favorites group is present
-        QContactDetailFilter groupFilter;
-        groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
-        groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
-        QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
-        if (groupContactIds.count() < 2)
-        {
-            mDeleteGroupsAction->setEnabled(false);
-        }
     }
     
     delete mHandledContact;
@@ -495,21 +481,23 @@
     
     if (groupDeletePopup && action == groupDeletePopup->actions().first())
     {
-        QList<QContactLocalId> deletedList = groupDeletePopup->deleteGroup();
-        foreach (QContactLocalId id, deletedList)
-        {
-            mModel->removeGroup(id);
-        }
-        
-        // disable delete group(s) button if only favorites group is present
-        QContactDetailFilter groupFilter;
-        groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
-        groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
-        QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
-        if (groupContactIds.count() < 2)
-        {
-            mDeleteGroupsAction->setEnabled(false);
-        }
+        groupDeletePopup->deleteGroup();
+    }
+}
+
+void CntCollectionView::groupCountChanged()
+{
+    QContactDetailFilter groupFilter;
+    groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
+    groupFilter.setValue(QLatin1String(QContactType::TypeGroup));
+    QList<QContactLocalId> groupContactIds = getContactManager()->contactIds(groupFilter);
+    if (groupContactIds.count() < 2)
+    {
+        mDeleteGroupsAction->setEnabled(false);
+    }
+    else
+    {
+        mDeleteGroupsAction->setEnabled(true);
     }
 }
 
--- a/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -55,6 +55,8 @@
     Qt::Orientations orientation,
     QObject *parent) :
             mContact(NULL), 
+            mCallAction(NULL),
+            mMessageAction(NULL),
             mSeparatorIndex(-1),
             mLocationFeatureEnabled(false), 
             mMaptileInterface(maptile),
@@ -62,6 +64,16 @@
             mExtensionManager( &aExtensionManager )
 {
     Q_UNUSED(parent); 
+    QList<QContactActionDescriptor> callActionDescriptors = QContactAction::actionDescriptors("call", "symbian");
+    if (!callActionDescriptors.isEmpty())
+    {
+        mCallAction = QContactAction::action(callActionDescriptors.first());
+    }
+    QList<QContactActionDescriptor> messageActionDescriptors = QContactAction::actionDescriptors("message", "symbian");
+    if (!messageActionDescriptors.isEmpty())
+    {
+        mMessageAction = QContactAction::action(messageActionDescriptors.first());
+    }
 }
 
 void CntContactCardDataContainer::setContactData(QContact* contact, bool aMyCard)
@@ -88,6 +100,10 @@
 CntContactCardDataContainer::~CntContactCardDataContainer()
 {
     clearContactData();
+    delete mCallAction;
+    mCallAction = NULL;
+    delete mMessageAction;
+    mMessageAction = NULL;
 }
 
 void CntContactCardDataContainer::clearContactData()
@@ -286,7 +302,7 @@
             }
         }
     }
-    
+
     // This is special action case. Here we query implementations that are generic
     // to contact, so it's not linked to any detail(usually generic my card actions).
     for(int j = 0; j < extendedActions.count(); j++)
@@ -475,6 +491,11 @@
                 title = hbTrId("txt_phob_formlabel_address_work");
                 position = CntContactCardDataItem::EAddressWork;
             }
+            else
+            {
+                title = hbTrId("txt_phob_formlabel_address");
+                position = CntContactCardDataItem::EAddress;
+            }
         }
         CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, position, false);
         
@@ -657,19 +678,16 @@
 Returns true if contactDetails contains spesific action.
 */
 bool CntContactCardDataContainer::supportsDetail(const QString &actionName, const QContactDetail &contactDetail)
-{    
-    QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
-    if (actionDescriptors.isEmpty())
-    {
-        return false;
+{
+    QContactAction* action = NULL;
+
+    if (actionName == "call") {
+        action = mCallAction;
+    } else if (actionName == "message") {
+        action = mMessageAction;
     }
     
-    QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
-    bool isSupportDetail = contactAction->isDetailSupported(contactDetail);
-    
-    delete contactAction;
-    
-    return isSupportDetail;
+    return (action != NULL && action->isDetailSupported(contactDetail));
 }
 
 /*!
--- a/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcardheadingitem.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -43,7 +43,6 @@
     mSecondaryIcon(NULL),
     mFirstLineText(NULL),
     mPrimaryText(NULL),
-    mSecondLineText(NULL),
     mSecondaryText(NULL),
     mMarqueeItem(NULL),
     mFrameItem(NULL),
@@ -139,26 +138,6 @@
         mPrimaryText = 0;
     }
 
-
-    if (!secondLineText.isNull())
-    {
-        if (!mSecondLineText)
-        {
-            mSecondLineText = new HbTextItem(this);
-            mSecondLineText->setText(secondLineText);
-            mSecondLineText->setMaximumLines(1);
-            style()->setItemName(mSecondLineText, "second_line_text");
-        }
-    }
-    else
-    {
-        if (mSecondLineText)
-        {
-            delete mSecondLineText;
-        }
-        mSecondLineText = 0;
-    }
-
     if (!secondaryText.isNull())
     {
         if (!mSecondaryText)
@@ -267,9 +246,6 @@
     delete mPrimaryText;
     mPrimaryText = 0;
 
-    delete mSecondLineText;
-    mSecondLineText = 0;
-
     delete mSecondaryText;
     mSecondaryText = 0;
 
@@ -505,19 +481,19 @@
     if (mIsOnline)
     {
         secondaryIcon = HbIcon("qtg_small_online");
-        createPrimitives();
+        recreatePrimitives();
         mSecondaryIcon->setIcon(secondaryIcon);
     }
     else if (!mIsOnline && mIsFavorite)
     {
         secondaryIcon = HbIcon("qtg_small_favorite");
-        createPrimitives();
+        recreatePrimitives();
         mSecondaryIcon->setIcon(secondaryIcon);
     }
     else
     {
         secondaryIcon.clear();
-        createPrimitives();
+        recreatePrimitives();
     }
 
     repolish();
--- a/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcardview_p.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -21,12 +21,12 @@
 #include <QGraphicsSceneResizeEvent>
 #include <QStringList>
 #include <QStandardItemModel>
-#include <QDebug>
 #include <QKeyEvent>
 #include <QDir>
 
 #include <cntservicescontact.h>
 #include <qtcontacts.h>
+#include <hbapplication.h>
 #include <hbscrollarea.h>
 #include <hblabel.h>
 #include <hbmenu.h>
@@ -70,8 +70,15 @@
 #include <cntabstractengine.h>
 #include <cntuicontactcardextension.h>
 
-#define CNT_MAPTILE_PROGRESS_TIMER  100 //100 msec
-#define CNT_UNKNOWN_MAPTILE_STATUS  -1
+#define CNT_MAPTILE_PROGRESS_TIMER  100 // 100 msec
+#define CNT_UNKNOWN_MAPTILE_STATUS   -1
+
+// A few list items (CntInitialPopulation) will be populated before the first view;
+// if there are more list items, they will be fetched and added one by one after the
+// first view has been shown to the user
+static const int CntListPopulationNotInProgress = -1;
+static const QEvent::Type ProcessPopulateListEvent = QEvent::User;
+static const int CntInitialPopulation = 8;
 
 const char *CNT_CONTACTCARDVIEW_XML = ":/xml/contacts_contactcard.docml";
 const char *CNT_MAPTILE_INPROGRESS_ICON = "qtg_anim_small_loading_1";
@@ -83,6 +90,7 @@
 CntContactCardViewPrivate::CntContactCardViewPrivate(bool isTemporary) :
     QObject(),
     mContainerLayout(NULL),
+    mContainerWidget(NULL),
     mContact(NULL),
     mDataContainer(NULL),
     mAvatar(NULL),
@@ -94,7 +102,9 @@
 	mIsTemporary(isTemporary),
 	mIsExecutingAction(false),
     mMyCardId(0),
-    mSaveManager(NULL)
+    mSaveManager(NULL),
+    mListPopulationProgress(CntListPopulationNotInProgress),
+    mStopListPopulation(false)
 {
     bool ok;
     document()->load(CNT_CONTACTCARDVIEW_XML, &ok);
@@ -207,7 +217,11 @@
 */
 void CntContactCardViewPrivate::showPreviousView()
 {
+    // stop list population, if it is still in progress
+    mStopListPopulation = true;
+
     int returnValue = KCntServicesReturnValueContactNotModified;
+
     //save the contact if avatar has been changed.
     QContact contact = contactManager()->contact(mContact->localId());
     if ( contact != *mContact && contactManager()->error() == QContactManager::NoError)
@@ -232,6 +246,9 @@
 */
 void CntContactCardViewPrivate::showRootView()
 {
+    // stop list population, if it is still in progress
+    mStopListPopulation = true;
+
     mViewManager->back( mArgs, true );
 }
 
@@ -242,13 +259,12 @@
 {   
     CNT_ENTRY
     mArgs = aArgs;
-            
+
     mViewManager = &mEngine->viewManager();
     mThumbnailManager = &mEngine->thumbnailManager();
     connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
             this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
        
-    
     HbMainWindow* window = mView->mainWindow();
     if (window)
     {
@@ -257,7 +273,7 @@
         
         setOrientation(window->orientation());
     }
-    
+
     qApp->installEventFilter(this);
         
     QContact contact = aArgs.value(ESelectedContact).value<QContact>();
@@ -267,6 +283,7 @@
     mMyCardId = contactManager()->selfContactId();
     
     populateHeadingItem();
+
     populateListItems();
     
     bool myCard = mContact->localId() == mMyCardId;
@@ -314,6 +331,8 @@
 
 void CntContactCardViewPrivate::populateHeadingItem()
 {
+    CNT_ENTRY
+
     Q_ASSERT(mHeadingItem != NULL && mContact != NULL);
     
     mHeadingItem->setDetails(mContact);
@@ -333,16 +352,13 @@
         mImageLabel->ungrabGesture(Qt::TapGesture);
     }
     
-
     bool online;
     mInitiialPrecenceData = mPresenceListener->initialPresences(*mContact, online);
     mHeadingItem->setOnlineStatus(online);
-    
-    if (!myCard)
-    {
-        bool setAsFavorite( false );
-        setAsFavorite = CntFavourite::isMemberOfFavouriteGroup( contactManager(), mContact );
-        mHeadingItem->setFavoriteStatus( setAsFavorite ); // if contact is part of favourites group
+
+    if (!myCard) {
+        bool setAsFavorite = CntFavourite::isMemberOfFavouriteGroup(contactManager(), mContact);
+        mHeadingItem->setFavoriteStatus(setAsFavorite); // if contact is part of favourites group
         static_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible( !setAsFavorite );
         static_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible( setAsFavorite );
     }
@@ -367,65 +383,77 @@
             break;
         }
     }
-    
+
+    CNT_EXIT
 }
 
 void CntContactCardViewPrivate::populateListItems()
 {
+    CNT_ENTRY
+
     Q_ASSERT(mContact != NULL && mScrollArea != NULL);
 
-    // data container
-    if (!mDataContainer) {
-        mDataContainer = new CntContactCardDataContainer(
-            mMaptile,
-            mEngine->extensionManager(),
-            mView->mainWindow()->orientation() );
-    }
-    
-    // fill the data container with contact details
-    mDataContainer->setContactData(mContact);
-    
-    // scroll area + container widget
-    QGraphicsWidget* containerWidget = mScrollArea->contentWidget();
-    if (!containerWidget)
-    {
-        // initialize
-        mScrollArea->setScrollDirections(Qt::Vertical);
+    if (mListPopulationProgress == CntListPopulationNotInProgress) {
+        mListPopulationProgress = 0;
+
+        if (!mDataContainer) {
+            mDataContainer = new CntContactCardDataContainer(
+                mMaptile,
+                mEngine->extensionManager(),
+                mView->mainWindow()->orientation());
+        }
+
+        // fill the data container with contact details
+        mDataContainer->setContactData(mContact);
         
-        containerWidget = new QGraphicsWidget();
-        mScrollArea->setContentWidget(containerWidget); // takes ownership.
+        // scroll area + container widget
+        mContainerWidget = mScrollArea->contentWidget();
+        if (!mContainerWidget) {
+            // initialize
+            mScrollArea->setScrollDirections(Qt::Vertical);
+            
+            mContainerWidget = new QGraphicsWidget();
+            mScrollArea->setContentWidget(mContainerWidget); // takes ownership. Old widget is deleted
+                
+            mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical);
+            mContainerLayout->setContentsMargins(0, 0, 0, 0);
+            mContainerLayout->setSpacing(0);
+            mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
             
-        mContainerLayout = new QGraphicsLinearLayout(Qt::Vertical);
-        mContainerLayout->setContentsMargins(0, 0, 0, 0);
-        mContainerLayout->setSpacing(0);
-        mContainerLayout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-        
-        containerWidget->setLayout(mContainerLayout);   // takes ownership.
-    } else {
-        // Already initialized
-        Q_ASSERT(mContainerLayout != NULL);
-        
-        // Clear the container
-        int count = mContainerLayout->count();
-        for (int i=0; i<count; i++) 
-        {
-            // do not delete items. They will be deleted automatically
-            mContainerLayout->removeAt(i);
+            mContainerWidget->setLayout(mContainerLayout);   // takes ownership. Old layout is deleted
+        } else {
+            // Already initialized
+            Q_ASSERT(mContainerLayout != NULL);
+            
+            // Clear the container
+            int count = mContainerLayout->count();
+            for (int i = 0; i < count; i++) {
+                // do not delete items. They will be deleted automatically
+                mContainerLayout->removeAt(i);
+            }
         }
+    
+        // Delete all the detail pointers if any
+        qDeleteAll(mDetailPtrs);
+        mDetailPtrs.clear();
     }
-    
-    // Delete all the detail pointers if any
-    qDeleteAll(mDetailPtrs);
-    mDetailPtrs.clear();
-    for(int index = 0; index < mDataContainer->itemCount(); index++)
-    {
-        CntContactCardDataItem* dataItem = mDataContainer->dataItem(index);
+
+
+    do {
+        if (mListPopulationProgress == mDataContainer->itemCount() || mStopListPopulation) {
+            // population of the list has completed
+            mListPopulationProgress = CntListPopulationNotInProgress;
+            mStopListPopulation = false;
+            return;
+        }
+
+        CntContactCardDataItem* dataItem = mDataContainer->dataItem(mListPopulationProgress);
         int pos = dataItem->position();
-        
+
         // communication methods
         if (pos < CntContactCardDataItem::ESeparator && dataItem->isFocusable())
         { 
-            CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget);
+            CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget);
             mDetailPtrs.append(item);
 
             connect(item, SIGNAL(clicked()), this, SLOT(onItemActivated()));
@@ -499,7 +527,7 @@
             //other details
             else
             {
-                CntContactCardDetailItem* item = new CntContactCardDetailItem(index, containerWidget, false);
+                CntContactCardDetailItem* item = new CntContactCardDetailItem(mListPopulationProgress, mContainerWidget, false);
                 mDetailPtrs.append(item);
                 
                 //To check whether maptile status  icon is set with the address 
@@ -540,7 +568,17 @@
                 mContainerLayout->addItem(item);
             }
         }
+    
+        ++mListPopulationProgress;
+    } while (mListPopulationProgress < CntInitialPopulation);
+
+    if (mListPopulationProgress <= CntInitialPopulation) {
+        QObject::connect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(populateListItems()));
+    } else {
+        HbApplication::instance()->postEvent(this, new QEvent(ProcessPopulateListEvent));
     }
+
+    CNT_EXIT
 }
 
 /*
@@ -864,6 +902,13 @@
     QContactId id = mContact->id();
     CntFavourite::addContactToFavouriteGroup( contactManager(), id );
     
+    QContact c = contactManager()->contact(mContact->localId());
+    
+    delete mContact;
+    mContact = NULL;
+    
+    mContact = new QContact(c);
+    
     qobject_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible(true);
     qobject_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible(false);
     mHeadingItem->setFavoriteStatus(true);  
@@ -873,6 +918,13 @@
 {
     QContactId id = mContact->id();   
     CntFavourite::removeContactFromFavouriteGroup( contactManager(), id );
+    
+    QContact c = contactManager()->contact(mContact->localId());
+    
+    delete mContact;
+    mContact = NULL;
+    
+    mContact = new QContact(c);
 
     qobject_cast<HbAction *>(document()->findObject("cnt:removefromfavorite"))->setVisible(false);
     qobject_cast<HbAction *>(document()->findObject("cnt:setasfavorite"))->setVisible(true);
@@ -1295,6 +1347,31 @@
     {
         tmpContact.removeDetail( &a );
     }
+    
+    //temproral solution for a contact without name - add an empty name,
+    //so vcard construction doesn't fail
+    //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2
+    //(part of QtVersit) is available in the platform
+    QList<QContactName> names = tmpContact.details<QContactName>();
+    if (names.count() > 0)
+    {
+        QContactName name = names.at(0);
+        if (name.firstName().isEmpty() && name.lastName().isEmpty())
+        {
+            //empty first and last names - update with empty string
+            name.setFirstName(QString(""));
+            tmpContact.saveDetail(&name);
+        }
+    }
+    else
+    {
+        //no name detail - create one
+        QContactName name;
+        name.setFirstName(QString(""));
+        tmpContact.saveDetail(&name);
+    } //temproral solution for a contact without name - add an empty name,
+      //so vcard construction doesn't fail - end
+    
     list.append( tmpContact );
     
     QString tempDir = QDir::tempPath().append("/tempcntvcard");
@@ -1333,8 +1410,10 @@
     vCardPath = QDir::toNativeSeparators(vCardPath);
     
     QVersitContactExporter exporter;
-    CntVCardDetailHandler hanlder;
-    exporter.setDetailHandler(&hanlder);
+    //TODO: use custom handler again when new QVersitContactExporterDetailHandlerV2
+    //(part of QtVersit) is available in the platform
+    //CntVCardDetailHandler hanlder;
+    //exporter.setDetailHandler(&hanlder);
     // The vCard version needs to be 2.1 due to backward compatiblity when sending 
     if (exporter.exportContacts(list, QVersitDocument::VCard21Type))
     {
@@ -1357,7 +1436,7 @@
             }
             QStringList l;
             l << vCardPath;
-            mShareUi->send(l,false);
+            mShareUi->send(l, true);
         }
     }
     
@@ -1453,6 +1532,11 @@
 
 bool CntContactCardViewPrivate::eventFilter(QObject *obj, QEvent *event)
 {
+    if (event->type() == ProcessPopulateListEvent && obj == this) {
+        populateListItems();
+        return true;
+    }
+
     if (event->type() == QEvent::KeyPress && obj == mView->mainWindow())
     {
         QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
--- a/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdefaultviewfactory.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -46,6 +46,7 @@
 
 CntDefaultViewFactory::~CntDefaultViewFactory()
 {
+    
 }
 
 CntAbstractView* CntDefaultViewFactory::createView( int aId )
--- a/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdefaultviewmanager.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -40,8 +40,6 @@
     CNT_ENTRY
     
     mEngine = new CntDefaultEngine( *this );
-    setViewFactory( new CntDefaultViewFactory( mEngine->extensionManager()) );
-    setViewNavigator( new CntViewNavigator(this) );
 
     int error = -1;
     mSimUtility = new CntSimUtility(CntSimUtility::AdnStore, error);
--- a/phonebookui/pbkcommonui/src/cntdetaileditor.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdetaileditor.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -35,6 +35,7 @@
 #include <hbscrollbar.h>
 #include <hbdevicenotificationdialog.h>
 #include <hbparameterlengthlimiter.h>
+#include <hbshrinkingvkbhost.h>
 
 #include <QApplication>
 #include <QTimer>
@@ -51,7 +52,8 @@
     mViewManager(NULL),
     mEditorFactory(NULL),
     mCancel(NULL),
-    mSaveManager(NULL)
+    mSaveManager(NULL),
+    mVirtualKeyboard(NULL)
 {
     bool ok;
     document()->load(CNT_DETAILEDITOR_XML, &ok);
@@ -88,6 +90,8 @@
     mEditorFactory = NULL;
     delete mSaveManager;
     mSaveManager = NULL;
+    delete mVirtualKeyboard;
+    mVirtualKeyboard = NULL;
 }
 
 void CntDetailEditor::setViewId( int aId )
@@ -163,6 +167,11 @@
     mDataForm->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); 
     mDataForm->setScrollingStyle(HbScrollArea::PanWithFollowOn);
     mDataForm->verticalScrollBar()->setInteractive(true);
+    
+    mVirtualKeyboard = new HbShrinkingVkbHost(mView);
+        
+    connect(mVirtualKeyboard, SIGNAL(keypadOpened()), this, SLOT(handleKeypadOpen()));
+    connect(mVirtualKeyboard, SIGNAL(keypadClosed()), this, SLOT(handleKeypadClosed()));
 }
 
 void CntDetailEditor::deactivate()
@@ -230,7 +239,7 @@
             
             if (modelItem->contentWidgetData( "preferDigits" ).toBool())
             {
-                edit->setInputMethodHints( Qt::ImhPreferNumbers );
+                edit->setInputMethodHints( Qt::ImhPreferNumbers | Qt::ImhNoPredictiveText );
             }
             
             objName = mDataFormModel->detail().definitionName() + " line edit %1";
@@ -370,4 +379,21 @@
     CNT_EXIT
 }
 
+void CntDetailEditor::handleKeypadOpen()
+{
+    CNT_ENTRY
+    
+  // enable full screen
+    mView->setContentFullScreen(true);
+    CNT_EXIT
+}
+
+void CntDetailEditor::handleKeypadClosed()
+{
+    CNT_ENTRY
+    // disable full screen
+    mView->setContentFullScreen(false);
+    CNT_EXIT
+}
+
 // End of File
--- a/phonebookui/pbkcommonui/src/cnteditview_p.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditview_p.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -767,6 +767,7 @@
     QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND );
     connect(&cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), 
         this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)), Qt::UniqueConnection);
+    
 	CNT_EXIT
 }
 
--- a/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -93,7 +93,7 @@
                 
                 if ( subtype == QContactOnlineAccount::SubTypeSip )
                 {
-                    detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") );
+                    detailItem->addText( hbTrId("txt_phob_formlabel_sip") );
                     detailItem->addText( number.accountUri() );
                     list.append( detailItem );
                 }
--- a/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnteditviewlistmodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -25,8 +25,9 @@
 #include <QDir>
 
 CntEditViewListModel::CntEditViewListModel( QContact& aContact, CntExtensionManager& aMgr ) :
-mContact( aContact ),
-mManager( aMgr )
+mManager( aMgr ),
+mContact( aContact )
+
 {
     mLookupTable.insert( EPhonenumber,    -1 );
     mLookupTable.insert( EEmailAddress,   -1 );
--- a/phonebookui/pbkcommonui/src/cntfavourite.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfavourite.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -15,69 +15,78 @@
 *
 */
 #include "cntfavourite.h"
+#include <cntglobal.h>
+#include <QDebug>
 
-QContactLocalId CntFavourite::createFavouriteGroup( QContactManager* aManager )
+int CntFavourite::mCachedSymbianFavouriteId = 0;
+
+QContactLocalId CntFavourite::createFavouriteGroup(QContactManager* aManager)
 {
    QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
     
-   if ( favouriteId == 0 )
-   {
+   if (favouriteId == 0) {
        QContact favouriteGroup;
        favouriteGroup.setType( QContactType::TypeGroup );
 
        QContactName favouriteGroupName;
        favouriteGroupName.setCustomLabel( QLatin1String(FavouriteGroupName) );
 
-       favouriteGroup.saveDetail( &favouriteGroupName );
-       if ( aManager->saveContact( &favouriteGroup ) )
-       {
+       favouriteGroup.saveDetail(&favouriteGroupName);
+       if (aManager->saveContact(&favouriteGroup)) {
            favouriteId = favouriteGroup.localId();
+           if (aManager->managerUri() == SYMBIAN_BACKEND) {
+               mCachedSymbianFavouriteId = favouriteId;
+           }
        }
    }
+
    return favouriteId;
 }
 
-QContactLocalId CntFavourite::favouriteGroupId( QContactManager* aManager )
+QContactLocalId CntFavourite::favouriteGroupId(QContactManager* aManager)
 {
-    QContactLocalId favouriteId( 0 );
+    QContactLocalId favouriteId(0);
+   
+    if (mCachedSymbianFavouriteId != 0 && aManager->managerUri() == SYMBIAN_BACKEND) {
+        favouriteId = mCachedSymbianFavouriteId;
+    } else {
+        QContactDetailFilter groupFilter;
+        groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
+        groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
     
-    QContactDetailFilter groupFilter;
-    groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
-    groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
-
-    QList<QContactLocalId> groupContactIds = aManager->contactIds( groupFilter );
-        
-    for(int i = 0;i < groupContactIds.count();i++)
-    {
-        QContact contact = aManager->contact(groupContactIds.at(i));
-        QContactName contactName = contact.detail<QContactName>();
-        QString groupName = contactName.customLabel();
-        if ( groupName.compare(QLatin1String(FavouriteGroupName)) == 0 )
-        {
-            favouriteId = groupContactIds.at(i);
-            break;
+        QList<QContactLocalId> groupContactIds = aManager->contactIds( groupFilter );
+            
+        for (int i = 0; i < groupContactIds.count(); i++) {
+            QContactFetchHint noRelationshipsFetchHint;
+            noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
+            QContact contact = aManager->contact(groupContactIds.at(i), noRelationshipsFetchHint);
+            QContactName contactName = contact.detail<QContactName>();
+            QString groupName = contactName.customLabel();
+            if (groupName.compare(QLatin1String(FavouriteGroupName)) == 0) {
+                favouriteId = groupContactIds.at(i);
+                if (aManager->managerUri() == SYMBIAN_BACKEND) {
+                    mCachedSymbianFavouriteId = favouriteId;
+                }
+                break;
+            }
         }
     }
-
+    
     return favouriteId;
 }
 
-bool CntFavourite::isMemberOfFavouriteGroup( QContactManager* aManager, QContact* aContact )
+bool CntFavourite::isMemberOfFavouriteGroup(QContactManager* contactManager, QContact* contact)
 {
-    bool favouriteGroupContact( false );
-    QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager );
-    if ( favouriteId != 0 )
-    {
-        QContact favoriteGroup = aManager->contact( favouriteId );
-        QContactRelationshipFilter rFilter;
-        rFilter.setRelationshipType( QContactRelationship::HasMember );
-        rFilter.setRelatedContactRole( QContactRelationship::First );
-        rFilter.setRelatedContactId( favoriteGroup.id() );
-            
-        QList<QContactLocalId> contactsLocalIdList = aManager->contactIds( rFilter );
-        favouriteGroupContact = contactsLocalIdList.contains( aContact->localId() );
-    }
-    return favouriteGroupContact;
+    QContactId favouriteId;
+    favouriteId.setManagerUri(contactManager->managerUri());
+    favouriteId.setLocalId(CntFavourite::favouriteGroupId(contactManager));
+
+    QContactRelationship favouriteMembership;
+    favouriteMembership.setFirst(favouriteId);
+    favouriteMembership.setSecond(contact->id());
+    favouriteMembership.setRelationshipType(QContactRelationship::HasMember);
+
+    return contact->relationships().contains(favouriteMembership);
 }
 
 void CntFavourite::addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId)
@@ -100,17 +109,17 @@
     aManager->saveRelationship( &relationship );
 }
 
-void CntFavourite::removeContactFromFavouriteGroup( QContactManager* aManager, QContactId& aId )
+void CntFavourite::removeContactFromFavouriteGroup(QContactManager* aManager, QContactId& aId)
 {
-    QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager );
-    if ( favouriteId != 0 )
-    {
-        QContact favoriteGroup = aManager->contact( favouriteId );
+    QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
+    if (favouriteId != 0) {
+        QContact favoriteGroup = aManager->contact(favouriteId);
         QContactRelationship relationship;
-        relationship.setRelationshipType( QContactRelationship::HasMember );
-        relationship.setFirst( favoriteGroup.id() );
-        relationship.setSecond( aId );
+        relationship.setRelationshipType(QContactRelationship::HasMember);
+        relationship.setFirst(favoriteGroup.id());
+        relationship.setSecond(aId);
         aManager->removeRelationship(relationship);
     }
 }
+
 // End of File
--- a/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfetchcontactpopup.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -33,6 +33,7 @@
 #include <hbaction.h>
 #include <hbstaticvkbhost.h>
 #include <hbstyleloader.h>
+#include <hbstyle.h>
 
 #include <QGraphicsLinearLayout>
 #include <QCoreApplication>
@@ -99,7 +100,6 @@
 {
     CntFetchContactPopup* popup = new CntFetchContactPopup( aManager );
     popup->constructPopupDialog( aTitle, aAction, HbAbstractItemView::MultiSelection );
-    
     return popup;
 }
 
@@ -157,12 +157,21 @@
 void CntFetchContactPopup::handleKeypadOpen()
 {
     CNT_ENTRY
+    
     HbListViewItem* prototype = mListView->listItemPrototype();
     prototype->setTextFormat( Qt::RichText );
     
+    qreal margin;
+    HbStyle style;
+    style.parameter("hb-param-margin-gene-popup", margin);
+
+    if (mPopup->mainWindow()->orientation() == Qt::Horizontal)
+        margin /= 2;
+    
     qreal height = mPopup->size().height() - 
             mVirtualKeyboard->keyboardArea().height() - 
-            mSearch->size().height();
+            mSearch->size().height() +
+            margin;
     
     // in single selection we don't have the "mark all" option
     if ( mMarkAll->isVisible() )
@@ -178,6 +187,7 @@
 void CntFetchContactPopup::handleKeypadClosed()
 {
     CNT_ENTRY
+    
     if (mSearch->criteria().isEmpty())
     {
         HbListViewItem* prototype = mListView->listItemPrototype();
@@ -330,7 +340,7 @@
     mIdList.clear();
     mTitle = aTitle;
     
-    mPopup->setAttribute( Qt::WA_DeleteOnClose, true );    
+    mPopup->setAttribute( Qt::WA_DeleteOnClose, true );
     
     QContactDetailFilter contactsFilter;
     contactsFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
@@ -374,8 +384,9 @@
     }
     else
     {
+        mMarkAll->setMaxContactCount( mModel->rowCount() );
         mMarkAll->setSelectedContactCount( 0 );
-        mMarkAll->setMaxContactCount( mModel->rowCount() );
+        
         connect(mSelectionModel, SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
                 this, SLOT(contactsSelected(const QItemSelection&, const QItemSelection&)) );
             
--- a/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfetchmarkall.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -39,9 +39,9 @@
     mCounterLabel = new HbTextItem( this );
     
     mFrame = new HbFrameItem(this);
-    mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox_normal");
+    mFrame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox");
     mFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-    mFrame->setZValue(-2);
+    mFrame->setZValue(-5);
     
     style()->setItemName(mFrame, "background");
            
@@ -66,6 +66,12 @@
         mCheckBox->setCheckState( Qt::Unchecked );
         blockSignals( false );
     }
+    else if (mSelectionCount == mContactCount)
+    {
+        blockSignals( true );
+        mCheckBox->setCheckState( Qt::Checked );
+        blockSignals( false );
+    }
 }
 
 CntFetchMarkAll::~CntFetchMarkAll()
--- a/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupactionsview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -277,32 +277,37 @@
 {
     Q_UNUSED(contact);
     
-    if (action.compare("message", Qt::CaseInsensitive) == 0) {
+    if (action.compare("message", Qt::CaseInsensitive) == 0)
+    {
         QContactPhoneNumber phoneNumber = static_cast<QContactPhoneNumber>(detail);
         mMessageActionParams.insert(phoneNumber.number(),QVariant(contact.displayLabel()));
     }
-    else if (action.compare("email", Qt::CaseInsensitive) == 0) {
+    else if (action.compare("email", Qt::CaseInsensitive) == 0)
+    {
         QContactEmailAddress email = static_cast<QContactEmailAddress>(detail);
         mEmailActionParams.append(email.emailAddress());
     }
     
     //actionpopup executed, decrement counter
     mPopupCount--;
-    if (mPopupCount==0) {
+    if (mPopupCount==0)
+    {
         QVariantMap map;
         QVariant params;
-        if (action.compare("message", Qt::CaseInsensitive) == 0) {
+        if (action.compare("message", Qt::CaseInsensitive) == 0)
+        {
             params.setValue(mMessageActionParams);
         }
-        else if (action.compare("email", Qt::CaseInsensitive) == 0) {
+        else if (action.compare("email", Qt::CaseInsensitive) == 0)
+        {
             params.setValue(mEmailActionParams);
         }
         map.insert(action,params);
-        
+
         CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action);
         connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*)));
         other->execute(*mGroupContact, QContactDetail(), map);
-        }
+    }
 }
 
 bool CntGroupActionsView::eventFilter(QObject *obj, QEvent *event)
@@ -354,6 +359,32 @@
 {
     //actionpopup cancelled, decrement counter
     mPopupCount--;
+    
+    if (mPopupCount==0)
+    {
+        QVariantMap map;
+        QVariant params;
+        QString action;
+        if (mMessageActionParams.count())
+        {
+            params.setValue(mMessageActionParams);
+            action = "message";
+        }
+        else if (mEmailActionParams.count())
+        {
+            params.setValue(mEmailActionParams);
+            action = "email";
+        }
+        else
+        {
+            return;
+        }
+        map.insert(action,params);
+
+        CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), action);
+        connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*)));
+        other->execute(*mGroupContact, QContactDetail(), map);
+    }
 }
 
 
--- a/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupdeletepopup.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -18,7 +18,7 @@
 #include "cntgroupdeletepopup.h"
 #include <cntabstractengine.h>
 #include "cntglobal.h"
-#include <hbgroupbox.h>
+#include <hblabel.h>
 #include <hbaction.h>
 #include <hblistview.h>
 #include <hblistviewitem.h>
@@ -41,8 +41,8 @@
 
 void CntGroupDeletePopup::populateListOfGroup()
 {
-    HbGroupBox *headingLabel = new HbGroupBox(this);   
-    headingLabel->setHeading(hbTrId("txt_phob_opt_delete_groups"));
+    HbLabel *headingLabel = new HbLabel(this);   
+    headingLabel->setPlainText(hbTrId("txt_phob_opt_delete_groups"));
     
     setHeadingWidget(headingLabel);
 
--- a/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntgroupeditormodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -48,6 +48,7 @@
     iNameItem->setContentWidgetData("text", iGroupName.customLabel());
     iNameItem->setContentWidgetData("maxLength", CNT_GROUPNAME_MAXLENGTH);
     iNumberItem->setContentWidgetData("text", iGroupConfCallNumber.number() );
+    iNumberItem->setContentWidgetData("maxLength", CNT_PHONENUMBER_EDITOR_MAXLENGTH);
     
     HbDataFormModelItem* root = invisibleRootItem();
     appendDataFormItem( iNameItem, root);
--- a/phonebookui/pbkcommonui/src/cnthistoryview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnthistoryview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -152,6 +152,10 @@
         this, SLOT(showClearHistoryMenu()));
     connect(mHistoryModel, SIGNAL(layoutChanged()),
         this, SLOT(updateScrollingPosition()));
+    connect(mHistoryModel, SIGNAL(modelReset()),
+        this, SLOT(updateScrollingPosition()));
+    connect(mHistoryModel, SIGNAL(modelReset()),
+        this, SLOT(showClearHistoryMenu()));
     
     // Connect the menu options to respective slots
     mClearHistory = static_cast<HbAction*>(docLoader()->findObject("cnt:clearhistory"));
@@ -159,10 +163,6 @@
     connect(mClearHistory, SIGNAL(triggered()), this, SLOT(clearHistory()));
     showClearHistoryMenu();
     
-    HbMainWindow* mainWindow = mView->mainWindow();
-    connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), 
-            this, SLOT(updateScrollingPosition()));
-    
     connect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), 
         this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)));
 }
@@ -258,7 +258,7 @@
     
         delete mRequest;
         mRequest = NULL;
-        mRequest = appMng.create(interface, operation, false); // not embedded
+        mRequest = appMng.create(interface, operation, true); // embedded
         
         if ( mRequest ) {
             mRequest->setArguments(args); 
--- a/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cnthistoryviewitem.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -16,6 +16,7 @@
  */
 
 #include "cnthistoryviewitem.h"
+#include "cntdebug.h"
 
 #include <cnthistorymodel.h>
 #include <hbframedrawer.h>
@@ -37,6 +38,9 @@
   mNewItem(NULL),
   mFocusItem(NULL)
 {
+    CNT_ENTRY
+    
+    CNT_EXIT
 }
 
 //---------------------------------------------------------------
@@ -54,9 +58,13 @@
 //---------------------------------------------------------------
 void CntHistoryViewItem::updateChildItems()
 {
+    CNT_ENTRY
+    
     int flags = modelIndex().data(CntFlagsRole).toInt();
     mIncoming = flags & CntIncoming ? true : false;
     mNewMessage = flags & CntUnseen ? true : false;
+    
+    CNT_LOG_ARGS(mIncoming << mNewMessage)
 
     if (mNewMessage)
     {
@@ -76,6 +84,10 @@
     }
     
     HbListViewItem::updateChildItems();
+    
+    repolish();
+    
+    CNT_EXIT
 }
 
 //---------------------------------------------------------------
@@ -84,6 +96,8 @@
 //---------------------------------------------------------------
 void CntHistoryViewItem::pressStateChanged(bool pressed, bool animate)
 {
+    CNT_ENTRY
+    
     Q_UNUSED(animate);
     if (pressed)
     {
@@ -117,27 +131,8 @@
             mFocusItem = NULL;
         }
     }
-}
-
-bool CntHistoryViewItem::event(QEvent* e)
-{
-    bool result;
-    if (e->type() == QEvent::GraphicsSceneResize)
-    {
-        // HbAbstractItemView has a performance improvement when drawing backrounds but seems
-        // to screw the layout of history view items. This workaround fixes the issue. There should
-        // be minimal performance drawbacks since GraphicsSceneResize events are quite few.
-        // TODO: Remove this once Orbit changes their implementation. Not known when
-        QGraphicsWidget *frame = static_cast<QGraphicsWidget*>(primitive("frame"));
-        QRectF frameGeometry = frame->geometry();
-        result = HbListViewItem::event(e);
-        frame->setGeometry(frameGeometry);
-    } 
-    else
-    {
-        result = HbListViewItem::event(e);
-    }
-    return result;
+    
+    CNT_EXIT
 }
 
 // EOF
--- a/phonebookui/pbkcommonui/src/cntimportsview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntimportsview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -287,17 +287,7 @@
     importSimItem->setData(HbIcon("qtg_large_sim"), Qt::DecorationRole);   
      
     mModel->insertRow(0,importSimItem);
-    
-    QStandardItem *importDeviceItem = new QStandardItem();
-    QStringList deviceList;
-    QString deviceImport(hbTrId("txt_phob_dblist_import_from_device"));
-    deviceList << deviceImport;
-    importDeviceItem->setData(deviceList, Qt::DisplayRole);
-    importDeviceItem->setData(HbIcon("qtg_large_data_import"), Qt::DecorationRole);
-    importDeviceItem->setEnabled(false);
-       
-    mModel->insertRow(1,importDeviceItem);
-    
+        
     mListView->setModel(mModel);
     mListView->setSelectionMode(HbAbstractItemView::NoSelection);
     connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(endKeyPressed()));
--- a/phonebookui/pbkcommonui/src/cntkeygrabber.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntkeygrabber.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -17,14 +17,14 @@
 
 #include "cntkeygrabber.h"
 
-#include <logsservices.h>
 #include <hbmainwindow.h>
 #include <xqaiwrequest.h>
 #include <xqaiwdecl.h>
 #include <xqappmgr.h>
 #include <QCoreApplication>
 #include <QKeyEvent>
-
+#include <xqserviceutil.h>
+#include <xqkeycapture.h>
 /*!
     Key press event handler for default actions when pressing either send or end key.
     End key closes the application and send key opens dialer. Default functionality
@@ -36,9 +36,11 @@
 CntKeyGrabber::CntKeyGrabber(HbMainWindow *window, QObject *parent) :
     QObject(parent),
     mMainWindow(window),
-    mRequest(NULL)
+    mRequest(NULL),
+    mKeyCapture(NULL)
 {
     mMainWindow->installEventFilter(this);
+    mKeyCapture = new XqKeyCapture();
 }
 
 /*!
@@ -47,6 +49,12 @@
 CntKeyGrabber::~CntKeyGrabber()
 {
     delete mRequest;
+    if ( mKeyCapture )
+    {
+        mKeyCapture->cancelCaptureKey(Qt::Key_Yes);
+    }
+    delete mKeyCapture;
+    mKeyCapture = NULL;
 }
 
 /*!
@@ -59,7 +67,15 @@
 */
 bool CntKeyGrabber::eventFilter(QObject *obj, QEvent *event)
 {
-    if (event->type() == QEvent::KeyPress && obj == mMainWindow)
+    if ( event->type() == QEvent::ApplicationActivate )
+    {
+        mKeyCapture->captureKey( Qt::Key_Yes );
+    }
+    else if ( event->type() == QEvent::ApplicationDeactivate )
+    {
+        mKeyCapture->cancelCaptureKey( Qt::Key_Yes );
+    }
+    else if (event->type() == QEvent::KeyPress && obj == mMainWindow)
     {
         QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
         
@@ -85,7 +101,7 @@
             {
                 QList<QVariant> args;
                 QVariantMap map;
-                map.insert(XQLOGS_VIEW_INDEX, QVariant(int(LogsServices::ViewAll)));
+                map.insert(XQLOGS_VIEW_INDEX, QVariant(int(XQService::LogsViewAll)));
                 map.insert(XQLOGS_SHOW_DIALPAD, QVariant(true));
                 map.insert(XQLOGS_DIALPAD_TEXT, QVariant(QString()));
                 args.append(QVariant(map));
--- a/phonebookui/pbkcommonui/src/cntmainwindow.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntmainwindow.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -18,16 +18,18 @@
 #include "cntmainwindow.h"
 #include "cntdefaultviewmanager.h"
 #include "cntviewnavigator.h"
+#include "cntabstractviewfactory.h"
 #include "cntkeygrabber.h"
 #include <cntdebug.h>
+#include <cntabstractengine.h>
+
 
 CntMainWindow::CntMainWindow(QWidget *parent, int defaultView)
     : HbMainWindow(parent),
-    mViewManager(NULL),
-    mDefaultView(defaultView)
+    mViewManager( NULL ),
+    mDefaultView( defaultView )
 {
     CNT_ENTRY
-    
     CntKeyGrabber *keyGrabber = new CntKeyGrabber(this, this);
     
     if (defaultView != noView)
@@ -45,6 +47,7 @@
                 
         mViewManager = new CntDefaultViewManager( this );
         mViewManager->setViewNavigator( navigator );
+        mViewManager->setViewFactory( new CntDefaultViewFactory( mViewManager->engine().extensionManager()) );
         
         //activate the view
         CntViewParameters viewParameters;
@@ -61,7 +64,7 @@
 
     delete mViewManager;
     mViewManager = NULL;
-
+    
     CNT_EXIT
 }
 
--- a/phonebookui/pbkcommonui/src/cntnamesview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntnamesview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -55,12 +55,12 @@
 bool CntNamesView::isDefault() const 
 { 
     Q_D(const CntNamesView);
-    return d->mIsDefault; 
+    return true; 
 }
 int CntNamesView::viewId() const 
 {
     Q_D(const CntNamesView);
-    return d->mId; 
+    return namesView;
 }
 
 void CntNamesView::setEngine( CntAbstractEngine& aEngine )
--- a/phonebookui/pbkcommonui/src/cntnamesview_p.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntnamesview_p.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -22,6 +22,7 @@
 #include "cntglobal.h"
 #include "cntdebug.h"
 #include "cntapplication.h"
+#include "cntfavourite.h"
 #include <cntabstractengine.h>
 
 #include <cntuiextensionfactory.h>
@@ -51,6 +52,7 @@
 
 const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml";
 static const int CNT_MIN_ROW_COUNT = 2;
+bool CntNamesViewPrivate::mIsFirstTimeUse = true;
 
 CntNamesViewPrivate::CntNamesViewPrivate() :
     QObject(),
@@ -64,8 +66,6 @@
     mNamesAction(NULL),
     mMenuBuilder(NULL),
     mHandledContactId(0),
-    mIsDefault(true),
-    mId( namesView ),
     mActionGroup(NULL),
 	mMenu(NULL),
 	mFilterChanged(false)
@@ -145,6 +145,22 @@
     CNT_EXIT
 }
 
+void CntNamesViewPrivate::handleImportContacts( HbAction *aAction )
+{
+    CNT_ENTRY
+    
+    HbDialog *popup = static_cast<HbDialog*>(sender());
+    
+    if (popup && aAction == popup->actions().first())
+    {
+        CntViewParameters args;        
+        args.insert(EViewId, importsView);
+        mViewManager->changeView(args);
+    }
+          
+    CNT_EXIT
+}
+
 void CntNamesViewPrivate::switchOrientation()
 {
     HbMainWindow* win = mView->mainWindow();
@@ -234,6 +250,46 @@
         showFinder();
     }
     
+    if (mIsFirstTimeUse)
+    {
+        // Disable FTU flag
+        mIsFirstTimeUse = false;
+        
+        // Show import contacts popup only if there no local contacts
+        // Check row count from list model and exclude dummy mycard
+        if (mListModel->rowCount()==1 && mListModel->myCardId()<= 0)
+        {
+            // Default filter to fetch all contacts and groups
+            QContactFilter filter;
+            QList<QContactLocalId> contactIds = contactManager->contactIds(filter);
+            
+            // Check if favourite group contact exists
+            // Favourite group contact is created by default in phonebook
+            int favouriteId = CntFavourite::favouriteGroupId(contactManager);
+            if ( (contactIds.isEmpty() )
+                 || (contactIds.count() == 1 && contactIds.at(0) == favouriteId) )
+            {
+                HbMessageBox *note = new HbMessageBox();
+                note->setDismissPolicy(HbDialog::NoDismiss);
+                note->setTimeout(HbPopup::NoTimeout);
+                note->setBackgroundFaded(true);
+                note->setAttribute(Qt::WA_DeleteOnClose, true);
+                note->setStandardButtons(HbMessageBox::NoButton);
+                note->addAction(new HbAction(hbTrId("txt_phob_button_import"), note));
+                note->addAction(new HbAction(hbTrId("txt_common_button_cancel"), note));
+                    
+                HbLabel *headingLabel = new HbLabel( note );
+                headingLabel->setPlainText(hbTrId("txt_phob_title_import_contacts")); 
+                note->setHeadingWidget(headingLabel);
+                
+                note->setIcon(HbIcon("qtg_large_sim"));
+                note->setText(hbTrId("txt_phob_info_your_phonebook_is_empty_do_you_wish"));
+                
+                note->open(this, SLOT(handleImportContacts(HbAction*)));
+            }
+        }
+    }
+
     CNT_EXIT
 }
 
@@ -687,4 +743,5 @@
     return mLoader;
 }
 
+
 // End of File
--- a/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -324,7 +324,7 @@
     model->appendRow(internetwork);
           
     QStandardItem *sip = new QStandardItem;
-    sip->setText(hbTrId("txt_phob_formlabel_val_sip"));
+    sip->setText(hbTrId("txt_phob_formlabel_sip"));
     sip->setData(subTypeSIP, DetailSubType);
     sip->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
     model->appendRow(sip);
--- a/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntsettingsmodel.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -77,13 +77,13 @@
     mNameListRowSettingkey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
                             KCRCntSettings.iUid,
                             KCntNameListRowSetting);
-    int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt();
+	int settingValue = mSettings.readItemValue(*mNameListRowSettingkey, XQSettingsManager::TypeInt).toInt();
     
     if (settingValue == CntOneRowNameOnly) {
-        rowSetting->setContentWidgetData("currentIndex", 0 );
-    } else if (settingValue == CntTwoRowsNameAndPhoneNumber) {
-        rowSetting->setContentWidgetData("currentIndex", 1 );
-    }    
+         rowSetting->setContentWidgetData("currentIndex", 0 );
+	} else if (settingValue == CntTwoRowsNameAndPhoneNumber) {
+         rowSetting->setContentWidgetData("currentIndex", 1 );
+    }
 }
 
 CntSettingsModel::~CntSettingsModel()
@@ -112,7 +112,7 @@
     }
     else if (topLeft.row() == 1) {
         int selected = itemFromIndex(topLeft)->contentWidgetData( "currentIndex" ).toInt();
-        if (selected == 0) {
+		if (selected == 0) {
             written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntOneRowNameOnly));
         } else if (selected == 1) {
             written = mSettings.writeItemValue(*mNameListRowSettingkey, QVariant(CntTwoRowsNameAndPhoneNumber));
--- a/phonebookui/pbkcommonui/src/cntsettingsview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntsettingsview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -44,7 +44,7 @@
     mForm = static_cast<HbDataForm*> (document()->findWidget(QString("dataForm")));
     mForm->setItemRecycling(true);
     
-    mModel = new CntSettingsModel();
+	mModel = new CntSettingsModel();
     mForm->setModel( mModel );
     
     mBack = new HbAction(Hb::BackNaviAction, mView);
--- a/phonebookui/pbkcommonui/src/cntviewnavigator.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntviewnavigator.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -22,10 +22,12 @@
     QObject( aParent ),
     iTop( noView )
 {
+    
 }
 
 CntViewNavigator::~CntViewNavigator()
-{   
+{
+    
 }
 
 void CntViewNavigator::next( const int& aId, QFlags<Hb::ViewSwitchFlag> &flags )
--- a/phonebookui/phonebookapp/phonebookapp.pro	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookapp/phonebookapp.pro	Fri Sep 17 08:27:32 2010 +0300
@@ -52,7 +52,7 @@
 SOURCES += src/cntappservicehandler.cpp
 
 # capability
-TARGET.CAPABILITY = CAP_APPLICATION
+TARGET.CAPABILITY = CAP_APPLICATION NetworkControl
 
 TRANSLATIONS = contacts.ts
     
--- a/phonebookui/phonebookapp/src/main.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookapp/src/main.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -24,7 +24,9 @@
 
 int main(int argc, char **argv)
 {
+#if defined (TRACES) || defined (TRACE2FILE)
     qInstallMsgHandler(MSG_HANDLER);
+#endif
 
     CntApplication a( argc, argv );
 
--- a/phonebookui/phonebookservices/inc/cntservices.h	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/inc/cntservices.h	Fri Sep 17 08:27:32 2010 +0300
@@ -174,7 +174,15 @@
     void removeNotSupportedDetails(QContact& contact);
     void fillOnlineAccount( QContactOnlineAccount& account, const QString& value, const QString& subType, bool defaultForOnlineAccountIsImpp);
     QContactManager* contactManager();
-
+    
+    /**
+     * Checks if we already have the given contact global uid in database. If so,
+     * updates the local id and managerUri accordingly.
+     * 
+     * If given contact has already a local id, method does nothing.
+     */
+    void updateLocalId( QContact& aContact );
+    
 private: // from CntAbstractServiceProvider
     void CompleteServiceAndCloseApp(const QVariant& retValue);
     void overrideReturnValue(const QVariant& retValue);
--- a/phonebookui/phonebookservices/phonebookservices.pro	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/phonebookservices.pro	Fri Sep 17 08:27:32 2010 +0300
@@ -68,7 +68,7 @@
            src/cntservicesubeditview.cpp
 
 # capability
-TARGET.CAPABILITY = CAP_APPLICATION
+TARGET.CAPABILITY = CAP_APPLICATION NetworkControl
 
 TRANSLATIONS = contacts.ts
 
--- a/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntservicecontactfetchview.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -234,12 +234,6 @@
     
     // Set action filter
     mAction = aArgs.value(ESelectedAction).toString();
-    // ESelectedAction is defined in cntviewparams.h
-
-    // Has never been implemented.
-    //QString filterStr = aArgs.value(KCntServiceViewParamFilter).toString();
-    // KCntServiceViewParamFilter is defined in cntserviceviewparams.h
-
     if (mAction == KCntActionSms)
         {
             QContactActionFilter actionFilter;
@@ -254,9 +248,15 @@
         }
         else if (mAction == KCntActionEmail)
         {
-            QContactActionFilter actionFilter;
-            actionFilter.setActionName("email");
-            mListModel->setFilter(actionFilter);
+            QContactDetailFilter emailFilter;
+            emailFilter.setMatchFlags( QContactDetailFilter::MatchContains );
+            emailFilter.setDetailDefinitionName( 
+                    QContactEmailAddress::DefinitionName, 
+                    QContactEmailAddress::FieldEmailAddress );
+            // we need to give something to filter for the email filter
+            emailFilter.setValue( "@" );
+            mListModel->setFilter( emailFilter );
+            
         }
         else
         {
--- a/phonebookui/phonebookservices/src/cntservices.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntservices.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -83,15 +83,6 @@
     CntServiceViewManager* srvMng = static_cast<CntServiceViewManager*>(mViewManager);
     connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService()));
 }
-/*
-void CntServices::setViewManager( CntAbstractViewManager& aViewManager )
-{
-    CNT_LOG
-    mViewManager = &aViewManager;
-    CntServiceViewManager* srvMng = static_cast<CntServiceViewManager*>(mViewManager);
-    connect(srvMng, SIGNAL(applicationClosed()), this, SLOT(terminateService()));
-}
-*/
 
 void CntServices::singleFetch(
     const QString &title, const QString &action,
@@ -227,6 +218,9 @@
         }
     vCardFile.close();
     
+    // check if the contact is in db already.
+    updateLocalId( contact );
+    
     // Save thumbnail images
     QList<QContactThumbnail> details = contact.details<QContactThumbnail>();
     for (int i = 0;i < details.count();i++)
@@ -550,6 +544,33 @@
         }
     }
 
+void CntServices::updateLocalId( QContact& aContact )
+{
+    CNT_ENTRY
+    if ( aContact.localId() == 0 )
+        {
+        QContactGuid guid = aContact.detail<QContactGuid>();
+        QString guidString = guid.guid();
+            
+        QContactDetailFilter filter;
+        filter.setDetailDefinitionName( QContactGuid::DefinitionName, QContactGuid::FieldGuid );
+        filter.setValue( guid.guid() );
+            
+        QContactManager& cm = mEngine->contactManager( SYMBIAN_BACKEND );
+        QList<QContactLocalId> idList = cm.contactIds( filter, QList<QContactSortOrder>() );
+        int count = idList.count();
+        
+        if ( !idList.isEmpty() )
+            {
+            QContactId id;
+            id.setLocalId( idList.first() );
+            id.setManagerUri( cm.managerUri() );
+            
+            aContact.setId( id );
+            }
+        }
+    CNT_EXIT
+}
 // This method is inherited from CntAbstractServiceProvider
 void CntServices::CompleteServiceAndCloseApp(const QVariant& retValue)
 {
--- a/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntserviceviewfactory.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -33,10 +33,12 @@
 CntDefaultViewFactory( aMgr ),
 mProvider( aServiceProvider )
 {
+    
 }
 
 CntServiceViewFactory::~CntServiceViewFactory()
 {
+    
 }
     
 CntAbstractView* CntServiceViewFactory::createView( int aViewId )
--- a/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntserviceviewmanager.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -24,10 +24,10 @@
 CntServiceViewManager::CntServiceViewManager( HbMainWindow *mainWindow,
     CntAbstractServiceProvider& aProvider ):
     CntDefaultViewManager(mainWindow)
-    {
+{
     // ownership of the factory is given to the base class.
     setViewFactory( new CntServiceViewFactory( aProvider, engine().extensionManager() ) );
-    }
+}
 
 /*!
 Destructor
--- a/phonebookui/phonebookservices/src/main.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/src/main.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -19,6 +19,7 @@
 #include <hbmainwindow.h>
 #include <QTranslator>
 #include <QLocale>
+#include <QScopedPointer>
 #include "cntserviceproviderold.h"
 #include "cntserviceproviderold2.h"
 #include "cntserviceproviderfetch.h"
@@ -34,7 +35,9 @@
 
 int main(int argc, char **argv)
 {
+#if defined (TRACES) || defined (TRACE2FILE)
     qInstallMsgHandler(MSG_HANDLER);
+#endif
     
     HbApplication a( argc, argv );
 
@@ -58,12 +61,11 @@
     CntServices* services = new CntServices();
     services->setParent( &mainWindow ); // for ownership
 
-    CntServiceViewManager* viewManager = new CntServiceViewManager(
+    QScopedPointer<CntServiceViewManager> viewManager(new CntServiceViewManager(
         &mainWindow,
-        *services ); // as CntAbstractServiceProvider
+        *services )); // as CntAbstractServiceProvider
     viewManager->setViewNavigator( navigator );
 
-    //services->setViewManager( *viewManager );
     services->setEngine( viewManager->engine() );
 
     // These objects talk with QT Highway (send/receive)
--- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testpbkservices.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -683,7 +683,7 @@
     
     if ( aNewInterface )
     {
-        QString interface("com.nokia.symbian.IContactsFetch"); 
+        QString interface("com.nokia.symbian.IContactsEdit"); 
         // service name is not needed
         mRequest = appMng.create( interface, operation, true); // embedded
     }
--- a/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/phonebookservices/tsrc/qtpbkservicestestapp/testvcard.vcf	Fri Sep 17 08:27:32 2010 +0300
@@ -1,320 +1,45 @@
 BEGIN:VCARD
-VERSION:3.0
-FN:Alice Jones
-N:Jones;Alice;;;
-TEL;TYPE=HOME,CELL:555-4444
-TEL;TYPE=WORK,FAX:555-1212
-ADR;TYPE=WORK:;;Leeds West Yorkshire;;New York;10087;United States
-EMAIL:mailto:alice.jones@nokia.com
-TITLE:Assistant Manager
-ORG:;Services
-NOTE:This is the note for the vCard.
-BDAY:20100101
-X-SIP:Alice@yahoo.com
-PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAASw
- AA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAwICAgICAwICAwUDAwMFBQQDAwQFBgUFBQUFBggGBwcHB
- wYICAkKCgoJCAwMDAwMDA4ODg4OEBAQEBAQEBAQEAEDBAQGBgYMCAgMEg4MDhIUEBAQEBQREBAQ
- EBARERAQEBAQEBEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgBLAEsAwERAAIRAQM
- RAf/EANcAAQAABwEBAAAAAAAAAAAAAAABAgUGBwgJAwQBAQABBQEBAAAAAAAAAAAAAAABAgQFBg
- cDCBAAAQMDAgQEAwMFBwwNDQAAAQACAxEEBQYHITESCEFREwlhIhRxgTKRQiMVGaFSM9M0Fhjws
- YLSUySEJXWVFzjB0eFicpKyQ3S01DVlg6OzRFRklKTERYUmJxEAAgEDAgMCCAgMBQQDAAAAAAEC
- EQMEIQUxEgZBUWFxgZGxIjITocHR4VIUFQfw8UJiorLiIzMkNBZyglM1F8LSQyZEJTb/2gAMAwE
- AAhEDEQA/AOqaAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI
- AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAggIoAgIIAgIoAgCAIAgCAggCAICKAIC
- CAVQEUAQBAQQEUBAmiAVQEUAQBAEAQBAEAQBAEBA1pwSoJC4gqFqySNSVS6kEOojmqm0KEanmUY
- qiPEngVFAeczngijgKcx5qltrVqoqlxIteSRwp9qiM3JcKFOpP8AmqutCohWqlSTAr5IB1E8Cqg
- KnzSqAqQmgoQB81TIiqIOLvA0+1Q02tCGn2BvX18TX4ImqFVVwJuo14BQqgVKrDRKXOHAn71S2U
- 6vgRcSQADxUvgVUFXDhVCKqoL6eKjVFVGC5xHAqFIgfMeSqTqidCbiqWnUggSQqwQqaoU0Yc6g8
- vtVLdCqqROOSqBFAEAQBAEAQBAEBJKaAfaqJxbRKMDbq96OyWzGtLnQmuLy8iyttHHNLHb2hlYG
- ytD2/N1DwK2jb+m8/Msq5ZhzIxV3Pt2rjjJlo/tJO2Q/+v5EfH6E/wBuskujN3f/AIX8B4/a2P3
- n24P3Ee2nO5Wzw8OWvLaW9kZBFNdWnpQte9waC9/WaCp5q3u9H7tFVdl6eIrjuuO+02Tjuop4Y7
- i3cJY5Gh8cjTUOa4VBB8iFpzfK2no1pQy0eWSqj1B6vmCh6ktUZYW8u9WhditNRat1/LNDj5Zm2
- zX28XrP9Rw4VFQsttu25ObcduzHmdKlrkXrduKc3QwuPcj7ZC6gyGRqCBxsSOJ5fnrZX0Xuy1dv
- Txli91sU0Zshg9Q2Oo8HjdR45xdY5S3ivLZ7qNJimYJGkjw4FaVctStzlCfFOhlITUrfMYU3G76
- e3PbK/ucTlM+7K39k4su7LDxfWSRPBp0u4sbWvkVs2L0tuV6PNC06d704mNnuViPFli/tQ+2v/w
- Bl1CP/AMU3+PWR/sjdn/46eU8vtfG+kQ/ah9tnP6XUFP8AJTf49F0Puy/IT8o+18b6RH9qH22eF
- rqD/Nbf45T/AGRu3+n8I+2MfvPW29zvtqubhluY85AHf8/LjA2MfaRMT+4p/sfdv9P4SPtjH7zO
- +12+W1+82Ofktus/b5f0QDc2sbum4gr4SROo4Favuez5uBJLItuNeFeD8RksfItXfZZSN7O5TbH
- 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
- jmLTzb1hodT4VXrl7pm348ty7KUfotunmIhjWoOsYpPwIvYNIpwWLjrqz3Y6XE8UcE3VkogWFxF
- eFP3VVUpcaslEby414D4KOZ11R6N1QETmupUkFVI8lBrtIiMt4c1S+NSpskc2UyEdIoBwPinLR8
- 1Sp+zVcS3MjtnoXNassteZbA2lzqHHMMdllZIWOuImE1o15FeavLeXfjbcIzai+yp4O1GTq1qXJ
- 0OBqG+NanirJ6HtJtExY+oNOXJQ4VdahaIiY68+KqcmuBFCX0yOJJNfNRFt8URy+E9I2lvNVIlK
- hOpJCAIAgCAIAgIKKAEKQEBFAEBCnGqAEVUAIApAQEUAUAgpBFAQQBAEAQEUAQBAQUAIBQqQQ6U
- 7QR6QoYFFIIoAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC
- AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAID//Z
-UID:00000000de2f6d21-00e16017db094b12-56
-REV:2010-03-22T14:48:55
+VERSION:2.1
+N:Gump;Forrest
+FN:Forrest Gump
+ORG:Bubba Gump Shrimp Co.
+TITLE:Shrimp Man
+TEL;FOOBAR;VOICE:+1 (11) 555 1212
+TEL;HOME;VOICE:(404) 555-1212
+TEL;CELL;VOICE:+358 50 4871 460
+ADR;FOOBAR:;;100 Waters Edge;Baytown;LA;30314;United States of America
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0A=
+Baytown, LA 30314=0D=0A=
+United States of America
+ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
+LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0A=
+Baytown, LA 30314=0D=0A=
+United States of America
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
+EMAIL;PREF;INTERNET:forrestgump@example.com
+X-MS-CARDPICTURE;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CACUACcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6UdwpAPU0oIwSTxVeQ7nOPoKRj2B4FAEk
+ k4/g59zREMgk9fWoFGSKsr8qc+maAIJPnmx6cUUkIy5aigBw4yfSkpT93680lABEMtUs52xk
+ evFJAOabcHkLQA1DsiJ70US8Kq0UAK3Xim0vagdfpQBYhHy5qufmm/GrJ+SP6Cq0PLE0AJMc
+ vj0opjNlyfeigCTtTohyKb2qaEfyxQAlw2EA9ajT5YyfWluDlwPQUFSVCryeM0AV6KmEaLy5
+ 59KKAFHJxU0ZwoxyTzSBoz0Xn6UOSqEjigBDGN2X5J7CmSSEYCjbSRZLEnkgUyQgufSgBEG5
+ vmNFNAycCigCzEPmH50s56D8adEvyk/hTJGXeeMkcc9BQAkQIXPvUeFX7xyfQVK5Pl4OBwBx
+ UFAAXPRcKPaimUUAaJ4TJ7VUA3MPerMxxGfeoI+pPoKACY8Adjk1FT5fv49OKZQAyiiigC3c
+ HkD0psXC89zSSHLNTjwn0H86AISckmkoPWigBlFFFAFoPuIBHWnOVI5xzTI+pPoKSTqB6CgA
+ 2Ken6GmGP3/MU09aAxHQkUABRscc/Q0Ubz3AP4UUATp9xvwpj/fb60UUARnrRRRQAyiiigD/
+ 2Q==
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="fit" area="16" use="cardpicture"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="telhome" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Home</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrhome" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20100407T092228Z
 END:VCARD
--- a/phonebookui/rom/phonebook.iby	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/rom/phonebook.iby	Fri Sep 17 08:27:32 2010 +0300
@@ -34,7 +34,6 @@
 file=ABI_DIR\BUILD_DIR\pbkcommonui.dll                	SHARED_LIB_DIR\pbkcommonui.dll UNPAGED
 file=ABI_DIR\BUILD_DIR\phonebook.exe                  	SHARED_LIB_DIR\phonebook.exe
 
-S60_APP_AIF_RSC(phonebook)
 UPGRADABLE_APP_REG_RSC(phonebook)
 
 data=DATAZ_\RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin         				RESOURCE_FILES_DIR\qt\plugins\contacts\cntactionsplugin.qtplugin
--- a/phonebookui/rom/phonebookservices.iby	Thu Sep 02 20:16:15 2010 +0300
+++ b/phonebookui/rom/phonebookservices.iby	Fri Sep 17 08:27:32 2010 +0300
@@ -22,7 +22,6 @@
 
 file=ABI_DIR\UREL\phonebookservices.exe                   SHARED_LIB_DIR\phonebookservices.exe
 
-S60_APP_AIF_RSC(phonebookservices)
 S60_APP_RESOURCE(phonebookservices)
 UPGRADABLE_APP_REG_RSC(phonebookservices)
 
--- a/presencecache/inc/presencecacheids.hrh	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/inc/presencecacheids.hrh	Fri Sep 17 08:27:32 2010 +0300
@@ -26,19 +26,14 @@
 
 
 
-// Interface UID for Presencefeatures interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_INTERFACE             0x2000B185
 
 // Interface UID for PresenceCacheReader interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_READER         0x2000B4EC
 #define PRESENCECACHE_ECOM_IF_UID_READER         0xEF007001 // todo: official number
 
 // Interface UID for PresenceCacheWriter interface
-// #define XIMP_ECOM_IF_UID_PRESENCE_CACHE_WRITER         0x2000B4ED
 #define PRESENCECACHE_ECOM_IF_UID_WRITER         0xEF007002 // todo: official number
 
 // Default implementation resulution data
-// for XIMP presencefeature interterface Base ECom interface
 #define PRESENCECACHE_ECOM_DEFAULT_DATA_PRESENCE_INTERFACE         "default"
 
 
Binary file presencecache/presencecacheqt/tsrc/presencefeeddemo_qt/presencefeeddemo.sisx has changed
--- a/presencecache/presencecachesymbian/group/presencecacheuids.hrh	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/group/presencecacheuids.hrh	Fri Sep 17 08:27:32 2010 +0300
@@ -34,4 +34,4 @@
 #define PRESENCECACHE_DLL_UID_UTILS               0x2001B31C
 
 
-#endif // XIMPDLLUIDS_HRH
+#endif // PRESENCECACHEUIDS_HRH
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheserver.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -26,7 +26,7 @@
 #include "presencecacheserver.h"
 #include "presencecachesession.h"
 #include "presencecachedefs2.h"
-#include "presencetrace.h"
+#include "prestrace.h"
 #include "presencecachesecuritypolicy.h"
 
 //Include Cache server namespace
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecacheservicestore.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -21,7 +21,7 @@
 
 #include "presencecacheservicestore.h"
 #include "presencecachebuddystore.h"
-#include "presencetrace.h"
+#include "prestrace.h"
 #include "presenceobjecthelpers.h"
 
 // ---------------------------------------------------------------------------
--- a/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheserver2/src/presencecachesession.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -23,7 +23,7 @@
 #include "presenceobjecthelpers.h"
 #include "presencecachesession.h"
 #include "presencecacheserver.h"
-#include "presencetrace.h"
+#include "prestrace.h"
 #include "cacheobjecthelpers.h"
 #include "presencecacheservicestore.h"
 #include "presencecachebuddystore.h"
--- a/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp	Thu Sep 02 20:16:15 2010 +0300
+++ b/presencecache/presencecachesymbian/presencecacheutils/group/presencecacheutils.mmp	Fri Sep 17 08:27:32 2010 +0300
@@ -28,7 +28,7 @@
 VENDORID                VID_DEFAULT
 
 SOURCEPATH              ../src
-SOURCE                  presencetrace.cpp 
+SOURCE                  prestrace.cpp 
 SOURCE                  presencecachebuddyinfo.cpp
 SOURCE                  presenceobjecthelpers.cpp
 
--- a/presencecache/presencecachesymbian/presencecacheutils/inc/presencetrace.h	Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Presence Cache trace utilities
-*
-*/
-
-#ifndef PRESENCETRACE_H__
-#define PRESENCETRACE_H__
-
-#include <e32std.h>
-
-
-// CONSTANTS
-_LIT( KPresenceTraceLogDir, "presence" );
-_LIT( KPresenceTraceLogFile, "presence.log" );
-
-
- //TRACE INDIRECTION
-#ifdef _DEBUG
-
-    /**
-     * Trace handlers. Different statements with 
-     * different names for handling different parameter amounts.
-     *
-     * Link against ximpdatamodel.dll to use trace
-     * services.
-     *
-     * Statements produce traces only in debug builds.
-     * In hardware debug builds traces go to file defined
-     * KPresenceTraceLogDir and KPresenceTraceLogFile.
-     */
-    #define TRACE( aStatement ) PresenceTrace::Trace( aStatement )
-    #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 )
-    #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 )
-    #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 )
-    #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 )
-    #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 )
-    #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
-
-
-    /**
-     * Block (and thus also function) trace handlers. These 
-     * mark block enter, exit and also non local exit to traces.
-     *
-     * Example:
-     * void CSomeClass::SomeMethod()
-     *      {
-     *      TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" );
-     *
-     *      Do your stuff here. If there happens a leave
-     *      or return before "TRACE_BLOCK_EXIT()" statement,
-     *      it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit"
-     *
-     *      TRACE_BLOCK_EXIT();
-     *      }
-     */
-    #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) );
-    #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit();
-
-
-
-#else //NOT _DEBUG
-
-    #define TRACE( aStatement )
-    #define TRACE_1( aStatement, aP1 )
-    #define TRACE_2( aStatement, aP1, aP2 )
-    #define TRACE_3( aStatement, aP1, aP2, aP3 )
-    #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 )
-    #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 )
-    #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
-    #define TRACE_BLOCK_ENTER( aBlockName )
-    #define TRACE_BLOCK_EXIT()
-
-#endif
-
-
-
-/**
- * XIMP Framework trace sink.
- *
- * @lib ximpdatamodel.dll
- * @since S60 v3.2
- */
-class PresenceTrace
-    {
-public:
-
-    /**
-     * Trace sink.
-     *
-     * @param aFmt A format list to print to trace.
-     */
-    IMPORT_C static void Trace( TRefByValue<const TDesC> aFmt,... );
-
-
-
-private: //Prohibited construtor / destructor
-    PresenceTrace();
-    ~PresenceTrace();
-    };
-
-
-
-/**
- * Block trace handler.
- */
-NONSHARABLE_CLASS( TPresenceBlockTraceHandler )
-    {
-public:
-
-    /**
-     * Block trace handler constructor.
-     *
-     * @param aBlockName Block name.
-     */
-    TPresenceBlockTraceHandler( const TText* aBlockName );
-
-
-    /**
-     * Block trace handler destructor.
-     */
-    ~TPresenceBlockTraceHandler();
-
-
-    /**
-     * Marks that block has reached its normal exit.
-     */
-    void NormalExit();
-
-
-private:
-    //Block name
-    const TPtrC   iBlockName;
-
-    //Normal exit marker
-    TBool iBlockNormalExit;
-};
-
-
-#endif  // PresenceTrace_H__
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presencecache/presencecachesymbian/presencecacheutils/inc/prestrace.h	Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Presence Cache trace utilities
+*
+*/
+
+#ifndef PRESTRACE_H__
+#define PRESTRACE_H__
+
+#include <e32std.h>
+
+
+// CONSTANTS
+_LIT( KPresenceTraceLogDir, "presence" );
+_LIT( KPresenceTraceLogFile, "presence.log" );
+
+
+ //TRACE INDIRECTION
+#ifdef _DEBUG
+
+    /**
+     * Trace handlers. Different statements with 
+     * different names for handling different parameter amounts.
+     *
+     * Statements produce traces only in debug builds.
+     * In hardware debug builds traces go to file defined
+     * KPresenceTraceLogDir and KPresenceTraceLogFile.
+     */
+    #define TRACE( aStatement ) PresenceTrace::Trace( aStatement )
+    #define TRACE_1( aStatement, aP1 ) PresenceTrace::Trace( aStatement, aP1 )
+    #define TRACE_2( aStatement, aP1, aP2 ) PresenceTrace::Trace( aStatement, aP1, aP2 )
+    #define TRACE_3( aStatement, aP1, aP2, aP3 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3 )
+    #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4 )
+    #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5 )
+    #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 ) PresenceTrace::Trace( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
+
+
+    /**
+     * Block (and thus also function) trace handlers. These 
+     * mark block enter, exit and also non local exit to traces.
+     *
+     * Example:
+     * void CSomeClass::SomeMethod()
+     *      {
+     *      TRACE_BLOCK_ENTER( "CSomeClass::SomeMethod" );
+     *
+     *      Do your stuff here. If there happens a leave
+     *      or return before "TRACE_BLOCK_EXIT()" statement,
+     *      it is marked to traces with "CSomeClass::SomeMethod - nonlocal exit"
+     *
+     *      TRACE_BLOCK_EXIT();
+     *      }
+     */
+    #define TRACE_BLOCK_ENTER( aBlockName ) TPresenceBlockTraceHandler __blockTraceHandler( _S( aBlockName ) );
+    #define TRACE_BLOCK_EXIT() __blockTraceHandler.NormalExit();
+
+
+
+#else //NOT _DEBUG
+
+    #define TRACE( aStatement )
+    #define TRACE_1( aStatement, aP1 )
+    #define TRACE_2( aStatement, aP1, aP2 )
+    #define TRACE_3( aStatement, aP1, aP2, aP3 )
+    #define TRACE_4( aStatement, aP1, aP2, aP3, aP4 )
+    #define TRACE_5( aStatement, aP1, aP2, aP3, aP4, aP5 )
+    #define TRACE_6( aStatement, aP1, aP2, aP3, aP4, aP5, aP6 )
+    #define TRACE_BLOCK_ENTER( aBlockName )
+    #define TRACE_BLOCK_EXIT()
+
+#endif
+
+
+
+/**
+ * trace sink.
+ */
+class PresenceTrace
+    {
+public:
+
+    /**
+     * Trace sink.
+     *
+     * @param aFmt A format list to print to trace.
+     */
+    IMPORT_C static void Trace( TRefByValue<const TDesC> aFmt,... );
+
+
+
+private: //Prohibited construtor / destructor
+    PresenceTrace();
+    ~PresenceTrace();
+    };
+
+
+
+/**
+ * Block trace handler.
+ */
+NONSHARABLE_CLASS( TPresenceBlockTraceHandler )
+    {
+public:
+
+    /**
+     * Block trace handler constructor.
+     *
+     * @param aBlockName Block name.
+     */
+    TPresenceBlockTraceHandler( const TText* aBlockName );
+
+
+    /**
+     * Block trace handler destructor.
+     */
+    ~TPresenceBlockTraceHandler();
+
+
+    /**
+     * Marks that block has reached its normal exit.
+     */
+    void NormalExit();
+
+
+private:
+    //Block name
+    const TPtrC   iBlockName;
+
+    //Normal exit marker
+    TBool iBlockNormalExit;
+};
+
+
+#endif  // PRESTRACE_H__
+
--- a/presencecache/presencecachesymbian/presencecacheutils/src/presencetrace.cpp	Thu Sep 02 20:16:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  TPresence Cache trace implementation
-*
-*/
-
-// INCLUDE FILES
-#include "presencetrace.h"
-
-#include <e32svr.h>
-#include <e32std.h>
-#include <flogger.h>
-
-
-/**
- * Handler used by trace implementation to truncate
- * the string rather than panic in case of buffer overflow.
- *
- * @since 3.0
- */
-NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow
-    {
-    public:
-        void Overflow( TDes16& /*aDes*/ ) {}
-    };
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// PresenceTrace::Trace()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void PresenceTrace::Trace( TRefByValue<const TDesC> aFmt,... )
-    {
-    TBuf< 250 > buffer;
-    buffer.Append( _L("[") );
-    buffer.Append( RThread().Name() );
-    buffer.Append( _L("] ") );
-
-    TPresenceOverflowTruncate overflowHandler;
-
-    VA_LIST list;
-    VA_START( list, aFmt );
-    buffer.AppendFormatList( aFmt, list, &overflowHandler );
-
-
-//    #ifdef __WINS__
-    RDebug::Print( _L("%S"), &buffer );
-//    #endif // __WINS__ Pia
-// Pia    #else
-
-    RFileLogger logger;
-    if( logger.Connect() == KErrNone )
-        {
-        logger.SetDateAndTime( EFalse, ETrue );
-        logger.CreateLog( KPresenceTraceLogDir,
-                          KPresenceTraceLogFile,
-                          EFileLoggingModeAppend );
-
-        logger.Write( buffer );
-        logger.CloseLog();
-        logger.Close();
-        }
-
-// Pia   #endif // __WINS__
-   }
-
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName ) 
-    : iBlockName( aBlockName ),
-      iBlockNormalExit( EFalse )
-    {
-    TRACE_1( _L("%S - enter"), &iBlockName );  
-    }   
-
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 #
-    {
-    if( !iBlockNormalExit )
-        {
-        //Normal exit not recorded so far
-        //Thus report here nonlocal exit
-        TRACE_1( _L("%S - nonlocal exit"), &iBlockName );  
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// TPresenceBlockTraceHandler::NormalExit()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void TPresenceBlockTraceHandler::NormalExit() 
-    {
-    TRACE_1( _L("%S - exit"), &iBlockName );  
-    iBlockNormalExit = ETrue;
-    }
-    
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presencecache/presencecachesymbian/presencecacheutils/src/prestrace.cpp	Fri Sep 17 08:27:32 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TPresence Cache trace implementation
+*
+*/
+
+// INCLUDE FILES
+#include "prestrace.h"
+
+#include <e32svr.h>
+#include <e32std.h>
+#include <flogger.h>
+
+
+/**
+ * Handler used by trace implementation to truncate
+ * the string rather than panic in case of buffer overflow.
+ *
+ * @since 3.0
+ */
+NONSHARABLE_CLASS( TPresenceOverflowTruncate ) : public TDes16Overflow
+    {
+    public:
+        void Overflow( TDes16& /*aDes*/ ) {}
+    };
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// PresenceTrace::Trace()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void PresenceTrace::Trace( TRefByValue<const TDesC> aFmt,... )
+    {
+    TBuf< 250 > buffer;
+    buffer.Append( _L("[") );
+    buffer.Append( RThread().Name() );
+    buffer.Append( _L("] ") );
+
+    TPresenceOverflowTruncate overflowHandler;
+
+    VA_LIST list;
+    VA_START( list, aFmt );
+    buffer.AppendFormatList( aFmt, list, &overflowHandler );
+
+
+//    #ifdef __WINS__
+    RDebug::Print( _L("%S"), &buffer );
+//    #endif // __WINS__ Pia
+// Pia    #else
+
+    RFileLogger logger;
+    if( logger.Connect() == KErrNone )
+        {
+        logger.SetDateAndTime( EFalse, ETrue );
+        logger.CreateLog( KPresenceTraceLogDir,
+                          KPresenceTraceLogFile,
+                          EFileLoggingModeAppend );
+
+        logger.Write( buffer );
+        logger.CloseLog();
+        logger.Close();
+        }
+
+// Pia   #endif // __WINS__
+   }
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::TPresenceBlockTraceHandler()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPresenceBlockTraceHandler::TPresenceBlockTraceHandler( const TText* aBlockName ) 
+    : iBlockName( aBlockName ),
+      iBlockNormalExit( EFalse )
+    {
+    TRACE_1( _L("%S - enter"), &iBlockName );  
+    }   
+
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPresenceBlockTraceHandler::~TPresenceBlockTraceHandler() // CSI: 82 #
+    {
+    if( !iBlockNormalExit )
+        {
+        //Normal exit not recorded so far
+        //Thus report here nonlocal exit
+        TRACE_1( _L("%S - nonlocal exit"), &iBlockName );  
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// TPresenceBlockTraceHandler::NormalExit()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TPresenceBlockTraceHandler::NormalExit() 
+    {
+    TRACE_1( _L("%S - exit"), &iBlockName );  
+    iBlockNormalExit = ETrue;
+    }
+    
+