Revision: 201017 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:00:21 +0300
branchRCL_3
changeset 32 2828b4d142c0
parent 26 0d28c1c5b6dd
child 34 4e4f42469190
child 35 4ae315f230bc
Revision: 201017 Kit: 201019
ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h
ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp
ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp
contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h
contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h
contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h
contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h
contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h
contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h
contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h
contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h
contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h
contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h
contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h
contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h
contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h
contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h
contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h
contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h
contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h
contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h
contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h
contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h
contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h
contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h
contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h
contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h
contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h
contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h
contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h
contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h
contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h
logsui/AppSrc/CLogsBaseView.cpp
phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h
phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h
phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h
phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h
phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp
phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp
phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp
phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp
phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp
phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp
phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h
phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp
phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp
phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp
phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h
phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp
phonebookengines/contactsmodel/conf/contactsmodel.confml
phonebookengines/contactsmodel/conf/contactsmodel_10003a73.crml
phonebookengines/contactsmodel/group/COMMON.INF
phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp
phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp
phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp
phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h
phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp
phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF
phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp
phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp
phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h
phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp
phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF
phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h
phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp
phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp
phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp
phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h
phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp
phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp
phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp
phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h
phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h
phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h
phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp
phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp
phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h
phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp
phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp
phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h
phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h
phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h
phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h
phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h
phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp
phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp
phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp
phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp
phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp
phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp
phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp
phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp
phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp
phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h
phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp
phonebookui/Phonebook2/group/10003A73.txt
phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp
phonebookui/Phonebook2/inc/CPbk2NamesListControl.h
phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h
phonebookui/Phonebook2/inc/MPbk2ContactNameFormatter3.h
phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h
phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss
phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h
phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp
phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp
phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp
phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc
phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp
phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp
phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h
phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp
phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp
phonebookui/Speeddial/inc/SpdiaContainer.h
phonebookui/Speeddial/src/SpdiaContainer.cpp
phonebookui/Speeddial/src/SpdiaView.cpp
predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp
predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp
predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp
predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp
predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp
predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp
predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp
predictivesearch/PcsServer/group/PcsServer.mmp
predictivesearch/adapters/contacts/src/cpcscontactstore.cpp
presencecache/presencecacheutils/inc/presenceobjecthelpers.h
presencecache/presencecacheutils/src/presenceobjecthelpers.cpp
--- a/ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h	Tue May 11 16:00:21 2010 +0300
@@ -187,6 +187,11 @@
         * Set default attribute for voice call
         */
         void SetVoiceCallDefaultL( MVPbkStoreContact* aContact );
+        
+        /**
+         * Set contact
+         */
+        void SetContact( MVPbkStoreContact* aContact );
 
     public:
         
@@ -323,7 +328,14 @@
         /// Array to keep a list of installed xSP stores. Owned.
         CDesCArrayFlat                          ixSPStoresArray;
         /// Default setting handle
-        CmsSetVoiceCallDefault*                 iSetDefault;
+        CmsSetVoiceCallDefault*                 iSetDefault;        
+        // Current contact, not Owned
+        MVPbkStoreContact* iContact; 
+        // ETrue, if the current activated contact store ready
+        TBool iCurrentContactStoreReady;
+        // Completed stores
+        RPointerArray<HBufC> iReadyStores;
+        
     };
 
 #endif  //__CMSPHONEBOOKPROXY__
--- a/ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp	Tue May 11 16:00:21 2010 +0300
@@ -41,6 +41,7 @@
 
 #include "cmsfindlinkedcontact.h"
 #include <MVPbkContactLink.h>
+#include <MVPbkStoreContact.h>
 
 // CONSTANTS
 const TInt KArrayGranularity = 2;
@@ -111,7 +112,8 @@
         iStoreConfiguration = NULL;
         }
     iObserverArray.Close();
-    ixSPStoresArray.Reset();
+    ixSPStoresArray.Reset();           
+    iReadyStores.ResetAndDestroy();
     delete iSetDefault;
     }
 
@@ -122,7 +124,7 @@
 //
 TBool CCmsPhonebookProxy::StoreOpenStatus()
     {
-    if(iAtLeastOneStoreReady && iOpenComplete)
+    if( iAtLeastOneStoreReady && iOpenComplete && iCurrentContactStoreReady )
         {
         return ETrue;
         }
@@ -138,8 +140,11 @@
 void CCmsPhonebookProxy::InitStoresL()
     {
     PRINT ( _L("Start CCmsPhonebookProxy::InitStoresL()") );
+    
     if( !iOpenComplete )
         {
+        iCurrentContactStoreReady = EFalse;
+        iReadyStores.ResetAndDestroy();                        
         iStoreList->OpenAllL( *this );
         }
     PRINT ( _L("End CCmsPhonebookProxy::InitStoresL()") );
@@ -414,6 +419,47 @@
 	}
 
 // ----------------------------------------------------------
+// CCmsPhonebookProxy::SetContact
+//
+// ----------------------------------------------------------
+//
+void CCmsPhonebookProxy::SetContact( MVPbkStoreContact* aContact )
+    {
+    iContact = aContact;
+    
+    if( !iCurrentContactStoreReady  && iContact )
+        {
+        for( TInt x=0; x<iReadyStores.Count(); x++ )
+            {
+            if( iReadyStores[x]->Des().CompareC(  
+                    iContact->ContactStore().StoreProperties().Uri().UriDes() ) == 0 )
+                {
+            
+                iCurrentContactStoreReady = ETrue;
+                iCmsPhonebookOperationsObserver.StoreOpenComplete();
+                break;
+                }                                        
+            }
+        }
+    // Check in case the contact has changed
+    else if( iCurrentContactStoreReady  && iContact )
+        {
+        iCurrentContactStoreReady = EFalse;
+    
+        for( TInt x=0; x<iReadyStores.Count(); x++ )
+            {
+            if( iReadyStores[x]->Des().Compare(  
+                    iContact->ContactStore().StoreProperties().Uri().UriDes() ) == 0 )
+                {
+                // Contact found from ready stores
+                iCurrentContactStoreReady = ETrue;                
+                break;
+                }                                        
+            }
+        }
+    }
+
+// ----------------------------------------------------------
 // CCmsPhonebookProxy::ExternalStoresIntalled
 //
 // ----------------------------------------------------------
@@ -442,9 +488,10 @@
     {
     PRINT( _L("Start CCmsPhonebookProxy::OpenComplete()" ) );
     iOpenComplete = ETrue;
-    if ( iAtLeastOneStoreReady )
-        {
+    if ( iAtLeastOneStoreReady && !iCurrentContactStoreReady )
+        {        
         iCmsPhonebookOperationsObserver.StoreOpenComplete();
+        iCurrentContactStoreReady = ETrue;        
         }
     PRINT( _L("End CCmsPhonebookProxy::OpenComplete()" ) );
     }
@@ -518,6 +565,7 @@
 //
 void CCmsPhonebookProxy::StoreReady( MVPbkContactStore& aContactStore )
     {
+    
     PRINT1( _L( "CCmsPhonebookProxy::StoreReady(): Store: %S" ), (&aContactStore.StoreProperties().Uri().UriDes()) );
     //Set iAtLeastOneStoreReady to ETrue to indicate that
     //at least one store is available
@@ -527,6 +575,20 @@
         {
         iContactStore = &aContactStore;
         }
+        
+    TRAP_IGNORE(
+        {
+        HBufC* buf = aContactStore.StoreProperties().Uri().UriDes().AllocLC();        
+        iReadyStores.AppendL( buf );
+        CleanupStack::Pop( buf );
+        } );
+    
+    if( iContact && iContact->ContactStore().StoreProperties().Uri().UriDes().Compare(
+    aContactStore.StoreProperties().Uri().UriDes() ) == 0 && !iCurrentContactStoreReady )
+        {
+        iCurrentContactStoreReady = ETrue;
+        iCmsPhonebookOperationsObserver.StoreOpenComplete();        
+        }
     }
 
 // ----------------------------------------------------------
@@ -604,7 +666,7 @@
 
     // Support all contact stores, not only those defined by phonebook2 setting
     iUriList = iStoreConfiguration->SupportedStoreConfigurationL();
-
+    
     ixSPStoresArray.Reset();
     FindXSPStoresL( ixSPStoresArray );
 
@@ -746,7 +808,7 @@
 
     ResetData();
     CompleteContactRequestL( aError, NULL );
-    iCmsPhonebookOperationsObserver.CmsSingleContactOperationComplete( aError );
+    iCmsPhonebookOperationsObserver.CmsSingleContactOperationComplete( aError );    
     }
 
 
--- a/ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp	Tue May 11 16:00:21 2010 +0300
@@ -103,7 +103,7 @@
 CCmsServerContact::~CCmsServerContact()
     {
     PRINT( _L( "Start CCmsServerContact::~CCmsServerContact()" ) );
-    
+          
     iCmsServer.PhonebookProxyHandle().RemoveObserver( this );
         
     if ( iPresenceNotifySubscribed && iContactLink ) 
@@ -117,12 +117,16 @@
             iChatHandler->UnsubscribeBrandingForContact( iContactLink, this );            
             }        
         }
+    delete iContact;
+    iContact = NULL;
+    
+    iCmsServer.PhonebookProxyHandle().SetContact( iContact );
+    
     delete iStoreUri;
     delete iChatHandler;
     delete iVoipHandler;
     delete iXSPContactHandler;
-    delete iContactLink;
-    delete iContact;
+    delete iContactLink;    
     delete iCachedField8;
     delete iAsyncContact;
     delete iCachedField16;
@@ -227,6 +231,7 @@
             PRINT( _L( "CCmsServerContact::OfferContactEventL():  Contact deleted, invalidate this subsession" ) );
             delete iContact;
             iContact = NULL;
+            iCmsServer.PhonebookProxyHandle().SetContact( iContact );
             iContactDeleted = ETrue;
             }
         else
@@ -642,6 +647,8 @@
         CreateContactLinkArrayL(); 
         uri.Set( aContact->ParentStore().StoreProperties().Uri().UriDes() );
         ParseContactStore( uri );
+        
+        iCmsServer.PhonebookProxyHandle().SetContact( iContact );      
         }
     }
 
--- a/contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h	Tue May 11 16:00:21 2010 +0300
@@ -19,8 +19,8 @@
 #define CCAPPVIEWPLUGINAKNVIEW_H
 
 #ifndef __CCAPPUTILUNITTESTMODE
-#include <AknView.h>
-#include <coneresloader.h>
+#include <aknview.h>
+#include <ConeResLoader.h>
 #endif //__CCAPPUTILUNITTESTMODE
 
 class CCCAppViewPluginAknContainer;
--- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 // INCLUDES
 #include <e32std.h>
 
-#include <vpbkvariant.hrh>    // for TVPbkLocalVariantFlags
+#include <VPbkVariant.hrh>    // for TVPbkLocalVariantFlags
 
 // FORWARD DECLARATIONS
 class CVPbkContactManager;
--- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32def.h>
-#include <mpbk2startupmonitor.h>
+#include <MPbk2StartupMonitor.h>
 
 // CLASS DECLARATION
 
--- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <pbk2viewid.hrh>
+#include <Pbk2ViewId.hrh>
 #include <vwsdef.h> // TVwsViewId
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h	Tue May 11 16:00:21 2010 +0300
@@ -53,7 +53,10 @@
             /// characters with space character
             EReplaceNonGraphicChars     = 0x0004,
             /// Formatter to retain all original space characters
-            EPreserveAllOriginalSpaces  = 0x0008
+            EPreserveAllOriginalSpaces  = 0x0008,
+            /// Formatter by default uses coma separator
+            /// for separating company name
+            EDisableCompanyNameSeparator  = 0x0010
             };
 
         /**
--- a/contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDE FILES
 #include <e32def.h>
-#include <pbk2fieldproperty.hrh>
+#include <Pbk2FieldProperty.hrh>
 
 // FORWARD DECLARATIONS
 class MVPbkFieldType;
--- a/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define MPBK2CONTACTEDITORCONTROL_H
 
 // INCLUDES
-#include <pbk2fieldproperty.hrh>    // TPbk2FieldCtrlType
+#include <Pbk2FieldProperty.hrh>    // TPbk2FieldCtrlType
 
 // FORWARD DECLATIONS
 class MPbk2ContactEditorField;
--- a/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <mvpbkcontactobserver.h>
+#include <MVPbkContactObserver.h>
 
 // CLASS DECLARATION
 
--- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define MPBK2APPUIEXTENSION_H
 
 // INCLUDES
-#include <mpbk2uireleasable.h>
+#include <MPbk2UiReleasable.h>
 
 // FORWARD DECLARATIONS
 class MPbk2StartupMonitor;
--- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,8 @@
 #define MPBK2CONTACTEDITOREXTENSION_H
 
 // INCLUDES
-#include <mpbk2uireleasable.h>
-#include <mpbk2contacteditoreventobserver.h>
+#include <MPbk2UiReleasable.h>
+#include <MPbk2ContactEditorEventObserver.h>
 
 //  FORWARD DECLARATIONS
 class MVPbkStoreContactField;
--- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,8 @@
 #define MPBK2CONTACTUICONTROLEXTENSION_H
 
 // INCLUDES
-#include <tpbk2iconid.h>
-#include <mpbk2uireleasable.h>
+#include <TPbk2IconId.h>
+#include <MPbk2UiReleasable.h>
 
 //  FORWARD DECLARATIONS
 class MVPbkViewContact;
--- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define MPBK2SETTINGSVIEWEXTENSION_H
 
 // INCLUDES
-#include <mpbk2uireleasable.h>
+#include <MPbk2UiReleasable.h>
 
 //  FORWARD DECLARATIONS
 class MPbk2SettingsControlExtension;
--- a/contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h	Tue May 11 16:00:21 2010 +0300
@@ -128,7 +128,7 @@
 const TUid KPcsAlgorithm1           = { 0x2000B5BE };
 const TUid KPsDataStoreInterfaceUid = { 0x2000B5C0 };
 
-const TInt KLinksToFetchInOneGo = 500;
+const TInt KLinksToFetchInOneGo = 20;
 
 /**
  * Max number of supported languages for Key Map
--- a/contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h	Tue May 11 16:00:21 2010 +0300
@@ -30,7 +30,7 @@
 // INCLUDES
 #include <e32std.h>
 #include <ecom/ecom.h>
-#include <mvpbkcontactcopypolicy.h>
+#include <MVPbkContactCopyPolicy.h>
 
 // FORWARD DECLARATIONS
 class CVPbkContactManager;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkstorecontactfield.h>
+#include <MVPbkStoreContactField.h>
 
 // FORWARD DECLARATIONS
 class MVPbkStoreContactFieldCollection;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkcontactlinkarray.h>
+#include <MVPbkContactLinkArray.h>
 
 // FORWARD DECLARATIONS
 class MVPbkContactStoreList;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h	Tue May 11 16:00:21 2010 +0300
@@ -27,7 +27,7 @@
 #include <e32base.h>
 #include <f32file.h>
 #include <bamdesca.h>
-#include <BADESCA.H> 
+#include <badesca.h> 
 
 // FORWARD DECLARATIONS
 class MVPbkFieldTypeList;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h	Tue May 11 16:00:21 2010 +0300
@@ -21,10 +21,10 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-#include <mvpbkcontactattribute.h>
-#include <mvpbkcontactattributemanager.h>
-#include <vpbkpublicuid.h>
-#include <vpbkfieldtype.hrh>
+#include <MVPbkContactAttribute.h>
+#include <MVPbkContactAttributeManager.h>
+#include <VPbkPublicUID.h>
+#include <VPbkFieldType.hrh>
 
 
 // CLASS DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkstorecontactfieldcollection.h>
+#include <MVPbkStoreContactFieldCollection.h>
 
 // FORWARD DECLARATIONS
 class MVPbkContactFieldSelector;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h	Tue May 11 16:00:21 2010 +0300
@@ -23,7 +23,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkfieldtype.h>
+#include <MVPbkFieldType.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h	Tue May 11 16:00:21 2010 +0300
@@ -22,10 +22,10 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkcontactfieldselector.h>
-#include <mvpbkfieldtypeselector.h>
-#include <vpbkfieldtype.hrh>
-#include <tvpbkfieldtypeparameters.h>
+#include <MVPbkContactFieldSelector.h>
+#include <MVPbkFieldTypeSelector.h>
+#include <VPbkFieldType.hrh>
+#include <TVPbkFieldTypeParameters.h>
 
 // FORWARD DECLARATIONS
 class TVPbkFieldVersitProperty;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h	Tue May 11 16:00:21 2010 +0300
@@ -21,9 +21,9 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkcontactviewbase.h>
-#include <mvpbkcontactviewobserver.h>
-#include <mvpbkcontactviewfiltering.h>
+#include <MVPbkContactViewBase.h>
+#include <MVPbkContactViewObserver.h>
+#include <MVPbkContactViewFiltering.h>
 
 // FORWARD DECLARATIONS
 namespace VPbkEngUtils { class CVPbkAsyncOperation; }
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h	Tue May 11 16:00:21 2010 +0300
@@ -21,8 +21,8 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-#include <mvpbkcontactfindobserver.h>
-#include <mvpbkcontactstorelist.h>
+#include <MVPbkContactFindObserver.h>
+#include <MVPbkContactStoreList.h>
 
 // FORWARD DECLARATIONS
 class CVPbkContactManager;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkfieldtype.h>
+#include <MVPbkFieldType.h>
 
 // FORWARD DECLARATIONS
 class TResourceReader;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h	Tue May 11 16:00:21 2010 +0300
@@ -21,9 +21,9 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-#include <mvpbkcontactattribute.h>
-#include <mvpbkcontactattributemanager.h>
-#include <vpbkpublicuid.h>
+#include <MVPbkContactAttribute.h>
+#include <MVPbkContactAttributeManager.h>
+#include <VPbkPublicUid.h>
 
 // FORWARD DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h	Tue May 11 16:00:21 2010 +0300
@@ -21,10 +21,10 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-#include <mvpbkcontactattribute.h>
-#include <mvpbkcontactattributemanager.h>
-#include <vpbkpublicuid.h>
-#include <vpbkfieldtype.hrh>
+#include <MVPbkContactAttribute.h>
+#include <MVPbkContactAttributeManager.h>
+#include <VPbkPublicUid.h>
+#include <VPbkFieldType.hrh>
 
 // FORWARD DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 // INCLUDES
 #include <e32cmn.h>
 #include <e32std.h>
-#include <mvpbkobjecthierarchy.h>
+#include <MVPbkObjectHierarchy.h>
 
 // FORWARD DECLARATIONS
 class MVPbkBaseContact;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define MVPBKCONTACTFIELDBINARYDATA_H
 
 // INCLUDES
-#include <mvpbkcontactfielddata.h>
+#include <MVPbkContactFieldData.h>
 
 
 // CLASS DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h	Tue May 11 16:00:21 2010 +0300
@@ -24,7 +24,7 @@
 // INCLUDES
 #include <e32cmn.h>
 #include <e32std.h>
-#include <vpbkfieldtype.hrh>
+#include <VPbkFieldType.hrh>
 
 // CONSTANTS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 #define MVPBKCONTACTFIELDDATETIMEDATA_H
 
 // INCLUDES
-#include <mvpbkcontactfielddata.h>
+#include <MVPbkContactFieldData.h>
 
 
 // CLASS DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 
 // INCLUDES
-#include <mvpbkcontactfielddata.h>
+#include <MVPbkContactFieldData.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 
 // INCLUDES
-#include <mvpbkcontactfielddata.h>
+#include <MVPbkContactFieldData.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h	Tue May 11 16:00:21 2010 +0300
@@ -24,7 +24,7 @@
 #include <e32def.h>
 // included here, instead of forward declared, so that clients
 // dont delete an incomplete class.
-#include <mvpbkcontactlinkarray.h>
+#include <MVPbkContactLinkArray.h>
 
 class MVPbkContactStore;
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h	Tue May 11 16:00:21 2010 +0300
@@ -24,7 +24,7 @@
 #include <e32base.h>
 // included here, instead of forward declared, so that clients
 // don't delete an incomplete class.
-#include <mvpbkcontactlinkarray.h>
+#include <MVPbkContactLinkArray.h>
 
 
 /**
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h	Tue May 11 16:00:21 2010 +0300
@@ -22,8 +22,8 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkstorecontact.h>
-#include <mvpbkstorecontact2.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkStoreContact2.h>
 
 // FORWARD DECLARATIONS
 class MVPbkContactLinkArray;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h	Tue May 11 16:00:21 2010 +0300
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <e32cmn.h>
 #include <e32std.h>
-#include <cvpbkcontactlinkarray.h>
+#include <CVPbkContactLinkArray.h>
 
 // FORWARD DECLARATIONS
 class TVPbkContactStoreUriPtr;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define MVPBKCONTACTOPERATION_H
 
 // INCLUDES
-#include "mvpbkcontactoperationbase.h"
+#include "MVPbkContactOperationBase.h"
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h	Tue May 11 16:00:21 2010 +0300
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <e32cmn.h>
 #include <bamdesca.h>
-#include <BADESCA.H> 
+#include <badesca.h> 
 // FORWARD DECLARATIONS
 class MVPbkContactOperation;
 class MVPbkContactLink;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h	Tue May 11 16:00:21 2010 +0300
@@ -58,6 +58,33 @@
 
     };
 
+// Use this UID to access MVPbkOptimizedSelector extension of the MVPbkContactSelector.
+// Used as a parameter to ContactSelectorExtension() method.
+const TUid KVPbkOptimizedSelectorExtensionUid = { 2 };
+
+/**
+ * This class is an extension to MVPbkContactSelector.
+ * See documentation of MVPbkContactSelector from header MVPbkContactSelector.h
+ *
+ * @see MVPbkContactSelector
+ *
+ */
+class MVPbkOptimizedSelector
+    {
+    protected:  // Destructor
+        virtual ~MVPbkOptimizedSelector() { }
+
+    public:
+
+        /**
+         * Vpbk stop calling MVPbkContactSelector::IsContactIncluded if this function returns false.
+         * With this function client can optimize selector use in VPbk.
+         */
+         virtual TBool Continue() const = 0;
+
+    };
+
+	
 #endif  // MVPBKCONTACTSELECTOR_H
 
 //End of file
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h	Tue May 11 16:00:21 2010 +0300
@@ -21,8 +21,8 @@
 
 // INCLUDES
 #include <e32def.h>
-#include <mvpbkobjecthierarchy.h>
-#include <mvpbkcontactoperationfactory.h>
+#include <MVPbkObjectHierarchy.h>
+#include <MVPbkContactOperationFactory.h>
 
 // FORWARD DECLARATIONS
 class CVPbkContactViewDefinition;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 
 // INCLUDES
-#include <mvpbkcontactstoreobserver.h>
+#include <MVPbkContactStoreObserver.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32cmn.h>
-#include <tvpbkcontactstoreuriptr.h>
+#include <TVPbkContactStoreUriPtr.h>
 
 // FORWARD DECLARATIONS
 class MVPbkFieldTypeList;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,8 @@
 #define MVPBKCONTACTVIEW_H
 
 // INCLUDES
-#include <mvpbkcontactviewbase.h>
-#include <mvpbkobjecthierarchy.h>
+#include <MVPbkContactViewBase.h>
+#include <MVPbkObjectHierarchy.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32cmn.h>
-#include <vpbkcontactview.hrh>
+#include <VPbkContactView.hrh>
 #include <bamdesca.h>
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <e32cmn.h>
-#include <vpbkcontactview.hrh>
+#include <VPbkContactView.hrh>
 #include <bamdesca.h>
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <vpbkfieldtype.hrh>
+#include <VPbkFieldType.hrh>
 
 // FORWARD DECLARATIONS
 class TVPbkFieldVersitProperty;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h	Tue May 11 16:00:21 2010 +0300
@@ -22,11 +22,11 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkbasecontact.h>
-#include <mvpbkviewcontact.h>
+#include <MVPbkBaseContact.h>
+#include <MVPbkViewContact.h>
 
 // Includes needed for covariant return types
-#include <mvpbkstorecontactfieldcollection.h>
+#include <MVPbkStoreContactFieldCollection.h>
 
 // FORWARD DECLARATIONS
 class MVPbkContactStore;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <mvpbkbasecontactfield.h>
+#include <MVPbkBaseContactField.h>
 
 // CONSTANTS
 /// A constant that indicates that the store doesn't set limits
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h	Tue May 11 16:00:21 2010 +0300
@@ -22,10 +22,10 @@
 
 // INCLUDES
 #include <e32def.h>
-#include <mvpbkbasecontactfieldcollection.h>
+#include <MVPbkBaseContactFieldCollection.h>
 
 // Includes needed for covariant return types
-#include <mvpbkstorecontactfield.h>
+#include <MVPbkStoreContactField.h>
 
 // FORWARD DECLARATIONS
 class MVPbkStoreContact;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32def.h>
-#include <mvpbkbasecontact.h>
+#include <MVPbkBaseContact.h>
 
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <mvpbkbasecontactfield.h>
+#include <MVPbkBaseContactField.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32def.h>
-#include <mvpbkbasecontactfieldcollection.h>
+#include <MVPbkBaseContactFieldCollection.h>
 
 // CLASS DECLARATIONS
 
--- a/contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 //  INCLUDES
 #include <e32std.h>
-#include <vpbkfieldtype.hrh> // TVPbkDefaultType
+#include <VPbkFieldType.hrh> // TVPbkDefaultType
 
 // CONSTANTS
 namespace VPbkContactFieldDefaultPriorities
--- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <mvpbkstreamable.h>
+#include <MVPbkStreamable.h>
 
 
 // CLASS DECLARATIONS
--- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,8 @@
 #ifndef TVPBKFIELDTYPEMAPPING_H
 #define TVPBKFIELDTYPEMAPPING_H
 
-#include <vpbkfieldtype.hrh>
-#include <tvpbkfieldversitproperty.h>
+#include <VPbkFieldType.hrh>
+#include <TVPbkFieldVersitProperty.h>
 
 class MVPbkFieldType;
 class MVPbkFieldTypeList;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <vpbkfieldtype.hrh>
+#include <VPbkFieldType.hrh>
 
 // FORWARD DECLARATIONS
 class TResourceReader;
--- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h	Tue May 11 16:00:21 2010 +0300
@@ -22,8 +22,8 @@
 
 // INCLUDES
 #include <e32std.h>
-#include <vpbkfieldtype.hrh>
-#include <tvpbkfieldtypeparameters.h>
+#include <VPbkFieldType.hrh>
+#include <TVPbkFieldTypeParameters.h>
 
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h	Tue May 11 16:00:21 2010 +0300
@@ -24,7 +24,7 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-#include <vpbkpublicuid.h>
+#include <VPbkPublicUid.h>
 #include <ecom/ecom.h>
 
 // FORWARD DECLARATIONS
--- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h	Tue May 11 16:00:21 2010 +0300
@@ -22,8 +22,8 @@
 // INCLUDES
 #include <e32base.h>
 #include <ecom/ecom.h>
-#include <mvpbkcontactduplicatepolicy.h>
-#include <vpbkpolicyuid.h>
+#include <MVPbkContactDuplicatePolicy.h>
+#include <VPbkPolicyUid.h>
 
 // FORWARD DECLARATIONS
 class CVPbkContactManager;
--- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h	Tue May 11 16:00:21 2010 +0300
@@ -23,8 +23,8 @@
 
 #include <e32std.h>
 #include <ecom/ecom.h>
-#include <vpbkpolicyuid.h>
-#include <mvpbkcontactfindpolicy.h>
+#include <VPbkPolicyUid.h>
+#include <MVPbkContactFindPolicy.h>
 
 // FORWARD DECLARATIONS
 class MVPbkFieldTypeList;
--- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h	Tue May 11 16:00:21 2010 +0300
@@ -24,8 +24,8 @@
 
 #include <e32std.h>
 #include <ecom/ecom.h>
-#include <vpbkpolicyuid.h>
-#include <mvpbkcontactnameconstructionpolicy.h>
+#include <VPbkPolicyUid.h>
+#include <MVPbkContactNameConstructionPolicy.h>
 
 // FORWARD DECLARATIONS
 class MVPbkFieldTypeList;
--- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h	Tue May 11 16:00:21 2010 +0300
@@ -21,8 +21,8 @@
 #define CVPBKCONTACTVIEWSORTPOLICY_H
 
 #include <ecom/ecom.h>
-#include <vpbkpolicyuid.h>
-#include <mvpbkcontactviewsortpolicy.h>
+#include <VPbkPolicyUid.h>
+#include <MVPbkContactViewSortPolicy.h>
 
 class CVPbkContactManager;
 
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h	Tue May 11 16:00:21 2010 +0300
@@ -23,8 +23,8 @@
 #define CVPBKBATCHOPERATION_H
 
 // INCLUDE FILES
-#include <cvpbkmulticontactoperationbase.h>
-#include <mvpbkbatchoperationobserver.h>
+#include <CVPbkMultiContactOperationBase.h>
+#include <MVPbkBatchOperationObserver.h>
 
 // CLASS DECLARATION
 
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES FILES
 #include <ecom/ecom.h>
-#include <mvpbkcontactattributemanager.h>
+#include <MVPbkContactAttributeManager.h>
 
 // FORWARD DECLARATIONS
 class CVPbkContactManager;
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h	Tue May 11 16:00:21 2010 +0300
@@ -19,8 +19,8 @@
 #ifndef CVPBKCONTACTFINDFROMSTORESOPERATION_H
 #define CVPBKCONTACTFINDFROMSTORESOPERATION_H
 
-#include <cvpbkmulticontactoperationbase.h>
-#include <mvpbkcontactfindfromstoresobserver.h>
+#include <CVPbkMultiContactOperationBase.h>
+#include <MVPbkContactFindFromStoresObserver.h>
 
 
 /**
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h	Tue May 11 16:00:21 2010 +0300
@@ -22,8 +22,8 @@
 #define CVPBKCONTACTFINDOPERATION_H
 
 // INCLUDE FILES
-#include <cvpbkmulticontactoperationbase.h>
-#include <mvpbkcontactfindobserver.h>
+#include <CVPbkMultiContactOperationBase.h>
+#include <MVPbkContactFindObserver.h>
 
 class CVPbkContactLinkArray;
 
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h	Tue May 11 16:00:21 2010 +0300
@@ -29,9 +29,9 @@
 
 // INCLUDES
 #include <ecom/ecom.h>
-#include "mvpbkcontactstorelist.h"
-#include "mvpbkcontactoperationfactory.h"
-#include "mvpbkcontactoperationfactory2.h"
+#include "MVPbkContactStoreList.h"
+#include "MVPbkContactOperationFactory.h"
+#include "MVPbkContactOperationFactory2.h"
 
 // FORWARD DECLARATIONS
 class TVPbkContactStoreUriPtr;
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,8 @@
 #define CVPBKCONTACTSTORELIST_H
 
 #include <e32base.h>
-#include <mvpbkcontactstorelist.h>
-#include <mvpbkcontactstoreobserver.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactStoreObserver.h>
 
 class TVPbkContactStoreUriPtr;
 class CVPbkContactStoreUriArray;
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 //  INCLUDES
 #include <e32base.h>
-#include <mvpbkcontactstoreproperties.h>
+#include <MVPbkContactStoreProperties.h>
 
 
 // FORWARD DECLARATION
--- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h	Tue May 11 16:00:21 2010 +0300
@@ -22,7 +22,7 @@
 
 // INCLUDES
 #include <e32base.h>
-#include <mvpbkcontactoperation.h>
+#include <MVPbkContactOperation.h>
 
 // CLASS DECLARATION
 /**
--- a/contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h	Tue May 11 16:00:21 2010 +0300
@@ -20,7 +20,7 @@
 #define CVPBKCONTACTVIEWDEFINITION_H
 
 #include <e32base.h>
-#include <vpbkcontactview.hrh>
+#include <VPbkContactView.hrh>
 
 class TResourceReader;
 class CVPbkFieldTypeSelector;
--- a/contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h	Tue May 11 16:00:21 2010 +0300
@@ -21,7 +21,7 @@
 
 //  INCLUDES
 #include <e32base.h>
-#include <vpbkcontactview.hrh>
+#include <VPbkContactView.hrh>
 
 // FORWARD DECLARATIONS
 class CVPbkFieldTypeSelector;
--- a/contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h	Tue May 11 16:00:21 2010 +0300
@@ -25,7 +25,7 @@
 // INCLUDES
 #include <coecntrl.h>
 #include <TPbkContactItemField.h>
-#include <aknutils.h>
+#include <AknUtils.h>
 #include <MPbkContactDbObserver.h>
 #include <MPbkThumbnailOperationObservers.h>
 
--- a/logsui/AppSrc/CLogsBaseView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/logsui/AppSrc/CLogsBaseView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -1743,10 +1743,11 @@
             CleanupStack::PopAndDestroy();      //readerConfig
             contactCheckerPtr->StartL();
             
-            if ( !MenuBar()->ItemSpecificCommandsEnabled() )
-                {
-                iIsCheckedCntLinkInvaild = !contactCheckerPtr->IsCntLinkValidSync( tempPtr );
-                }
+            //if ( !MenuBar()->ItemSpecificCommandsEnabled() )
+            //    {
+            //    iIsCheckedCntLinkInvaild = !contactCheckerPtr->IsCntLinkValidSync( tempPtr );
+            //    }
+
             }
         }
     
@@ -2891,7 +2892,7 @@
 TInt CLogsBaseView::HandleNotifyL(
     TInt aCmdId, 
     TInt aEventId,
-    CAiwGenericParamList& /* aEventParamList */,
+    CAiwGenericParamList& aEventParamList,
     const CAiwGenericParamList& /* aInParamList */ )
     {
     //Only EGenericParamContactLinkArray available in aEventParamList so we use iNumberInPbkProcessing instead
@@ -2908,6 +2909,10 @@
             // If selecting Options->Exit KAiwEventError will result but the contact may have 
             // still been created so start updater
             case KAiwEventError:
+            	{
+            	TInt aError = aEventParamList[0].Value().AsTInt32();
+            	iCoeEnv->HandleError( aError );
+            	}
             case KAiwEventCompleted: // Asynch req completed. Right softkey "Done" selected for contact editor 
                 {
                 //Enable UI for db-originated changes (however focus needs to be kept unchanged)
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h	Tue May 11 16:00:21 2010 +0300
@@ -57,6 +57,11 @@
 
     public: // New functions
         
+        /**
+        * Set iGroupsFetched to false.
+        */
+        void ResetGroupsFetched();
+        
     public: // Functions from base classes
         
         /**
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h	Tue May 11 16:00:21 2010 +0300
@@ -97,6 +97,7 @@
     private: // From MVPbkContactSelector
         TBool IsContactIncluded(
                 const MVPbkBaseContact& aContact );
+        TAny* ContactSelectorExtension( TUid aExtensionUid);
 
     private: // From MContactViewObserver
         void HandleContactViewEvent(
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h	Tue May 11 16:00:21 2010 +0300
@@ -88,6 +88,7 @@
             TInt& aMatchArrayIndex ) const;
         void RemoveFromMatchArrayIfFound( const CViewContact& aContact );
         TInt FindFromMatchArray( const CViewContact& aContact ) const;
+        void HeapSortL(RPointerArray<CCntModelViewContact> aViewContacts);
 
     private: // Data
         /// Own: the find policy
@@ -98,6 +99,21 @@
         RPointerArray<CCntModelViewContact> iContactsModelMatchContacts;
     };
 
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL(T& aRef)
+        { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); }
+private:
+    inline static void ResetAndDestroy(TAny *aPtr)
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
 } // namespace VPbkCntModel
 
 #endif // VPBKCNTMODEL_CFINDVIEW_H
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h	Tue May 11 16:00:21 2010 +0300
@@ -40,7 +40,7 @@
  */
 const TContactViewPreferences KVPbkDefaultContactViewPrefs =
     static_cast<TContactViewPreferences>
-        ( EContactsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField );
+        ( EContactCardsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField );
 
 /**
  * Virtual Phonebook Cntmodel all groups view remote view name.
@@ -52,7 +52,7 @@
  */
 const TContactViewPreferences KVPbkDefaultGroupsViewPrefs =
     static_cast<TContactViewPreferences>
-        (EGroupsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField);
+        ( EGroupsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField );
 
 // FUNCTIONS
 
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp	Tue May 11 16:00:21 2010 +0300
@@ -784,14 +784,12 @@
     // Release any lock on contact.
     if (aContactItem)
         {
-        // Check that contact store is open
-        __ASSERT_DEBUG( iContactDb,
-            ContactStorePanic( EPreCond_ContactDestroyed ) );
-
         // Cancel async operation if any
         iAsyncContactOperation->Cancel( aContactItem );
 
-        if ( aCloseContact )
+        //iContactDb may be already null if store configuration changed by
+        //removing the current store from store configuartion
+        if ( aCloseContact && iContactDb)
         	{
 	        // CloseContactL doesn't leave despite its name.
 	        iContactDb->CloseContactL(aContactItem->Id());
@@ -917,6 +915,9 @@
         iDbNotifier = NULL;
         delete iContactDb;
         iContactDb = NULL;
+        // Set iGroupsFetched to false.
+        // Make sure iGroupIds is updated again after store is opened again.
+        iStoreInfo->ResetGroupsFetched();
         }
     }
 
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp	Tue May 11 16:00:21 2010 +0300
@@ -125,6 +125,15 @@
         }
     return iStore.NativeDatabase().GroupCount();
     }
+
+// -----------------------------------------------------------------------------
+// CContactStoreInfo::ResetGroupsFetched
+// -----------------------------------------------------------------------------
+//     
+void CContactStoreInfo::ResetGroupsFetched()
+    {
+    iGroupsFetched = EFalse;
+    }
     
 } // namespace VPbkCntModel
 //  End of File  
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -172,6 +172,19 @@
     }
 
 // --------------------------------------------------------------------------
+// CCustomFilteredContactView::ContactSelectorExtension
+// --------------------------------------------------------------------------
+//
+TAny* CCustomFilteredContactView::ContactSelectorExtension( TUid aExtensionUid )
+    {
+    if( iContactSelector )
+        {
+        return iContactSelector->ContactSelectorExtension( aExtensionUid );
+        }
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
 // CCustomFilteredContactView::HandleContactViewEvent
 // --------------------------------------------------------------------------
 //
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -130,6 +130,7 @@
 void CFindView::MatchL(
         RPointerArray<CCntModelViewContact>& aMatchedContacts )
     {
+    CleanupClosePushL( aMatchedContacts );
     iContactsModelMatchContacts.ResetAndDestroy();
 
     VPBK_PROFILE_START(VPbkProfile::ECntModelFind);
@@ -163,6 +164,16 @@
         }
     else
         {
+        // Sort the matched contacts again with the CCompareView::CompareFieldsL
+        // compare function. Mark sure the result of binary search is correct in
+        // function FindFromMatchArray().
+        // See defect ou1cimx1#333760 
+        // Title: "Adding contacts (add recipent) issue while creating new message"
+        // Root cause: When contact's first or last name contain blank spaces, 
+        // the comparison result may be different between CCompareView::CompareFieldsL
+        // and CntSortPlugin. e.g. "AB" and "A khan"
+        HeapSortL( iContactsModelMatchContacts );
+		
         // Do it slowly by looping all the parent view contacts.
         const TInt contactCount = iParentView.ContactCountL();
         for ( TInt i = 0; i < contactCount; ++i )
@@ -176,6 +187,7 @@
         }
 
     iContactsModelMatchContacts.ResetAndDestroy();
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
@@ -223,6 +235,7 @@
 void CFindView::MatchContactL( const CViewContact& aViewContact,
         RPointerArray<CCntModelViewContact>& aMatchedContacts )
     {
+    CleanupResetAndDestroyPushL( aMatchedContacts );
     // aContact matches if it's one of the always included contacts OR
     // if it's one of Contacts Model matched contacts AND it also
     // passes our own match.
@@ -256,6 +269,7 @@
         aMatchedContacts.AppendL( cnt );
         CleanupStack::Pop( cnt );
         }
+    CleanupStack::Pop( &aMatchedContacts );
     }
 
 // --------------------------------------------------------------------------
@@ -305,5 +319,68 @@
         aContact.NativeContact(),
         TLinearOrder<CCntModelViewContact>( CCompareView::CompareFieldsL ) );
     }
+
+/** 
+Heap sort the give view contacts array.
+
+This function only be called one time when some contacts be marked and we input
+the first letter to the FindBox for searching.
+
+@param  aContacts the array of view contacts to be sorted.
+@leave  leave errors from CCompareView::CompareFieldsL
+*/
+void CFindView::HeapSortL(RPointerArray<CCntModelViewContact> aContacts)
+    {
+    // HeapSort (copied from RPointerArrayBase)
+    TInt ss = aContacts.Count();
+    if ( ss>1 )
+        {
+        TInt sh = ss>>1;
+        FOREVER
+            {
+            CCntModelViewContact* si;
+            if (sh != 0)
+                {
+                // make heap
+                --sh;
+                si = aContacts[sh];
+                }
+            else
+                {
+                // sort heap
+                --ss;
+                si = aContacts[ss];
+                aContacts[ss] = aContacts[0];
+                if (ss == 1)
+                    {
+                    aContacts[0] = si;
+                    break;
+                    }
+                }
+
+            // sift down
+            TInt ii = sh;
+            TInt jj = sh;
+            FOREVER
+                {
+                jj = (jj+1)<<1;
+                if ((jj >= ss) || (CCompareView::CompareFieldsL(*(aContacts[jj-1]),*(aContacts[jj])) > 0))
+                    {
+                    --jj;
+                    }
+					
+                if ((jj >= ss) || (CCompareView::CompareFieldsL(*(aContacts[jj]),*si) <= 0))
+                    {
+                    break;
+                    }
+					
+                aContacts[ii] = aContacts[jj];
+                ii = jj;
+                } //FOREVER
+				
+            aContacts[ii] = si;
+            } //FOREVER
+        } //if (ss > 1)
+    }
 } // namespace VPbkCntModel
 // End of File
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -76,6 +76,7 @@
 void CRefineView::MatchL( 
         RPointerArray<CCntModelViewContact>& aMatchedContacts )
     {
+    CleanupClosePushL( aMatchedContacts ); 
     if ( iIdleUpdate )
         {
         iIdleUpdate->Cancel();
@@ -98,6 +99,7 @@
             aMatchedContacts.AppendL( nativeContact );
             }
         }    
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -434,6 +434,11 @@
 
     iContactMapping.Reset();
 
+    MVPbkOptimizedSelector* optimizedSelector = 
+        static_cast<MVPbkOptimizedSelector*>( 
+            iContactSelector.ContactSelectorExtension( 
+                KVPbkOptimizedSelectorExtensionUid ) );
+				
     const TInt count = iBaseView.ContactCountL();
     for (TInt i = 0; i < count; ++i)
         {
@@ -441,6 +446,17 @@
             {
             iContactMapping.AppendL(i);
             }
+
+        if( optimizedSelector && !optimizedSelector->Continue() )
+            {
+            // we doesn't need use selector anymore -> include rest of contacts 
+            for (TInt j = i+1; j < count; ++j )
+                {
+                iContactMapping.AppendL(j);
+                }
+            break;
+            }
+
         }
 
     VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
@@ -617,6 +633,13 @@
 //
 TInt CVPbkFilteredContactView::UpdateViewMappingAfterAddingL( TInt aBaseIndex )
 	{
+    // protect against ghost contacts. Can happen if last of the contacts is
+    // deleted or changed into own card immediately after creation.
+    if ( iBaseView.ContactCountL() <= aBaseIndex )
+        {
+        return KErrNotFound;
+        }
+
 	// first update the mapping for all elements which > aBaseIndex
 	TInt filteredIndex;
 	// find first elemnt which >= aBaseIndex
--- a/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h	Tue May 11 16:00:21 2010 +0300
@@ -113,6 +113,22 @@
         /// Own: match results (SIM indexes) from native view
         RArray<TInt> iSIMMatchedContacts;
     };
+
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL(T& aRef)
+        { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); }
+private:
+    inline static void ResetAndDestroy(TAny *aPtr)
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
     
 } // namespace VPbkSimStore    
 
--- a/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -183,6 +183,7 @@
 //
 void CFindView::MatchL( RPointerArray<MVPbkSimContact>& aMatchedContacts )
     {
+    CleanupResetAndDestroyPushL( aMatchedContacts );
     if (iAlwaysIncluded.Count() == 0)
         {
         // No always included contacts. The match can be done using
@@ -232,6 +233,7 @@
     
     // Free the memory
     iSIMMatchedContacts.Reset(); 
+    CleanupStack::Pop( &aMatchedContacts );
     }
         
 // --------------------------------------------------------------------------
@@ -307,6 +309,7 @@
         const MVPbkContactLink& /*aContactLink*/,
         RPointerArray<MVPbkSimContact>& aMatchedContacts )
     {
+    CleanupResetAndDestroyPushL( aMatchedContacts );
     if ( &iParentView == &aView )
         {
         const CViewContact& viewContact = static_cast<const CViewContact&>(
@@ -363,6 +366,7 @@
                 }
             }
         }
+    CleanupStack::Pop( &aMatchedContacts );
     }
 
 // --------------------------------------------------------------------------
@@ -407,6 +411,7 @@
 void CFindView::MatchContactL( const CViewContact& aViewContact,
             RPointerArray<MVPbkSimContact>& aMatchedContacts )
     {
+    CleanupResetAndDestroyPushL( aMatchedContacts );
     // aContact matches if it's one of the always included contacts OR
     // (if it's one of Contacts Model matched contacts AND it also
     // passes our own match).
@@ -445,6 +450,7 @@
             CleanupStack::Pop( cnt );
             }
         }
+    CleanupStack::Pop( &aMatchedContacts ); 
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -123,6 +123,7 @@
 //
 void CRefineView::MatchL( RPointerArray<MVPbkSimContact>& aMatchedContacts )
     {
+    CleanupClosePushL( aMatchedContacts );
     const TInt contactCount = iParentView.ContactCountL();
     for ( TInt i = 0; i < contactCount; ++i )
         {
@@ -140,6 +141,7 @@
             aMatchedContacts.AppendL( nativeContact );
             }
         }    
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
@@ -150,6 +152,7 @@
         TInt aIndex, const MVPbkContactLink& /*aContactLink*/,
         RPointerArray<MVPbkSimContact>& aMatchedContacts )
     {
+    CleanupClosePushL( aMatchedContacts );
     if ( &iParentView == &aView && 
          IsMatchL( iParentView.ContactAtL( aIndex )))
         {
@@ -198,7 +201,8 @@
             {
             aMatchedContacts.AppendL( nativeContact );
             }
-        }    
+        }   
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp	Tue May 11 16:00:21 2010 +0300
@@ -274,6 +274,7 @@
     RPointerArray<CVPbkSimContactBuf>& aResultArray,
     TDes8& aETelContactData, MVPbkSimCntStore& aSimStore ) const
     {
+    CleanupResetAndDestroyPushL( aResultArray );
     iETelBuffer->Set( &aETelContactData );
     User::LeaveIfError( StartRead() );
     
@@ -294,6 +295,7 @@
         {
         User::Leave( KErrBadDescriptor );
         }
+    CleanupStack::Pop( &aResultArray );
     }
 
 // -----------------------------------------------------------------------------
--- a/phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h	Tue May 11 16:00:21 2010 +0300
@@ -147,6 +147,22 @@
         TInt iMinContactLength;
     };
 
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL(T& aRef)
+        { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); }
+private:
+    inline static void ResetAndDestroy(TAny *aPtr)
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
+
 #endif      // CVPBKETELCNTCONVERTER_H
             
 // End of File
--- a/phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp	Tue May 11 16:00:21 2010 +0300
@@ -817,15 +817,22 @@
             User::LeaveIfError(TLex(extValString).Val(storedUpperDigits));
             TInt32 stored = storedUpperDigits;
 
-            while ( (number != 0) && (stored != 0) &&
-                    (number % 10 == 0 || stored % 10 == 0) )
+            TBool nonZeroInStoredFound = EFalse;
+            TBool nonZeroInNumberFound = EFalse;
+            while ((number != 0) && (stored != 0))
                 {
+                nonZeroInNumberFound |= (number % 10 != 0);
+                nonZeroInStoredFound |= (stored % 10 != 0);
+                if (nonZeroInStoredFound && nonZeroInNumberFound)
+                    {
+                    break;
+                    }
                 number /= 10;
                 stored /= 10;
                 }
 
-            if ( (phoneDigits.iUpperDigits == 0) || (storedUpperDigits == 0) ||
-                 (number == stored) )
+            if ((phoneDigits.iUpperDigits == 0) || (storedUpperDigits == 0) ||
+                 (number == stored))
                 {
                 phoneMatchArray->AddL(stmnt.ColumnInt(KContactIdIdx));
                 }
Binary file phonebookengines/contactsmodel/conf/contactsmodel.confml has changed
Binary file phonebookengines/contactsmodel/conf/contactsmodel_10003a73.crml has changed
--- a/phonebookengines/contactsmodel/group/COMMON.INF	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/contactsmodel/group/COMMON.INF	Tue May 11 16:00:21 2010 +0300
@@ -47,13 +47,13 @@
 // Default View Definition store
 ../inc/cntviewstore.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(cntviewstore.h)
 
-// Documentation
-../documentation/contacts_connectivityapi.doc	/epoc32/engdoc/cntmodel/contacts_connectivityapi.doc
-../documentation/contacts_current_itemapi.doc	/epoc32/engdoc/cntmodel/contacts_current_itemapi.doc
-../documentation/contacts_group_supportapi.doc		/epoc32/engdoc/cntmodel/contacts_group_supportapi.doc
-../documentation/contacts_multiple_templatesapi.doc	/epoc32/engdoc/cntmodel/contacts_multiple_templatesapi.doc
-../documentation/contacts_own_card_supportapi.doc	/epoc32/engdoc/cntmodel/contacts_own_card_supportapi.doc
-../documentation/contacts_sorting_view_supportapi.doc	/epoc32/engdoc/cntmodel/contacts_sorting_view_supportapi.doc
+// Documentation (not exported until re-contributed to Symbian Foundation)
+// ../documentation/contacts_connectivityapi.doc	/epoc32/engdoc/cntmodel/contacts_connectivityapi.doc
+// ../documentation/contacts_current_itemapi.doc	/epoc32/engdoc/cntmodel/contacts_current_itemapi.doc
+// ../documentation/contacts_group_supportapi.doc		/epoc32/engdoc/cntmodel/contacts_group_supportapi.doc
+// ../documentation/contacts_multiple_templatesapi.doc	/epoc32/engdoc/cntmodel/contacts_multiple_templatesapi.doc
+// ../documentation/contacts_own_card_supportapi.doc	/epoc32/engdoc/cntmodel/contacts_own_card_supportapi.doc
+// ../documentation/contacts_sorting_view_supportapi.doc	/epoc32/engdoc/cntmodel/contacts_sorting_view_supportapi.doc
 
 PRJ_MMPFILES
 
--- a/phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp	Tue May 11 16:00:21 2010 +0300
@@ -801,9 +801,20 @@
     CreateContactL(KCntName,KCntSurname,_L("584443049607"),KNullDesC);
     TESTVALUE(CheckPhoneMatchL(_L("4443049607"), KBestMatchingPhoneNumbers),1);
     
+    ResetDatabaseL();
     CreateContactL(KCntName,KCntSurname,_L("401234567"),KNullDesC);
     TESTVALUE(CheckPhoneMatchL(_L("2041234567"), KBestMatchingPhoneNumbers),0);
     
+    ResetDatabaseL();
+    CreateContactL(KCntName,KCntSurname,_L("0401234567"),KNullDesC);
+    CreateContactL(KCntName,KCntSurname,_L("0501234567"),KNullDesC);
+    TESTVALUE(CheckPhoneMatchL(_L("0401234567"), KBestMatchingPhoneNumbers),1);
+    
+    ResetDatabaseL();
+    CreateContactL(KCntName,KCntSurname,_L("020421234567"),KNullDesC);
+    CreateContactL(KCntName,KCntSurname,_L("005021234567"),KNullDesC);
+    TESTVALUE(CheckPhoneMatchL(_L("020421234567"), KBestMatchingPhoneNumbers),1);
+    
     }
 
 /**
--- a/phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp	Tue May 11 16:00:21 2010 +0300
@@ -56,7 +56,7 @@
 /// Default contact view preferences
 const TContactViewPreferences KPbkDefaultContactViewPrefs =
     static_cast<TContactViewPreferences>
-        (EContactsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField);
+        ( EContactCardsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField );
 
 #ifdef _DEBUG
 enum TPanicCode
--- a/phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp	Tue May 11 16:00:21 2010 +0300
@@ -90,6 +90,7 @@
         const TPbkAddItemWrapper& aItemWrapper,
         RArray<TInt>& aAddedItemsControlIds)
     {
+    CleanupClosePushL( aAddedItemsControlIds );
     aAddedItemsControlIds.Reset();
 
     for (TInt i = 0; i < aItemWrapper.FieldInfoCount(); ++i)
@@ -102,6 +103,7 @@
             User::LeaveIfError(aAddedItemsControlIds.Append(field.ControlId()));
 			}
         }
+    CleanupStack::Pop();
     }
 
 /**
@@ -113,6 +115,7 @@
         const CPbkFieldsInfo& aFieldsInfo,
         RArray<TPbkAddItemWrapper>& aAddItems) const
     {
+    CleanupClosePushL( aAddItems );
     aAddItems.Reset();
     const TInt fieldInfoCount = aFieldsInfo.Count();
     
@@ -161,6 +164,7 @@
             }
         }
     CleanupStack::PopAndDestroy(); // addedGroups
+    CleanupStack::Pop();
     }
 
 // End of File
--- a/phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h	Tue May 11 16:00:21 2010 +0300
@@ -92,11 +92,6 @@
         void ExitL();
 
         /**
-         * Forces exit.
-         */
-        void Exit();
-
-        /**
          * Activates Phonebook view.
          *
          * @param aViewId       Id of the view to activate.
--- a/phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp	Tue May 11 16:00:21 2010 +0300
@@ -282,15 +282,6 @@
     }
 
 // --------------------------------------------------------------------------
-// CPbk2AppUi::Exit
-// --------------------------------------------------------------------------
-//
-void CPbk2AppUi::Exit()
-    {
-    CPbk2AppUiBase::Exit();
-    }
-
-// --------------------------------------------------------------------------
 // CPbk2AppUi::ActivatePhonebookViewL
 // --------------------------------------------------------------------------
 //
--- a/phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF	Tue May 11 16:00:21 2010 +0300
@@ -120,4 +120,5 @@
 	?MapVPbkFieldTypeToAddressGroupId@Pbk2AddressTools@@SA?AW4TPbk2FieldGroupId@@PBVMVPbkFieldType@@@Z @ 119 NONAME ; enum TPbk2FieldGroupId Pbk2AddressTools::MapVPbkFieldTypeToAddressGroupId(class MVPbkFieldType const *)
 	?IsAddressPreviewEmptyL@Pbk2AddressTools@@SAHAAVMVPbkStoreContact@@W4TPbk2FieldGroupId@@@Z @ 120 NONAME ; int Pbk2AddressTools::IsAddressPreviewEmptyL(class MVPbkStoreContact &, enum TPbk2FieldGroupId)
 	?MassUpdateSkipProgressNote@CPbk2NamesListControl@@QAEXH@Z @ 121 NONAME ; void CPbk2NamesListControl::MassUpdateSkipProgressNote(int)
+	?SetOpeningCca@CPbk2NamesListControl@@QAEXH@Z @ 122 NONAME ; void CPbk2NamesListControl::SetOpeningCca(int)
 
--- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp	Tue May 11 16:00:21 2010 +0300
@@ -235,11 +235,13 @@
         RPointerArray<MVPbkStoreContactField>& aAddressFields )
     {
     __ASSERT_ALWAYS( iFieldFirst && iFieldSecond, Panic( EPbk2NotChosen ) );
+    CleanupClosePushL( aAddressFields );
     
     if ( iChosenField )
         {
         aAddressFields.AppendL( iChosenField );
         }
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
@@ -385,6 +387,7 @@
     {
     __ASSERT_ALWAYS( iContactChosenAddress, Panic( EPbk2NotChosen ) );
     
+    CleanupClosePushL( aAddressFields );
     CPbk2PresentationContactFieldCollection& fields = iContactChosenAddress->PresentationFields();
     
     for( TInt idx = 0; idx < fields.FieldCount(); idx++ )
@@ -396,5 +399,6 @@
             aAddressFields.AppendL( &field );
             }
         }
+    CleanupStack::Pop();
     }
 
--- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp	Tue May 11 16:00:21 2010 +0300
@@ -1210,21 +1210,24 @@
 //
 void CPbk2MergeContactsCmd::SetTitlePaneL( TBool aCustom )
     {
-    CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
-    if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() )
+    if ( iAvkonAppUi )
         {
-        CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
-            ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-        
-        if ( aCustom )
+        CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
+        if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() )
             {
-            HBufC* title = StringLoader::LoadLC( R_QTN_PHOB_TITLE_MERGE_CONTACTS );
-            titlePane->SetTextL( *title );
-            CleanupStack::PopAndDestroy( title );  
-            }
-        else
-            {
-            titlePane->SetTextToDefaultL();
+            CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
+                ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+        
+            if ( aCustom )
+                {
+                HBufC* title = StringLoader::LoadLC( R_QTN_PHOB_TITLE_MERGE_CONTACTS );
+                titlePane->SetTextL( *title );
+                CleanupStack::PopAndDestroy( title );  
+                }
+            else
+                {
+                titlePane->SetTextToDefaultL();
+                }
             }
         }
     }
--- a/phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h	Tue May 11 16:00:21 2010 +0300
@@ -30,7 +30,8 @@
 /**
  */
 class CPbk2NonTopContactSelector : public CBase,
-                                   public MVPbkContactSelector
+                                   public MVPbkContactSelector,
+                                   public MVPbkOptimizedSelector
     {
     public:
 
@@ -43,12 +44,17 @@
 
         TBool IsContactIncluded(
             const MVPbkBaseContact& aContact );
-    
+       
+        TAny* ContactSelectorExtension(
+            TUid aExtensionUid); 
+			
+    private: // From MVPbkOptimizedSelector
+        TBool Continue() const;
+        
     private:
         CPbk2NonTopContactSelector();
-        void ConstructL();
     private:
-        TBool iMyCardSupported;
+        TBool iContinue;
     };
 
 
--- a/phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp	Tue May 11 16:00:21 2010 +0300
@@ -15,21 +15,20 @@
 *
 */
 
-
 #include "CPbk2NonTopContactSelector.h"
 #include <MVPbkBaseContact.h>
-#include <featmgr.h>
 
 // Virtual Phonebook
 #include <CVPbkTopContactManager.h>
 
 CPbk2NonTopContactSelector* CPbk2NonTopContactSelector::NewL()
     {
-    CPbk2NonTopContactSelector* self = new (ELeave) CPbk2NonTopContactSelector();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
+    return new (ELeave) CPbk2NonTopContactSelector();
+    }
+
+CPbk2NonTopContactSelector::CPbk2NonTopContactSelector()
+: iContinue(ETrue)
+    {
     }
 
 CPbk2NonTopContactSelector::~CPbk2NonTopContactSelector()
@@ -39,41 +38,30 @@
 TBool CPbk2NonTopContactSelector::IsContactIncluded(
         const MVPbkBaseContact& aContact )
     {
-    TBool isContactIncluded( !CVPbkTopContactManager::IsTopContact( aContact ) );
-
-    if( iMyCardSupported )
-        {
-        // this is temporary solution to hide own contact from phonebook contacts list,
-        // TODO remove this code when we can hide own contact with contact model
-    
-        MVPbkBaseContact& contact = const_cast<MVPbkBaseContact&>( aContact );
-        TAny* extension = contact.BaseContactExtension( 
-                    KVPbkBaseContactExtension2Uid );
+    TBool isContactIncluded( 
+            !CVPbkTopContactManager::IsTopContact( aContact ) );
+	
+    // Continue until we found first contact that is not top contact
+	// we can stop selector when we found first contact that is not top contact
+	// because top contacts are sorted to top of the contact list.
+    iContinue = !isContactIncluded;
+    return isContactIncluded;
     
-        if( isContactIncluded && extension )
-            {
-            MVPbkBaseContact2* baseContactExtension =
-                    static_cast<MVPbkBaseContact2*>( extension );
-            TInt error( KErrNone );
-            isContactIncluded =
-                    ( !baseContactExtension->IsOwnContact( error ) );
-            }
+    }
+
+TAny* CPbk2NonTopContactSelector::ContactSelectorExtension( TUid aExtensionUid )
+    {
+    if( aExtensionUid == KVPbkOptimizedSelectorExtensionUid )
+        {
+        return static_cast<MVPbkOptimizedSelector*>( this );
         }
-    
-    return isContactIncluded;
+    return NULL;
+    }
+
+TBool CPbk2NonTopContactSelector::Continue() const
+    {
+    return iContinue;
     }
 
 
-CPbk2NonTopContactSelector::CPbk2NonTopContactSelector()
-    {
-    }
-
-void CPbk2NonTopContactSelector::ConstructL()
-    {
-    FeatureManager::InitializeLibL();
-    iMyCardSupported =
-            FeatureManager::FeatureSupported( KFeatureIdffContactsMycard );    
-    FeatureManager::UnInitializeLib();
-    }
-
 // End of File
--- a/phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF	Tue May 11 16:00:21 2010 +0300
@@ -202,4 +202,5 @@
 	_ZN16Pbk2AddressTools22IsAddressPreviewEmptyLER17MVPbkStoreContact17TPbk2FieldGroupId @ 201 NONAME
 	_ZN16Pbk2AddressTools32MapVPbkFieldTypeToAddressGroupIdEPK14MVPbkFieldType @ 202 NONAME
 	_ZN21CPbk2NamesListControl26MassUpdateSkipProgressNoteEi @ 203 NONAME
+	_ZN21CPbk2NamesListControl13SetOpeningCcaEi @ 204 NONAME
 
--- a/phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h	Tue May 11 16:00:21 2010 +0300
@@ -211,6 +211,8 @@
         MVPbkContactLinkArray* iContactsInGroup;
         /// Own: State of the command
         TState iState;
+        /// Own: count of contacts already added to group 
+        TInt iAddedContactsCount;
     };
 
 #endif // CPGUADDMEMBERSCMD_H
--- a/phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp	Tue May 11 16:00:21 2010 +0300
@@ -88,7 +88,8 @@
           MPbk2ContactUiControl& aUiControl ) :
             CActive( CActive::EPriorityStandard ),
             iUiControl( &aUiControl ),
-            iGroupLink( aContactGroup )
+            iGroupLink( aContactGroup ),
+            iAddedContactsCount( 0 )
     {
     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
             ("CPguAddMembersCmd::CPguAddMembersCmd(0x%x)"), this);
@@ -250,7 +251,15 @@
 //
 TInt CPguAddMembersCmd::RunError( TInt aError )
     {
-    if ( aError != KErrNone )
+    if ( iState == EAddingContactsToGroup && aError == KErrInUse &&
+         iEntriesToAdd && iEntriesToAdd->Count() > KOneContact )
+        {    
+        // Incase there was more than just one contact being added, ignore
+        // the KErrInUse error and continue with the remaining contacts
+        iState = EAddingContactsToGroup;
+        IssueRequest();   
+        }
+    else if ( aError != KErrNone )
         {
         FinishCommand( aError );
         }
@@ -743,33 +752,27 @@
 // --------------------------------------------------------------------------
 //
 void CPguAddMembersCmd::AddContactsToGroupL()
-    {
-    TInt count = 0;
-    if ( iEntriesToAdd )
-        {
-        count = iEntriesToAdd->Count();
-        }
-
-    for ( TInt i = 0; i < count; ++i )
-        {
-        TRAPD( err, iContactGroup->AddContactL( iEntriesToAdd->At( i ) ) );
+    { 
+    if (iEntriesToAdd && 
+        iAddedContactsCount < iEntriesToAdd->Count() )
+        { 
+        const MVPbkContactLink& contactToAdd = iEntriesToAdd->At( iAddedContactsCount );
+        iAddedContactsCount++; 
+        
+        // If leaves, RunError called
+        iContactGroup->AddContactL( contactToAdd );
+      
         if ( iDecorator )
             {
             iDecorator->ProcessAdvance( 1 );
-            }
-        if ( err == KErrInUse )
-            {
-            if ( iEntriesToAdd->Count() == 1 )      		
-                {
-                User::Leave( err );
-                }
-            }
-        else
-            {
-            User::LeaveIfError( err );
-            }
+            }     
+        iState = EAddingContactsToGroup;
         }
-    iState = ECommitingTransaction;
+    else
+        {
+        iState = ECommitingTransaction;
+        }
+    
     IssueRequest();
     }
 
--- a/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp	Tue May 11 16:00:21 2010 +0300
@@ -213,9 +213,10 @@
 // --------------------------------------------------------------------------
 //
 TInt CPguRenameGroupCmd::RunError( TInt aError )
-    {
-    CCoeEnv::Static()->HandleError( aError );
-    return KErrNone;
+    {   
+    IssueRequest(EFinishCommand);
+   
+    return aError;
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp	Tue May 11 16:00:21 2010 +0300
@@ -568,7 +568,7 @@
 //
 void CPmapCmd::EditorShowOnMapsL( TVPbkFieldTypeParameter aAddressType )
     {
-    CMnMapView* mapview = CMnMapView::NewL( *iMapViewProvider );
+    CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider );
     CleanupStack::PushL( mapview );
 
     RPointerArray<CPosLandmark> landmarks;
--- a/phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h	Tue May 11 16:00:21 2010 +0300
@@ -97,7 +97,7 @@
 
     private: // From MPbk2ContactUiControlDoubleListboxExtension
         void FormatDataL(
-                const MVPbkViewContact& aViewContact, 
+                const MVPbkContactLink& aContactLink, 
                 MPbk2DoubleListboxDataElement& aDataElement );
         void SetCommandItemUpdater(
             MPbk2CommandItemUpdater* aCommandUpdater );
--- a/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp	Tue May 11 16:00:21 2010 +0300
@@ -271,49 +271,46 @@
 // -----------------------------------------------------------------------------
 //
 void CPbk2NameslistUiControlExtension::FormatDataL(
-        const MVPbkViewContact& aViewContact,
+        const MVPbkContactLink& aContactLink,
         MPbk2DoubleListboxDataElement& aDataElement )
     {
-    MVPbkContactLink* link = aViewContact.CreateLinkLC();
-    if( link )
-        {
-        HBufC* txt = NULL;
-        TPbk2IconId iconId;
-        CSpbContentProvider::TSpbContentType type = CSpbContentProvider::ETypeNone; 
-        iContentProvider.GetContentL( *link, txt, iconId, type );
+    HBufC* txt = NULL;
+    TPbk2IconId iconId;
+    CSpbContentProvider::TSpbContentType type = CSpbContentProvider::ETypeNone;
+    
+    iContentProvider.GetContentL( 
+            *(const_cast<MVPbkContactLink*>(&aContactLink)), txt, iconId, type );
 
-        // select proper element type based on content type
-        MPbk2DoubleListboxDataElement::TTextDataType elemType = 
-            MPbk2DoubleListboxDataElement::ETypeGenericText;
-        if( type == CSpbContentProvider::ETypePhoneNumber )
-            {
-            elemType = MPbk2DoubleListboxDataElement::ETypePhoneNumber;
-            }
-        else if( type == CSpbContentProvider::ETypePhoneNumberMultiple && txt )
+    // select proper element type based on content type
+    MPbk2DoubleListboxDataElement::TTextDataType elemType = 
+        MPbk2DoubleListboxDataElement::ETypeGenericText;
+    if( type == CSpbContentProvider::ETypePhoneNumber )
+        {
+        elemType = MPbk2DoubleListboxDataElement::ETypePhoneNumber;
+        }
+    else if( type == CSpbContentProvider::ETypePhoneNumberMultiple && txt )
+        {
+        // if we get multiple phone numbers from content provider, then
+        // the string only contains the count (as text). We need to format
+        // that into proper UI text.
+        TInt num = 0;
+        TLex16 lex( *txt );
+        TInt err = lex.Val( num );
+        if( !err )
             {
-            // if we get multiple phone numbers from content provider, then
-            // the string only contains the count (as text). We need to format
-            // that into proper UI text.
-            TInt num = 0;
-            TLex16 lex( *txt );
-            TInt err = lex.Val( num );
-            if( !err )
-                {
-                delete txt;
-                txt = StringLoader::LoadL( R_QTN_PHOB_N_NUMBERS, num );
-                }
-            else
-                {
-                // in case of convert error
-                txt->Des().Zero();
-                }
+            delete txt;
+            txt = StringLoader::LoadL( R_QTN_PHOB_N_NUMBERS, num );
             }
-        
-        aDataElement.SetText(
-            MPbk2DoubleListboxDataElement::EStatusText, txt, elemType );
+        else
+            {
+            // in case of convert error
+            txt->Des().Zero();
+            }
+        }
+    
+    aDataElement.SetText(
+        MPbk2DoubleListboxDataElement::EStatusText, txt, elemType );
 
-        CleanupStack::PopAndDestroy();  // link
-        }
     }
 
 // -----------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -413,6 +413,11 @@
         {
         iCurrentCommandId = aCommandId;
         }
+    
+    if ( EPbk2CmdOpenCca == aCommandId )
+    	{
+        iControl->SetOpeningCca( ETrue );
+    	}
 
     // No command handling in this class, forward to Commands
     if (!iCommandHandler->HandleCommandL( aCommandId, *iControlProxy, &iView ))
@@ -703,7 +708,14 @@
     {
     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
         ("CPbk2NamesListExView(%x)::DoDeactivate()"), this);
-
+    
+    // CCA Connection should be closed when Name List View deactivated
+    if( iCCAConnection )
+        {
+        iCCAConnection->Close();
+        iCCAConnection = NULL;
+        }
+    
     if ( iCommandHandler )
         {
         iCommandHandler->RemoveMenuCommandObserver( *this );
@@ -1320,6 +1332,11 @@
         // after a command is finished.
         iCtrlVisibleStateBeforeLosingForground = ETrue;
 
+        if( EPbk2CmdOpenCca == iCurrentCommandId )
+            {
+            iControl->SetOpeningCca( EFalse );
+            }
+            
         iControl->AllowPointerEvents( ETrue );
         iControl->ShowThumbnail();
 
--- a/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp	Tue May 11 16:00:21 2010 +0300
@@ -734,14 +734,9 @@
 // --------------------------------------------------------------------------
 //
 void CNamesListUIExtensionPlugin::StoreUnavailable
-        ( MVPbkContactStore& aContactStore, TInt /*aReason*/ )
+        ( MVPbkContactStore& /*aContactStore*/, TInt /*aReason*/ )
     {
-    if ( aContactStore.StoreProperties().Name().UriDes().Compare
-            ( VPbkContactStoreUris::DefaultCntDbUri() ) && iLocalStore )
-        {
-        iLocalStore->Close( *this );
-        iLocalStore = NULL;
-        }
+
     }
 
 // --------------------------------------------------------------------------
@@ -767,15 +762,7 @@
                {
                iLocalStoreContactsCount--;
                break;
-               }
-               
-           case TVPbkContactStoreEvent::EStoreBackupRestoreCompleted:
-           case TVPbkContactStoreEvent::EUnknownChanges:
-               {
-               iLocalStoreContactsCount = iLocalStore->StoreInfo().NumberOfContactsL();
-               break;
-               }
-               
+               }             
            default:
                break;
            }
--- a/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h	Tue May 11 16:00:21 2010 +0300
@@ -92,6 +92,12 @@
         HBufC* GetContactTitleWithCompanyNameL(
             const MVPbkBaseContactFieldCollection& aContactFields,
             TUint32 aFormattingFlags );
+        
+    public: // From MPbk2ContactNameFormatter3
+        CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC(
+                CVPbkFieldTypeRefsList& aFieldTypeList,
+                const MVPbkBaseContactFieldCollection& aContactFields );
+    
     private:
          
         void GetContactTitleWithCompanyName(
@@ -103,7 +109,11 @@
                     const TUint32 aFormattingFlags );
       
         TBool IsCompanyNameField();
-
+        
+        void TitleFieldsL( CVPbkFieldTypeRefsList& aFieldTypeList,
+                const MVPbkBaseContactFieldCollection& aContactFields, 
+                const TInt aStartingPosition, const TInt aEndingPosition );
+        
     protected: // Implementation
         CPbk2ContactNameFormatter(
             const MVPbkFieldTypeList& aMasterFieldTypeList,
--- a/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h	Tue May 11 16:00:21 2010 +0300
@@ -24,6 +24,7 @@
 #include <e32base.h>
 #include <MPbk2ContactNameFormatter.h>
 #include <MPbk2ContactNameFormatter2.h>
+#include <MPbk2ContactNameFormatter3.h>
 
 #include "TPbk2SortOrderFieldMapper.h"
 
@@ -44,7 +45,8 @@
 NONSHARABLE_CLASS( CPbk2ContactNameFormatterBase )
         :   public CBase,
             public MPbk2ContactNameFormatter,
-            public MPbk2ContactNameFormatter2
+            public MPbk2ContactNameFormatter2,
+            public MPbk2ContactNameFormatter3
     {
     public:  // Constructors and destructor
 
@@ -91,7 +93,10 @@
             const MVPbkBaseContactFieldCollection& aContactFields,
             TUint32 aFormattingFlags ) = 0;
         
-
+    public: // from MPbk2ContactNameFormatter3
+       virtual CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC(
+               CVPbkFieldTypeRefsList& aFieldTypeList,
+               const MVPbkBaseContactFieldCollection& aContactFields ) = 0;
 
     protected:  // New functions
 
--- a/phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h	Tue May 11 16:00:21 2010 +0300
@@ -87,7 +87,16 @@
              {
              return NULL;
              }
-
+         
+    public: // From MPbk2ContactNameFormatter3
+        
+        CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC(
+                CVPbkFieldTypeRefsList& /*aFieldTypeList*/,
+                const MVPbkBaseContactFieldCollection& /*aContactFields */)
+             {
+             return NULL;
+             }
+         
     private: // Implementation
         CPbk2JapaneseContactNameFormatter(
             const MVPbkFieldTypeList& aMasterFieldTypeList,
--- a/phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp	Tue May 11 16:00:21 2010 +0300
@@ -150,6 +150,10 @@
              (aFormattingFlags, ENameCompanyPart+1, count-1); // zero-based
          }
     
+     if ( !result || aFormattingFlags & MPbk2ContactNameFormatter::EDisableCompanyNameSeparator  )
+         {
+         return result;
+         }
      return result+1; // for seperator ","
     }
 // -----------------------------------------------------------------------------
@@ -190,6 +194,10 @@
            {
            return static_cast<MPbk2ContactNameFormatter2*>( this );
            }
+    if ( aExtensionUid == MPbk2ContactNameFormatterExtension3Uid )
+           {
+           return static_cast<MPbk2ContactNameFormatter3*>( this );
+           }
     return NULL;
     }
 // -----------------------------------------------------------------------------
@@ -217,7 +225,10 @@
         //third field is expected to be company name
         if ( IsCompanyNameField() )
             {
-            aTitle.Append(KSeparator);
+            if ( !( aFormattingFlags & MPbk2ContactNameFormatter::EDisableCompanyNameSeparator)  )
+                {
+                aTitle.Append(KSeparator);
+                }
             DoGetContactTitle(aTitle, EPreserveLeadingSpaces,
                     ENameCompanyPart, ENameCompanyPart);
             }
@@ -250,6 +261,23 @@
     }
 
 // -----------------------------------------------------------------------------
+// CPbk2ContactNameFormatter::TitleWithCompanyNameFieldsLC
+// -----------------------------------------------------------------------------
+//
+CVPbkBaseContactFieldTypeListIterator* 
+CPbk2ContactNameFormatter::TitleWithCompanyNameFieldsLC(
+        CVPbkFieldTypeRefsList& aFieldTypeList,
+        const MVPbkBaseContactFieldCollection& aContactFields )
+    {
+    
+    TitleFieldsL( aFieldTypeList, aContactFields, ENameFirstPart, ENameCompanyPart);
+
+    return CVPbkBaseContactFieldTypeListIterator::NewLC(
+            aFieldTypeList,
+            aContactFields);
+    
+    }
+// -----------------------------------------------------------------------------
 // CPbk2ContactNameFormatter::ActualTitleFieldsLC
 // See function CPbk2ContactNameFormatter::GetContactTitle.
 // -----------------------------------------------------------------------------
@@ -259,29 +287,39 @@
         CVPbkFieldTypeRefsList& aFieldTypeList,
         const MVPbkBaseContactFieldCollection& aContactFields)
     {
+
+    TitleFieldsL( aFieldTypeList, aContactFields, ENameFirstPart, ENameSecondPart);
+           
+    return CVPbkBaseContactFieldTypeListIterator::NewLC(
+            aFieldTypeList,
+            aContactFields);
+    }
+// -----------------------------------------------------------------------------
+// CPbk2ContactNameFormatter::TitleFieldsL
+// -----------------------------------------------------------------------------
+//	
+void CPbk2ContactNameFormatter::TitleFieldsL( CVPbkFieldTypeRefsList& aFieldTypeList,
+        const MVPbkBaseContactFieldCollection& aContactFields, 
+        const TInt aStartingPosition, const TInt aEndingPosition )
+    {
     aFieldTypeList.Reset();
 
     SetFieldMapper( aContactFields );
     
     DoAppendNonEmptyTitleFieldTypesL(
             aFieldTypeList,
-            ENameFirstPart,
-            ENameSecondPart);
+            aStartingPosition,
+            aEndingPosition);
 
     if( aFieldTypeList.FieldTypeCount() == 0 )
         {
         const TInt count = iFieldMapper.FieldCount();
         DoAppendNonEmptyTitleFieldTypesL(
                 aFieldTypeList,
-                ENameSecondPart+1,
+                aEndingPosition+1,
                 count-1);
         }
-
-    return CVPbkBaseContactFieldTypeListIterator::NewLC(
-            aFieldTypeList,
-            aContactFields);
     }
-
 // -----------------------------------------------------------------------------
 // CPbk2ContactNameFormatter::MaxTitleLength
 // -----------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp	Tue May 11 16:00:21 2010 +0300
@@ -171,6 +171,8 @@
 //
 inline void CPbk2SortOrderManagerImpl::ConstructL( RFs* aFs )
     {
+    FeatureManager::InitializeLibL();
+    iFeatureManagerInitilized = ETrue;
     iSortOrderSettings = CRepository::NewL(TUid::Uid(KCRUidPhonebook));
 
     // Open resource file for reading language specific default values
@@ -230,8 +232,6 @@
         ( *iSortOrderSettings, *this );
     iSortOrderMonitor->ActivateL();
     iSeparatorMonitor->ActivateL();
-    FeatureManager::InitializeLibL();
-    iFeatureManagerInitilized = ETrue;
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h	Tue May 11 16:00:21 2010 +0300
@@ -39,7 +39,6 @@
 class CPbk2StoreConfiguration;
 class CVPbkSortOrderAcquirer;
 class MVPbkContactLinkArray;
-class CPbk2MyCardFilter;
 
 // CLASS DECLARATION
 
@@ -192,8 +191,6 @@
         CVPbkSortOrderAcquirer* iSortOrderAcquirer;
         /// Ref: list of opened contact stores
         RPointerArray<MVPbkContactStore> iOpenedStores;
-        /// Own: 
-        CPbk2MyCardFilter* iMyCardFilter;
     };
 
 #endif // CPBK2SERVERAPPSTOREMANAGER_H
--- a/phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp	Tue May 11 16:00:21 2010 +0300
@@ -293,12 +293,6 @@
 void CPbk2MultiAssignDataPhase::ContactOperationFailed
         ( TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ )
     {
-    // Locking the contact failed
-     if ( KErrInUse == aErrorCode )
-        {
-        CCoeEnv::Static()->HandleError( aErrorCode );
-        }
-
      // If the contact operation failed, the iStoreContact is expected to be deleted,
      // otherwise it will lead to memory leak.
     if ( iStoreContact )
--- a/phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp	Tue May 11 16:00:21 2010 +0300
@@ -48,9 +48,6 @@
 // Debugging headers
 #include <Pbk2Debug.h>
 
-#include <featmgr.h>
-
-
 /// Unnamed namespace for local definitions
 namespace {
 
@@ -71,50 +68,6 @@
 
 } /// namespace
 
-/**
- * Helper class to filter mycard from phonebooks views
- */
-class CPbk2MyCardFilter : public CBase, 
-                          public MVPbkContactSelector
-    {
-public:
-    CPbk2MyCardFilter();
-    ~CPbk2MyCardFilter();
-protected:  // From MVPbkContactSelector
-    TBool IsContactIncluded(
-                const MVPbkBaseContact& aContact );
-    };
-
-CPbk2MyCardFilter::CPbk2MyCardFilter()
-    {
-    }
-
-CPbk2MyCardFilter::~CPbk2MyCardFilter()
-    {
-    }
-
-TBool CPbk2MyCardFilter::IsContactIncluded(
-                const MVPbkBaseContact& aContact )
-    {
-    TBool isContactIncluded( ETrue );
-    // this is temporary solution to hide own contact from phonebook contacts list,
-    // TODO remove this code when we can hide own contact with contact model
-
-    MVPbkBaseContact& contact = const_cast<MVPbkBaseContact&>( aContact );
-    TAny* extension = contact.BaseContactExtension( 
-                KVPbkBaseContactExtension2Uid );
-
-    if( extension )
-        {
-        MVPbkBaseContact2* baseContactExtension =
-                static_cast<MVPbkBaseContact2*>( extension );
-        TInt error( KErrNone );
-        isContactIncluded =
-                ( !baseContactExtension->IsOwnContact( error ) );
-        }
-    
-    return isContactIncluded;
-    }
 
 // --------------------------------------------------------------------------
 // CPbk2ServerAppStoreManager::CPbk2ServerAppStoreManager
@@ -140,7 +93,6 @@
     delete iSortOrderAcquirer;
     delete iMonitor;
     delete iFetchView;
-    delete iMyCardFilter;
     }
 
 // --------------------------------------------------------------------------
@@ -220,22 +172,11 @@
     CPbk2ContactViewBuilder* viewBuilder = CPbk2ContactViewBuilder::NewLC
         ( iContactManager, aStoreProperties );
 
-    if( !iMyCardFilter )
-        {
-        FeatureManager::InitializeLibL();
-        if( FeatureManager::FeatureSupported( KFeatureIdffContactsMycard ) )
-            {
-            iMyCardFilter = new (ELeave) CPbk2MyCardFilter();
-            }
-        FeatureManager::UnInitializeLib();    
-        }
-
-    
     if ( aViewType == EVPbkContactsView )
         {
         result = viewBuilder->CreateContactViewForStoresLC
             ( aStoreUris, *this, aSortOrderManager.SortOrder(),
-              aViewFilter, aFlags, iMyCardFilter );
+              aViewFilter, aFlags );
         CleanupStack::Pop(); // result
         }
     else if ( aViewType == EVPbkGroupsView )
--- a/phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h	Tue May 11 16:00:21 2010 +0300
@@ -119,7 +119,7 @@
                 CPbk2ContactViewListBoxModel::TParams& aParams );
         void ConstructL(CPbk2StorePropertyArray* aStoreProperties,
                 MPbk2ContactUiControlExtension* aUiExtension);
-        void FormatBufferL(
+        virtual void FormatBufferL(
                 const TInt aIndex ) const;
         void FormatEmptyBuffer() const;
         virtual void FormatBufferForContactL(
--- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h	Tue May 11 16:00:21 2010 +0300
@@ -200,6 +200,7 @@
 
 protected:
 
+#ifndef RD_TOUCH2
     /**
      * Draw the item background.
      *
@@ -208,6 +209,8 @@
      * @param aRect Drawing area. 
      */
     void DrawCurrentItemRect(const TRect& aRect) const;
+
+#endif
     
     /** 
      * Array of properties.
--- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h	Tue May 11 16:00:21 2010 +0300
@@ -58,7 +58,7 @@
             CCoeControl& aContainer,
             TResourceReader& aResourceReader,
             const CVPbkContactManager& aManager,
-            MVPbkContactViewBase& aView,
+            MPbk2FilteredViewStack& aView,
             MPbk2ContactNameFormatter& aNameFormatter,
             CPbk2StorePropertyArray& aStoreProperties,
             MPbk2ContactUiControlExtension* aUiExtension,
@@ -91,7 +91,7 @@
         CCoeControl& aContainer,
         MPbk2ContactUiControlExtension* aUiExtension,
         CPbk2PredictiveSearchFilter& aSearchFilter,	
-        MVPbkContactViewBase& aView,
+        MPbk2FilteredViewStack& aView,
         CPbk2ThumbnailManager& aThumbManager );
     
     /*
@@ -101,7 +101,7 @@
 		CCoeControl& aContainer, 
 		TResourceReader& aResourceReader,
 		const CVPbkContactManager& aManager, 
-		MVPbkContactViewBase& aView,
+		MPbk2FilteredViewStack& aView,
 		MPbk2ContactNameFormatter& aNameFormatter,
 		CPbk2StorePropertyArray& aStoreProperties );
     
@@ -121,7 +121,7 @@
 
 private:	//data
 	//REF: View
-	MVPbkContactViewBase& iView;
+    MPbk2FilteredViewStack& iView;
 	//REF:	thumbnail manager
 	CPbk2ThumbnailManager& iThumbManager;
 };
--- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h	Tue May 11 16:00:21 2010 +0300
@@ -26,6 +26,8 @@
 class CPbk2ThumbnailManager;
 class MPbk2ContactUiControlDoubleListboxExtension;
 class CPbk2ContactViewDoubleListboxDataElement;
+class CDataElementCache;
+class MPbk2FilteredViewStack;
 
 // CLASS DECLARATION
 
@@ -45,7 +47,8 @@
      */
      static CPbk2ContactViewDoubleListBoxModel* NewL(
             CPbk2ContactViewListBoxModel::TParams& aParams,
-            CPbk2ThumbnailManager& aThumbManager );
+            CPbk2ThumbnailManager& aThumbManager,
+            MPbk2FilteredViewStack& aFilteredViewStack );
 
     /**
      * Destructor.
@@ -61,7 +64,8 @@
      */
     CPbk2ContactViewDoubleListBoxModel(
         CPbk2ContactViewListBoxModel::TParams& aParams,
-        CPbk2ThumbnailManager& aThumbManager );
+        CPbk2ThumbnailManager& aThumbManager,
+        MPbk2FilteredViewStack& aFilteredViewStack );
 
 protected: // new 
     
@@ -87,15 +91,27 @@
      * 
      * @param aIconId 	Id of the icon in icon array
      */
-    void AppendIconIndexIfFound(  const TPbk2IconId& aIconId ) const;
-        
+    void AppendIconIndexIfFound( const TPbk2IconId& aIconId ) const;
+
+    void FormatBufferForElementDataL(
+        CPbk2ContactViewDoubleListboxDataElement& aDataElement, 
+        TInt aIndex ) const;
+
+    void AppendThumbnailL( 
+            CPbk2ContactViewDoubleListboxDataElement& aDataElement, 
+            TInt aIndex ) const;
+    
+    void FetchDataFromExtension(
+            CPbk2ContactViewDoubleListboxDataElement& aDataElement,
+            TInt aIndex ) const;
+    
 public: // From CPbk2ContactViewListBoxModel
-    
+    void FormatBufferL( 
+            const TInt aIndex ) const;    
     /// See CPbk2ContactViewListBoxModel
     void FormatBufferForContactL(
         const MVPbkViewContact& aViewContact, 
         TInt aIndex ) const;
-    
 private:	//data
 	
 	//REF:	thumbnail manager
@@ -104,6 +120,11 @@
 	/// Ref
 	MPbk2ContactUiControlDoubleListboxExtension* iDoubleListExtensionPoint;
 	
+	/// Own:
+	CDataElementCache* iDataElementCache;
+	
+	/// Ref
+	MPbk2FilteredViewStack& iFilteredViewStack;
     };
 
 #endif // CPBK2CONTACTVIEWDOUBLELISTBOXMODEL_H
--- a/phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h	Tue May 11 16:00:21 2010 +0300
@@ -25,6 +25,7 @@
 #include <TPbk2IconId.h>
 
 //FORWARD
+class MVPbkContactLink;
 
 // CLASS DECLARATION
 
@@ -37,12 +38,16 @@
         public MPbk2DoubleListboxDataElement
     {
 public: // constructor and destructor
-    static CPbk2ContactViewDoubleListboxDataElement* NewLC();
+    static CPbk2ContactViewDoubleListboxDataElement* NewL(
+            MVPbkContactLink* aLink = NULL,
+            TInt aListIndex = KErrNotFound );
     ~CPbk2ContactViewDoubleListboxDataElement();
 
     TPtr TextPtr(
             MPbk2DoubleListboxDataElement::TTextDataElementItems aIndex) const;
-
+    inline const MVPbkContactLink* ContactLink();
+    inline TInt ListIndex();
+    
 public: // from MPbk2DoubleListboxDataElement
     const TPbk2IconId& IconId( 
             MPbk2DoubleListboxDataElement::TIconDataElementItems aIndex ) const;
@@ -59,16 +64,33 @@
             HBufC* aBuffer,
             MPbk2DoubleListboxDataElement::TTextDataType aType );
 private:
-    inline CPbk2ContactViewDoubleListboxDataElement();
+    inline CPbk2ContactViewDoubleListboxDataElement(TInt aListIndex);
     inline void ConstructL();
 
 private:
     TFixedArray<TPbk2IconId, 3> iIcons;
     TFixedArray<HBufC*, 2> iTexts;
     TFixedArray<TTextDataType, 2 > iTextType;
+    /// Own
     HBufC* iEmptyBuffer;
+    /// Own: for data cache
+    MVPbkContactLink* iLink;
+    /// for data cache
+    TInt iListIndex;
     };
-        
+
+inline const MVPbkContactLink* 
+CPbk2ContactViewDoubleListboxDataElement::ContactLink()
+    {
+    return iLink;
+    }
+
+inline TInt CPbk2ContactViewDoubleListboxDataElement::ListIndex()
+    {
+    return iListIndex;
+    }
+
+
 #endif // PBK2CONTACTVIEWDOUBLELISTBOXDATAELEMENT_H
 
 // End of File
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp	Tue May 11 16:00:21 2010 +0300
@@ -22,13 +22,17 @@
 #include "MVPbkContactViewBase.h"
 #include "MPbk2ContactNameFormatter.h"
 
+#include <MPbk2ContactNameFormatter2.h>
 #include <FindUtil.h>
 #include <badesca.h>
+#include <featmgr.h>
 
 const TInt KMaxAdaptiveGridCacheCount = 10;
 const TInt KAdaptiveSearchKeyMapGranularity = 100;
 const TInt KAdaptiveSearchRefineStep = 10;
-const TInt KContactFormattingFlags = MPbk2ContactNameFormatter::EPreserveLeadingSpaces | MPbk2ContactNameFormatter::EReplaceNonGraphicChars;
+const TInt KContactFormattingFlags = MPbk2ContactNameFormatter::EPreserveLeadingSpaces |
+            MPbk2ContactNameFormatter::EReplaceNonGraphicChars |
+            MPbk2ContactNameFormatter::EDisableCompanyNameSeparator;
 
 
 NONSHARABLE_CLASS(CPbk2AdaptiveGrid) : public CBase
@@ -181,20 +185,42 @@
 		{
 		const MVPbkViewContact& contact = iView->ContactAtL( iCounter );
 		const TInt titleLength = iNameFormatter.MaxTitleLength( contact.Fields(), KContactFormattingFlags );
-		HBufC* title = HBufC::NewLC( titleLength );
-		TPtr ptrTitle = title->Des();
-		iNameFormatter.GetContactTitle( contact.Fields(), ptrTitle, KContactFormattingFlags );
-		BuildGridL( ptrTitle, *iSearchString, iKeyMap );
+		HBufC* title = NULL;
+		
+		if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames ) )
+            {
+            MPbk2ContactNameFormatter2* nameformatterExtension =
+                    reinterpret_cast<MPbk2ContactNameFormatter2*>( iNameFormatter.
+                    ContactNameFormatterExtension( MPbk2ContactNameFormatterExtension2Uid ) );
+            if ( nameformatterExtension && titleLength )
+                {
+                title = nameformatterExtension->GetContactTitleWithCompanyNameL( contact.Fields(),
+                    KContactFormattingFlags );
+                
+                }
+            }
+        else if ( titleLength )
+            {
+            title = iNameFormatter.GetContactTitleL( contact.Fields(), KContactFormattingFlags );
+            }
+		
+		if ( !title )
+		    {
+		    title = HBufC::NewL( titleLength );
+		    }
+
+        CleanupStack::PushL( title );
+		BuildGridL( *title, *iSearchString, iKeyMap );
 		
 		// check number of spaces in the contact title
-		TInt numberOfSpaces = NumberOfSpacesInString( ptrTitle );
+		TInt numberOfSpaces = NumberOfSpacesInString( *title );
 		if ( numberOfSpaces > maxSpacesNumber )
 		    {
 		    maxSpacesNumber = numberOfSpaces;
 		    }
 		// Check if the contact's title include drgraphs,
 		// if it is, add it to array to save.
-		if ( IsDigraphContactsTitleL( ptrTitle ) )
+		if ( IsDigraphContactsTitleL( *title ) )
 			{			
 			iDigraphContactsTitleArray.AppendL( title );
 			CleanupStack::Pop(); //title
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp	Tue May 11 16:00:21 2010 +0300
@@ -843,12 +843,6 @@
 //
 void CPbk2ContactEditorDlgImpl::SetInitialCurrentLine()
     {
-    TRAPD( err, ActivateFirstPageL() );
-    if(err)
-        {
-        return;
-        }
-
     TInt focusedIndex = 0;
     if ( iParams.iFocusedContactField )
         {
@@ -3379,31 +3373,36 @@
 		TEventCode aType )
     {
     MPbk2ContactEditorField* editorField = aCurrentField->ContactEditorField();
-    MVPbkStoreContactField& contactField = editorField->ContactField();
-    TVPbkFieldStorageType dataType = contactField.FieldData().DataType();
-    
-    if ( EVPbkFieldStorageTypeText == dataType )
+    if ( editorField )
         {
-        const MVPbkContactFieldTextData& textData = 
-            MVPbkContactFieldTextData::Cast(contactField.FieldData());
-        TInt maxSize = textData.MaxLength();
+        MVPbkStoreContactField& contactField = editorField->ContactField();
+        TVPbkFieldStorageType dataType = contactField.FieldData().DataType();
         
-        if ( KVPbkUnlimitedFieldLength != maxSize &&
-                IsCheckPointEvent( aKeyEvent, aType ) )
+        if ( EVPbkFieldStorageTypeText == dataType )
             {
-            CEikEdwin* ctrl = editorField->Control();
-            HBufC* textBuf = ctrl->GetTextInHBufL();
+            const MVPbkContactFieldTextData& textData = 
+                MVPbkContactFieldTextData::Cast(contactField.FieldData());
+            TInt maxSize = textData.MaxLength();
             
-            if ( textBuf )
+            if ( KVPbkUnlimitedFieldLength != maxSize &&
+                    IsCheckPointEvent( aKeyEvent, aType ) )
                 {
-                TInt maxLen = maxSize;
-                if ( IsUnicodeL( *textBuf ) )
+                CEikEdwin* ctrl = editorField->Control();
+                HBufC* textBuf = ctrl->GetTextInHBufL();
+                
+                if ( textBuf )
                     {
-                    maxLen = maxSize / KTwoBytes - KExtraByte;
-                    }
-                if ( ctrl->MaxLength() != maxLen && textBuf->Length() <= maxLen )
-                    {
-                    ctrl->SetMaxLength( maxLen );
+                    CleanupStack::PushL( textBuf );
+                    TInt maxLen = maxSize;
+                    if ( IsUnicodeL( *textBuf ) )
+                        {
+                        maxLen = maxSize / KTwoBytes - KExtraByte;
+                        }
+                    if ( ctrl->MaxLength() != maxLen && textBuf->Length() <= maxLen )
+                        {
+                        ctrl->SetMaxLength( maxLen );
+                        }
+                    CleanupStack::PopAndDestroy( textBuf );
                     }
                 }
             }
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp	Tue May 11 16:00:21 2010 +0300
@@ -96,6 +96,7 @@
         const MVPbkViewContact& aViewContact,
         RArray<TPbk2IconId>& aIconArray ) const
     {
+    CleanupClosePushL( aIconArray );
     aIconArray.Reset();
     
     // get dynamic icons from ui extension
@@ -134,6 +135,7 @@
                 }
             }
         }
+    CleanupStack::Pop();
     }
 
 //  End of File
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp	Tue May 11 16:00:21 2010 +0300
@@ -427,7 +427,10 @@
     const RPointerArray<MPbk2UiControlCmdItem>* aCommands )
     {
     iListboxModelDecorator->SetListCommands( aCommands );
-    iColumnData->SetListCommands( aCommands );
+    if( iColumnData )
+        {
+        iColumnData->SetListCommands( aCommands );
+        }
     }
 
 // --------------------------------------------------------------------------
@@ -520,7 +523,7 @@
     model->SetUnnamedText( iResourceData.iUnnamedText );
     iModel = model;
 
-    if(FeatureManager::FeatureSupported(KFeatureIdFfContactsPredictiveSearch))
+    if( iColumnData )
         {
         iColumnData->SetDataModel( iModel );
         }
@@ -589,18 +592,26 @@
 //
 void CPbk2ContactViewListBox::CreateItemDrawerL()
     {
-    CPbk2ContactViewCustomListBoxData* columnData =
-                    CPbk2ContactViewCustomListBoxData::NewL( iSearchFilter );
-
-    CleanupStack::PushL( columnData );
-
-    iItemDrawer=new(ELeave) CPbk2ContactViewCustomListBoxItemDrawer(
-            static_cast<MTextListBoxModel*>(Model()), iCoeEnv->NormalFont(),
-            columnData);
-    CleanupStack::Pop( columnData );
-
-    //Ownership has been transferred to iItemDrawer
-    iColumnData = columnData;
+    // Use custom drawer only if predictive search is enabled
+    if( FeatureManager::FeatureSupported(KFeatureIdFfContactsPredictiveSearch) )
+        {
+        CPbk2ContactViewCustomListBoxData* columnData =
+                        CPbk2ContactViewCustomListBoxData::NewL( iSearchFilter );
+    
+        CleanupStack::PushL( columnData );
+    
+        iItemDrawer=new(ELeave) CPbk2ContactViewCustomListBoxItemDrawer(
+                static_cast<MTextListBoxModel*>(Model()), iCoeEnv->NormalFont(),
+                columnData);
+        CleanupStack::Pop( columnData );
+    
+        //Ownership has been transferred to iItemDrawer
+        iColumnData = columnData;
+        }
+    else
+        {
+        CAknSingleGraphicStyleListBox::CreateItemDrawerL();
+        }
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp	Tue May 11 16:00:21 2010 +0300
@@ -876,7 +876,8 @@
                 iContainer( aContainer ),
                 iNameFormatter( aNameFormatter ),
                 iStoreProperties( aStoreProperties ),
-                iAllowPointerEvents( ETrue )
+                iAllowPointerEvents( ETrue ),
+                iOpeningCca( EFalse )
     {
     }
 
@@ -897,7 +898,8 @@
                 iNameFormatter( aNameFormatter ),
                 iStoreProperties( aStoreProperties ),
                 iAllowPointerEvents( ETrue ),                
-                iThumbManager( aThumbManager )
+                iThumbManager( aThumbManager ),
+                iOpeningCca( EFalse )
     {
     }
 
@@ -2401,14 +2403,33 @@
     // reset too. So, we reset both the find box and the view stack.
     TRAPD( res,
         {
-        // This will reset back to base view
-        iCurrentState->ResetFindL();
+        // This will reset back to base view, however retain original view
+		//when opening CCA
+        if( !iOpeningCca ) 
+            {
+            iCurrentState->ResetFindL(); 
+            }
         });
     HandleError( res );
 
     if( !iCheckMassUpdate->MassUpdateCheckThis() )
         {
-        Reset();
+        // If it is the first time to goto a contat's cca card, then in cca we 
+        // will set a defualt number to that contact by CmsSetVoiceCallDefault.
+        // Then db item changed event is notified to ui layer and names list control 
+        // updated accordingly. But to end user that is not allowed, so use this 
+        // flag to avoid this reset of ui control.
+        if( iOpeningCca )
+            {
+            if( iCurrentState->NamesListState() == EStateEmpty )
+                {
+                SelectAndChangeReadyStateL();
+                }
+            }
+        else
+            {              
+            Reset();
+            }	
         }
 
     // Do not handle contact addition here (DoHandleContactAdditionL),
@@ -2603,6 +2624,15 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPbk2NamesListControl::SetOpeningCca
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2NamesListControl::SetOpeningCca( TBool aIsOpening )
+	{
+	iOpeningCca = aIsOpening;
+	}
+
+// ---------------------------------------------------------------------------
 // CPbk2NamesListControlBgTask::CPbk2NamesListControlBgTask
 // ---------------------------------------------------------------------------
 //
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp	Tue May 11 16:00:21 2010 +0300
@@ -414,7 +414,9 @@
 // CPbk2ThumbnailManager::GetPbkIconIndexL()
 // --------------------------------------------------------------------------
 //
-TInt CPbk2ThumbnailManager::GetPbkIconIndexL( TInt aListboxIndex, const MVPbkBaseContact& aContactLink )
+TInt CPbk2ThumbnailManager::GetPbkIconIndexL( 
+        TInt aListboxIndex, 
+        const MVPbkContactLink& aContactLink )
 	{
 	TInt arrIndex = iDefaultIconIndex;
 	
@@ -424,7 +426,7 @@
 		CPbk2TmItem* item = iContactThumbnails[ aListboxIndex ];
 		if( !item )
 		    {
-            item = CPbk2TmItem::NewL( aContactLink.CreateLinkLC(), aListboxIndex );
+            item = CPbk2TmItem::NewL( aContactLink.CloneLC(), aListboxIndex );
             CleanupStack::Pop(); // link
             // set default icon index
             item->SetIconArrayIndexAndId( iDefaultIconIndex,iDefaultIconId );
@@ -1032,16 +1034,39 @@
         }
     else
         {
-        // there is items in the listbox that are not loaded yet. If there is favorite contacts, 
-        // those are added afterwards to the list. normal items are added first.
-        const TInt itemCount = aView.ContactCountL() - thumbnailCount;
-        for( TInt i = 0; i < itemCount; ++i )
+        // Check if view count has changed
+        if ( aView.ContactCountL() != thumbnailCount )
             {
-            iContactThumbnails.InsertL( NULL, 0 );
-            }
-        if( itemCount > 0 )
-            {
-            ResetIndexes();
+            if( iLoadingQueue.Count() > 0 )
+                {
+                // store item that is currently in processing
+                iInProgressItemToBeRemoved = iLoadingQueue[0];
+                }
+
+            for ( TInt i = thumbnailCount - 1; i >= 0; --i )
+                {
+                CPbk2TmItem* item = iContactThumbnails[i];
+                if ( item )
+                    {
+                    // check that the icon is not a default icon
+                    if( iIconArray && item->GetIconArrayIndex() != iDefaultIconIndex )
+                        {
+                        // inform icon array to remove the icon
+                        iIconArray->RemoveIcon( item->GetIconId() );
+                        }
+
+                    if ( iInProgressItemToBeRemoved == item )
+                        {
+                        // prevent item from being deleted later
+                        iContactThumbnails[i] = NULL;
+                        }
+                    }
+                }
+            
+            // reset and recreate arrays
+            iLoadingQueue.Reset();
+            iPriorityArray.Reset();
+            PreCreateThumbnailArrayL( aView );
             }
         }  
     }
--- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp	Tue May 11 16:00:21 2010 +0300
@@ -35,6 +35,8 @@
 #include <layoutmetadata.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
 #include <aknphysics.h>
+#include <akniconarray.h>
+#include <avkon.mbg>
 
 
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
@@ -97,6 +99,12 @@
     }
 //End of Code Added for PhoneBook2
 
+
+//Note:
+//****
+//PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES 
+//Define this Flag once Pbk2 decides to implement the MarkingMode changes that has been implemented for Avkon Lists
+	
 /**
 * About animation usage:
 * All animation usage is implemented in this class. Animation is eye candy and
@@ -161,6 +169,7 @@
     void DeleteAnim();
     void FocusGained();
     void FocusLost();
+    void SkinChangedL();
     void SkinChanged();
     void SetControl( CCoeControl* aControl );
 
@@ -186,6 +195,9 @@
                                  CWindowGc& aGc, 
                                  const TRect& aOutRect, 
                                  const TRect& aInnerRect ) const;
+
+    void LoadMarkingIconsL();
+
 public: //for handling column alignment
     struct TColumnExt
         {
@@ -284,6 +296,8 @@
     
     CArrayFix<TColumnExt>* iColumnExtArray; //for column alignment
     TRect iMarginRect;
+    
+    CAknIconArray* iMarkingIconArray;
     };
 
 /**
@@ -349,6 +363,11 @@
 
     
     iKineticScrolling = CAknPhysics::FeatureEnabled();
+
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    LoadMarkingIconsL();
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+
     }
 
 CPbk2ContactViewCustomListBoxDataExtension::~CPbk2ContactViewCustomListBoxDataExtension()
@@ -372,6 +391,12 @@
     delete iColorBmp;
     delete iHiliBmp;
     delete  iColumnExtArray;
+    if ( iMarkingIconArray )
+        {
+        iMarkingIconArray->ResetAndDestroy();
+        }
+
+    delete iMarkingIconArray;
     }
 
 MAknsControlContext* CPbk2ContactViewCustomListBoxDataExtension::SkinBackgroundContext() const
@@ -561,6 +586,19 @@
     }
 
 // -----------------------------------------------------------------------------
+// CPbk2ContactViewCustomListBoxDataExtension::SkinChangedL
+// -----------------------------------------------------------------------------
+//
+void CPbk2ContactViewCustomListBoxDataExtension::SkinChangedL()
+    {
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    DeleteAnim();
+    TryCreateAnimation();
+    CreateColorBitmapsL();
+    LoadMarkingIconsL();
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    }
+// -----------------------------------------------------------------------------
 // CPbk2ContactViewCustomListBoxDataExtension::SkinChanged
 // -----------------------------------------------------------------------------
 //
@@ -1144,6 +1182,44 @@
                                      KAknsIIDQsnFrListCenterPressed );
     }
 
+// -----------------------------------------------------------------------------
+// CPbk2ContactViewCustomListBoxDataExtension::LoadMarkingIconsL
+// -----------------------------------------------------------------------------
+//
+void CPbk2ContactViewCustomListBoxDataExtension::LoadMarkingIconsL()
+    {
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    if ( !iMarkingIconArray )
+        {
+        iMarkingIconArray = new ( ELeave ) CAknIconArray( 2 );
+        }
+    else
+        {
+        iMarkingIconArray->ResetAndDestroy();
+        }
+
+    CGulIcon* icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), 
+            KAknsIIDQgnPropCheckboxOn, 
+            AknIconUtils::AvkonIconFileName(), 
+            EMbmAvkonQgn_prop_checkbox_on, 
+            EMbmAvkonQgn_prop_checkbox_on_mask );
+    
+    CleanupStack::PushL( icon );
+    iMarkingIconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+
+    icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), 
+            KAknsIIDQgnPropCheckboxOff, 
+            AknIconUtils::AvkonIconFileName(), 
+            EMbmAvkonQgn_prop_checkbox_off, 
+            EMbmAvkonQgn_prop_checkbox_off_mask );
+
+    CleanupStack::PushL( icon );
+    iMarkingIconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    }
+
 CCoeControl *CPbk2ContactViewCustomListBoxData::Control() const 
     {
     return iExtension->iControl;
@@ -1950,12 +2026,38 @@
                                      const TColors& aColors,
                                      TInt aItemIndex ) const
     {
+    
+    CEikListBox* listbox = static_cast<CEikListBox*>( iExtension->iControl );
+    if ( listbox && !listbox->View()->ViewRect().Intersects( aRect ) )
+        {
+        // outside of the clipping rect -> don't process this item
+        return;
+        }
+
     TInt lastColumn = Min( LastColumn(), KMaxColumn );
     TInt column=0;
     TPtrC text;
     TPtrC tempText;
 
     TRgb aTextColor = aHighlight ? aColors.iHighlightedText : aColors.iText;
+    
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    TBool markingMode = EFalse;
+    TRect itemRect( aRect );
+    
+    if ( listbox->View() && listbox->View()->ItemDrawer() )
+        {
+        if ( listbox->View()->ItemDrawer()->Flags() 
+                & CListItemDrawer::EMarkingModeEnabled
+                && iExtension->iMarkingIconArray
+                &&  iExtension->iMarkingIconArray->Count() == 2 )
+            {
+            markingMode = ETrue;
+            itemRect.iTl.iX += 
+                    AknLayoutScalable_Avkon::list_single_graphic_pane_t1( 0 ).LayoutLine().il;
+            }
+        }
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
 
     MAknsSkinInstance *skin = AknsUtils::SkinInstance();
     MAknsControlContext *cc = AknsDrawUtils::ControlContext( Control() );
@@ -1971,10 +2073,13 @@
     
     if ( iExtension->iSubCellsMightIntersect )
         {
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+        CheckIfSubCellsIntersectL( &textLines[0], &rectClipped[0], *aText, itemRect );
+        }
+#else
         CheckIfSubCellsIntersectL( &textLines[0], &rectClipped[0], *aText, aRect );
         }
-
-    CEikListBox* listbox = static_cast<CEikListBox*>( iExtension->iControl );
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
     MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( &aGc );
 #endif // RD_UI_TRANSITION_EFFECTS_LIST
@@ -2015,6 +2120,42 @@
         }
     DrawHighLight( aGc, aRect, aHighlight, skin );
     
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    if ( markingMode && !aItemProperties.IsSelectionHidden() )
+        {
+        TAknLayoutRect layoutRect;
+        layoutRect.LayoutRect( aRect, 
+                AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) );
+        
+        aGc.SetPenColor( aColors.iText );
+        aGc.SetPenStyle( CGraphicsContext::ESolidPen );
+
+        CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked
+
+        if ( listbox->View()->ItemIsSelected( iExtension->iCurrentRow ) )
+            {
+            icon = (*iExtension->iMarkingIconArray)[0];
+            }
+        
+        CFbsBitmap* bitmap = icon->Bitmap();
+
+        if ( bitmap )
+            {
+            TSize size( bitmap->SizeInPixels() ); // set size if not already
+            TSize targetSize( layoutRect.Rect().Size() );
+            
+            if ( size.iWidth != targetSize.iWidth && size.iHeight != targetSize.iHeight )
+                {
+                AknIconUtils::SetSize( bitmap, targetSize,
+                        EAspectRatioPreservedAndUnusedSpaceRemoved ); 
+                }
+
+            aGc.BitBltMasked( layoutRect.Rect().iTl, bitmap, TRect( layoutRect.Rect().Size() ), icon->Mask(), EFalse );
+            }
+        
+        }
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    
     // The column draw loop
     column = 0;
     TInt subCellIndex = 0;
@@ -2129,8 +2270,13 @@
                 }
             
             TAknLayoutText textLayout;
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+            textLayout.LayoutText( itemRect, textLineLayout, usedFont );
+            TRect layoutedRect( itemRect);
+#else
             textLayout.LayoutText( aRect, textLineLayout, usedFont );
             TRect layoutedRect( aRect );
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
                           
             // *2 == leave some room for marquee
             const TInt maxlen( KMaxColumnDataLength * 2 ); 
@@ -2177,7 +2323,11 @@
                 {
                 iExtension->iMarquee->UseLogicalToVisualConversion( bidiConv );
                 
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+                if ( iExtension->iMarquee->DrawText( aGc, itemRect, textLineLayout, convBuf, usedFont, textColor ) )
+#else
                 if ( iExtension->iMarquee->DrawText( aGc, aRect, textLineLayout, convBuf, usedFont, textColor ) )
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
                     {
                     // all the loops have been executed
                     textLayout.DrawText( aGc, convBuf, bidiConv, textColor );
@@ -2279,7 +2429,11 @@
             TAknWindowLineLayout graphicLayout = iExtension->AtSL(subCellIndex).iGraphicLayout;
             TAknLayoutRect graphicRect; 
             
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+            graphicRect.LayoutRect( itemRect,graphicLayout );
+#else
             graphicRect.LayoutRect(aRect,graphicLayout);
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
             TSize graphicSize( graphicRect.Rect().Size() );
             
             if (index>=0 && IconArray())
@@ -2374,11 +2528,36 @@
         return;
         }
 
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    CEikListBox* listbox = static_cast<CEikListBox*>( iExtension->iControl );
+    TBool markingMode = EFalse;
+    TRect itemRect( aRect );
+    
+    if ( listbox->View() && listbox->View()->ItemDrawer() )
+        {
+        if ( listbox->View()->ItemDrawer()->Flags() 
+                & CListItemDrawer::EMarkingModeEnabled &&
+             iExtension->iMarkingIconArray && 
+             iExtension->iMarkingIconArray->Count() == 2 )
+            {
+            markingMode = ETrue;
+            itemRect.iTl.iX += 
+                AknLayoutScalable_Avkon::list_single_graphic_pane_t1( 0 ).LayoutLine().il;
+            }
+        }
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    
     TInt extraVerticalSpace=(aRect.Height()-font->HeightInPixels());
     TInt baseLineOffset=extraVerticalSpace/2+font->AscentInPixels();
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    TRect textRect( itemRect );
+    TRect textMRect; // textrect with margins.
+    textRect.iBr.iX = itemRect.iTl.iX;
+#else
     TRect textRect( aRect );
     TRect textMRect; // textrect with margins.
     textRect.iBr.iX=aRect.iTl.iX;
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
     TInt column=0;
     TPtrC text;
 
@@ -2388,11 +2567,20 @@
     // be too difficult to do without - and this is cleaner solution.
     
     // pass 1, figures out x-coordinates for columns.
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    TInt x = itemRect.iTl.iX;
+#else
     TInt x = aRect.iTl.iX;
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    
     TBool mirror = AknLayoutUtils::LayoutMirrored();
     if (mirror)
         {
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+        x = itemRect.iBr.iX;
+#else
         x = aRect.iBr.iX;
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
         }
     TInt maxx = x;
     while(column <= lastColumn)
@@ -2465,12 +2653,14 @@
         cc = SkinBackgroundContext();
         }
 
+#ifndef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
     // aRect is list item's rect, width of which is smaller than width of the list
     // with a scroll bar. List needs to draw under scroll bar anyway, so we need to
     // modify given rect here.
     TRect r(aRect);
     
     CEikListBox* listbox = static_cast<CEikListBox*>( iExtension->iControl );
+#endif // !PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
 
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
 
@@ -2507,8 +2697,13 @@
 #endif // RD_UI_TRANSITION_EFFECTS_LIST
         }
     
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    if ( iExtension->iCurrentRow < listbox->BottomItemIndex() )
+#else
     CEikListBox* list = static_cast<CEikListBox*>( iExtension->iControl );
+
     if ( iExtension->iCurrentRow < list->BottomItemIndex() )
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
         {
         AknListUtils::DrawSeparator( aGc, aRect, aColors.iText, skin );
         }
@@ -2525,6 +2720,49 @@
         }
 #endif // RD_UI_TRANSITION_EFFECTS_LIST
 
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    if ( markingMode && !aItemProperties.IsSelectionHidden() )
+        {
+        TAknLayoutRect layoutRect;
+        layoutRect.LayoutRect(
+            aRect, 
+            AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) );
+        
+        aGc.SetPenColor( aColors.iText );
+        aGc.SetPenStyle( CGraphicsContext::ESolidPen );
+
+        CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked
+
+        if ( listbox->View()->ItemIsSelected( iExtension->iCurrentRow ) )
+            {
+            icon = (*iExtension->iMarkingIconArray)[0];
+            }
+        
+        CFbsBitmap* bitmap = icon->Bitmap();
+
+        if ( bitmap )
+            {
+            TSize size( bitmap->SizeInPixels() ); // set size if not already
+            TSize targetSize( layoutRect.Rect().Size() );
+            
+            if ( size.iWidth != targetSize.iWidth &&
+                 size.iHeight != targetSize.iHeight )
+                {
+                AknIconUtils::SetSize(
+                    bitmap,
+                    targetSize,
+                    EAspectRatioPreservedAndUnusedSpaceRemoved ); 
+                }
+
+            aGc.BitBltMasked( layoutRect.Rect().iTl,
+                              bitmap,
+                              TRect( layoutRect.Rect().Size() ),
+                              icon->Mask(),
+                              EFalse );
+            }
+        }
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    
     // The column draw loop
     column = 0;
     FOREVER
@@ -3144,7 +3382,11 @@
     // too.
     if( KAknsMessageSkinChange == aType )
         {
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+        TRAP_IGNORE( iExtension->SkinChangedL() );
+#else
         iExtension->SkinChanged();
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
         }
     else if(aType == KEikDynamicLayoutVariantSwitch)
         {
--- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp	Tue May 11 16:00:21 2010 +0300
@@ -50,6 +50,11 @@
 #include "cpbk2contactviewcustomlistboxitemdrawer.h"
 //End of Code Added for PhoneBook2
 
+//Note:
+//****
+//PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES 
+//Define this Flag once Pbk2 decides to implement the MarkingMode changes that has been implemented for Avkon Lists
+
 //
 //    Class CPbk2ContactViewCustomListBoxItemDrawer
 //
@@ -143,6 +148,7 @@
     data->SetItemCellSize( iItemCellSize );
     }
 
+#ifndef RD_TOUCH2
 void CPbk2ContactViewCustomListBoxItemDrawer::DrawCurrentItemRect(const TRect& aRect) const
 //
 //    Draw the item background
@@ -154,6 +160,7 @@
     iGc->DrawRect(aRect);
     iGc->CancelClippingRect();
     }
+#endif // !RD_TOUCH2
 
 /**
 * Returns a pointer to the column data. Does not imply transfer of ownership.
@@ -203,6 +210,13 @@
     TInt pos = -1;
     
     TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse()); 
+#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
+    
+    if ( Flags() & CListItemDrawer::EMarkingModeEnabled )
+        {
+        removeicon = EFalse;
+        }
+#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES
     if ( Flags() & EDrawMarkSelection && ItemMarkPosition() != -1 && removeicon)
         {
         repl.Set( ItemMarkReplacement() );
--- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp	Tue May 11 16:00:21 2010 +0300
@@ -44,7 +44,7 @@
     CCoeControl& aContainer,
     MPbk2ContactUiControlExtension* aUiExtension,
     CPbk2PredictiveSearchFilter& aSearchFilter,
-    MVPbkContactViewBase& aView,
+    MPbk2FilteredViewStack& aView,
     CPbk2ThumbnailManager& aThumbManager ) :
     CPbk2ContactViewListBox( aContainer, aUiExtension, aSearchFilter ),
     iView( aView  ),
@@ -73,7 +73,7 @@
     CCoeControl& aContainer,
     TResourceReader& aResourceReader,
     const CVPbkContactManager& aManager, 
-    MVPbkContactViewBase& aView,
+    MPbk2FilteredViewStack& aView,
     MPbk2ContactNameFormatter& aNameFormatter,
     CPbk2StorePropertyArray& aStoreProperties,
     MPbk2ContactUiControlExtension* aUiExtension,
@@ -100,7 +100,7 @@
         CCoeControl& aContainer, 
         TResourceReader& aResourceReader,
         const CVPbkContactManager& aManager, 
-        MVPbkContactViewBase& aView,
+        MPbk2FilteredViewStack& aView,
         MPbk2ContactNameFormatter& aNameFormatter,
         CPbk2StorePropertyArray& aStoreProperties )
     {
@@ -124,7 +124,8 @@
 CPbk2ContactViewListBoxModel* CPbk2ContactViewDoubleListBox::DoCreateModelL( 
         		CPbk2ContactViewListBoxModel::TParams params )
 	{
-	return CPbk2ContactViewDoubleListBoxModel::NewL( params, iThumbManager );
+	return CPbk2ContactViewDoubleListBoxModel::NewL( 
+	        params, iThumbManager, iView );
 	}
 
 
--- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp	Tue May 11 16:00:21 2010 +0300
@@ -39,6 +39,7 @@
 #include <MVPbkContactViewBase.h>
 #include <MVPbkViewContact.h>
 #include <MVPbkContactLink.h>
+#include <MVPbkContactViewBase.h>
 
 // CONSTANTS
 namespace {
@@ -64,17 +65,272 @@
 // rest 56 are reserved for icon data
 const TInt KMaxTxtLength = 100;
 
+const TInt KDataElementCacheSize = 20;
 }
 
+/**
+ * Cache for data elements, cache is made to avoid performance problems that 
+ * caused in cases when avkon implementation calls multiple times MdcaPoint function with same index
+ * Cached items must be deleted when there is any change in contact list.
+ */
+NONSHARABLE_CLASS( CDataElementCache ) : 
+        public CBase,
+        public MVPbkContactViewObserver,
+        public MPbk2FilteredViewStackObserver
+    {
+public:
+    static CDataElementCache* NewL(MPbk2FilteredViewStack& aView);
+    ~CDataElementCache();
+
+    void AppendL( CPbk2ContactViewDoubleListboxDataElement* aDataElement );
+    CPbk2ContactViewDoubleListboxDataElement* Element( TInt aListIndex );
+    
+private:    // From MVPbkContactViewObserver
+     void ContactViewReady(
+             MVPbkContactViewBase& aView );
+     void ContactViewUnavailable(
+             MVPbkContactViewBase& aView );
+     void ContactAddedToView(
+             MVPbkContactViewBase& aView,
+             TInt aIndex,
+             const MVPbkContactLink& aContactLink );
+     void ContactRemovedFromView(
+             MVPbkContactViewBase& aView,
+             TInt aIndex,
+             const MVPbkContactLink& aContactLink );
+     void ContactViewError(
+             MVPbkContactViewBase& aView,
+             TInt aError,
+             TBool aErrorNotified );
+
+private:    // From MPbk2FilteredViewStackObserver
+      void TopViewChangedL(
+              MVPbkContactViewBase& aOldView );
+      void TopViewUpdatedL();
+      void BaseViewChangedL();
+      void ViewStackError(
+              TInt aError );
+      void ContactAddedToBaseView( 
+              MVPbkContactViewBase& aBaseView,
+              TInt aIndex,
+              const MVPbkContactLink& aContactLink ); 
+     
+private:
+    inline CDataElementCache( MPbk2FilteredViewStack& aView );
+    inline void ConstructL();
+    inline void Reset();
+
+private:    
+    RPointerArray<CPbk2ContactViewDoubleListboxDataElement> iCache;
+    MPbk2FilteredViewStack& iView;
+    };
+
+// --------------------------------------------------------------------------
+// CDataElementCache::NewL
+// --------------------------------------------------------------------------
+//
+CDataElementCache* CDataElementCache::NewL( MPbk2FilteredViewStack& aView )
+    {
+    CDataElementCache* self = new (ELeave) CDataElementCache(aView);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::CDataElementCache
+// --------------------------------------------------------------------------
+//
+inline CDataElementCache::CDataElementCache( MPbk2FilteredViewStack& aView )
+: iCache( KDataElementCacheSize ), 
+  iView( aView )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CDataElementCache::ConstructL()
+    {
+    iView.AddObserverL(*this);
+    iView.AddStackObserverL(*this);
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::~CDataElementCache
+// --------------------------------------------------------------------------
+//
+CDataElementCache::~CDataElementCache()
+    {
+    Reset();
+    iView.RemoveObserver(*this);
+    iView.RemoveStackObserver(*this);
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::AppendL
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::AppendL( 
+        CPbk2ContactViewDoubleListboxDataElement* aDataElement )
+    {
+    iCache.InsertL( aDataElement, 0 );
+    const TInt cacheItemCount( iCache.Count() );
+    if( cacheItemCount > KDataElementCacheSize )
+        {
+        delete iCache[cacheItemCount - 1];
+        iCache.Remove(cacheItemCount - 1);
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::Reset
+// --------------------------------------------------------------------------
+//
+inline void CDataElementCache::Reset()
+    {
+    iCache.ResetAndDestroy();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::Element
+// --------------------------------------------------------------------------
+//
+CPbk2ContactViewDoubleListboxDataElement* 
+CDataElementCache::Element( TInt aListIndex )
+    {
+    const TInt cacheItemCount( iCache.Count() );
+    for( TInt i = 0 ; i < cacheItemCount ; ++i )
+        {
+        CPbk2ContactViewDoubleListboxDataElement* p = iCache[i];
+        if( p->ListIndex() == aListIndex )
+            {
+            return p;
+            }
+        }
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactViewReady
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactViewReady(
+        MVPbkContactViewBase& /*aView*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactViewUnavailable
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactViewUnavailable(
+        MVPbkContactViewBase& /*aView*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactAddedToView
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactAddedToView(
+        MVPbkContactViewBase& /*aView*/,
+        TInt /*aIndex*/,
+        const MVPbkContactLink& /*aContactLink*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactRemovedFromView
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactRemovedFromView(
+        MVPbkContactViewBase& /*aView*/,
+        TInt /*aIndex*/,
+        const MVPbkContactLink& /*aContactLink*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactViewError
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactViewError(
+        MVPbkContactViewBase& /*aView*/,
+        TInt /*aError*/,
+        TBool /*aErrorNotified*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::TopViewChangedL
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::TopViewChangedL(
+        MVPbkContactViewBase& /*aOldView*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::TopViewUpdatedL
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::TopViewUpdatedL()
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::BaseViewChangedL
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::BaseViewChangedL()
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ViewStackError
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ViewStackError(
+        TInt /*aError*/ )
+    {
+    Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CDataElementCache::ContactAddedToBaseView
+// --------------------------------------------------------------------------
+//
+void CDataElementCache::ContactAddedToBaseView( 
+        MVPbkContactViewBase& /*aBaseView*/,
+        TInt /*aIndex*/,
+        const MVPbkContactLink& /*aContactLink*/ ) 
+    {
+    Reset();
+    }
+
+
 // --------------------------------------------------------------------------
 // CPbk2ContactViewDoubleListBoxModel::CPbk2ContactViewDoubleListBoxModel
 // --------------------------------------------------------------------------
 //
 CPbk2ContactViewDoubleListBoxModel::CPbk2ContactViewDoubleListBoxModel(
     CPbk2ContactViewListBoxModel::TParams& aParams,
-    CPbk2ThumbnailManager& aThumbManager ) :
+    CPbk2ThumbnailManager& aThumbManager,
+    MPbk2FilteredViewStack& aFilteredViewStack ) :
     CPbk2ContactViewListBoxModel( aParams ),
-    iThumbManager( aThumbManager )
+    iThumbManager( aThumbManager ),
+    iFilteredViewStack( aFilteredViewStack )
     {
     TAny* object = aParams.iUiExtension->ContactUiControlExtensionExtension
             ( TUid::Uid( KPbk2ContactUiControlExtensionExtensionUID ) );
@@ -88,6 +344,7 @@
 //
 CPbk2ContactViewDoubleListBoxModel::~CPbk2ContactViewDoubleListBoxModel()
     {
+    delete iDataElementCache;
     }
 
 // --------------------------------------------------------------------------
@@ -96,43 +353,118 @@
 //
 CPbk2ContactViewDoubleListBoxModel* CPbk2ContactViewDoubleListBoxModel::NewL(
     CPbk2ContactViewListBoxModel::TParams& aParams,
-    CPbk2ThumbnailManager& aThumbManager )
+    CPbk2ThumbnailManager& aThumbManager,
+    MPbk2FilteredViewStack& aFilteredViewStack )
     {
     CPbk2ContactViewDoubleListBoxModel* self =
-        new ( ELeave ) CPbk2ContactViewDoubleListBoxModel( aParams, aThumbManager );
+        new ( ELeave ) CPbk2ContactViewDoubleListBoxModel( 
+                aParams, aThumbManager, aFilteredViewStack );
 
     CleanupStack::PushL(self);
     self->ConstructL( aParams.iStoreProperties, aParams.iUiExtension );
+    self->iDataElementCache = CDataElementCache::NewL( aFilteredViewStack );
     CleanupStack::Pop();
     return self;
     }
 
 // --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBoxModel::FormatBufferL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBoxModel::FormatBufferL( const TInt aIndex ) const
+    {
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+        ("CPbk2ContactViewDoubleListBoxModel::FormatBufferL(0x%x,%d), begin"),
+        this);
+    CPbk2ContactViewDoubleListboxDataElement* element = 
+            iDataElementCache->Element( aIndex );
+    if( element )
+        {
+        FormatBufferForElementDataL(*element, aIndex);
+        }
+    else
+        {
+        const MVPbkViewContact& contact = iView->ContactAtL(aIndex);
+        FormatBufferForContactL(contact, aIndex );
+        }
+    
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+        ("CPbk2ContactViewDoubleListBoxModel::FormatBufferL(0x%x,%d), end"),
+        this);
+    }
+
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBoxModel::FetchDataFromExtension(
+        CPbk2ContactViewDoubleListboxDataElement& aDataElement,
+        TInt aIndex ) const
+    {
+    // Get element data from extension
+    // 
+    if( iDoubleListExtensionPoint )
+        {
+        TRAPD( err, 
+            iDoubleListExtensionPoint->FormatDataL( 
+                    *(aDataElement.ContactLink()), aDataElement ) );
+        if( err )
+            {
+            // extension's errors are ignored.  
+            PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING(
+            "CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL format error %d"),
+                err );
+            }
+        }
+
+    // Clip secondary text if it's a phone number 
+    if( MPbk2DoubleListboxDataElement::ETypePhoneNumber == 
+        aDataElement.TextType( MPbk2DoubleListboxDataElement::EStatusText ) && 
+        iClipListBoxText )
+        {
+        TPtr secondary( aDataElement.TextPtr( 
+            MPbk2DoubleListboxDataElement::EStatusText ) );
+        iClipListBoxText->ClipFromBeginning( 
+            secondary, aIndex, KSecondaryTextColumn );
+        }    
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL(
+    CPbk2ContactViewDoubleListboxDataElement& aDataElement, 
+    TInt aIndex ) const
+    {
+    FetchDataFromExtension(aDataElement, aIndex);
+
+    // start fill the new buffer for the avkon list
+    iBuffer.Zero();
+
+    AppendThumbnailL( aDataElement, aIndex );
+    
+    // Format line buffer based on element's content
+    FormatBufferFromElement( aDataElement );
+    }
+
+// --------------------------------------------------------------------------
 // CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL
 // --------------------------------------------------------------------------
 //
 void CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL(
-    const MVPbkViewContact& aViewContact, TInt aIndex ) const
+    const MVPbkViewContact& aViewContact, 
+    TInt aIndex ) const
     {
-    // Reset buffer
-    iBuffer.Zero();
-    
+    MVPbkContactLink* link = aViewContact.CreateLinkLC();
     CPbk2ContactViewDoubleListboxDataElement* element = 
-        CPbk2ContactViewDoubleListboxDataElement::NewLC();
+        CPbk2ContactViewDoubleListboxDataElement::NewL( link, aIndex );
+    CleanupStack::Pop();    // link
+    CleanupStack::PushL( element );
 
-    // Fill data element cells
-    
-    // (1) Add thumbnail icon
-    //
-    TInt index = iThumbManager.GetPbkIconIndexL( aIndex, aViewContact );
-    if( index != KErrNotFound )
-        {
-        iBuffer.AppendNum( index );
-        }
-    iBuffer.Append( KListColumnSeparator );
-
-    // (2) Add contact name
-    //
+    // get data for element
+    // get user name
     HBufC* name = NULL;
     if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames ))
         {
@@ -164,12 +496,8 @@
         MPbk2DoubleListboxDataElement::ETypeGenericText );
     CleanupStack::Pop( name );
 
-    // (3) Secondary text 
-    // 
-    // => Empty by default
-  
-    // (4) Trailing icon
-    //
+
+    // get icons
     RArray<TPbk2IconId> ids;
     CleanupClosePushL( ids );
     iContactIcons->GetIconIdsForContactL( aViewContact, ids );
@@ -184,33 +512,18 @@
     CleanupStack::PopAndDestroy( &ids );
 
     // Get element data from extension
-    if( iDoubleListExtensionPoint )
-        {
-        TRAPD( err, 
-            iDoubleListExtensionPoint->FormatDataL( aViewContact, *element ) );
-        if( err )
-            {
-            // extension's errors are ignored.  
-            PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING(
-            "CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL format error %d"),
-                err );
-            }
-        }
+    FetchDataFromExtension( *element, aIndex );
 
-    // Clip secondary text if it's a phone number 
-    if( MPbk2DoubleListboxDataElement::ETypePhoneNumber == 
-        element->TextType( MPbk2DoubleListboxDataElement::EStatusText ) && iClipListBoxText )
-        {
-        TPtr secondary( element->TextPtr( 
-            MPbk2DoubleListboxDataElement::EStatusText ) );
-        iClipListBoxText->ClipFromBeginning( 
-            secondary, aIndex, KSecondaryTextColumn );
-        }
+    // start format data for the avkon list
+    iBuffer.Zero();
+    
+    AppendThumbnailL( *element, aIndex );
     
     // Format line buffer based on element's content
     FormatBufferFromElement( *element );
     
-    CleanupStack::PopAndDestroy( element ); 
+    iDataElementCache->AppendL( element );
+    CleanupStack::Pop( element ); 
     }
 
 // --------------------------------------------------------------------------
@@ -225,9 +538,6 @@
     //   [thumbnail icon] \t [contact name] \t [secondary text] \t
     //   [trailing icon]
 
-    // (1) Thumbnail icon
-    // No element support needed for thumbnail at the moment 
-
     // (2) Contact name
     AppendName( aElement.TextPtr( 
             MPbk2DoubleListboxDataElement::EName ).Left( KMaxTxtLength ) );
@@ -243,6 +553,25 @@
     }
 
 // --------------------------------------------------------------------------
+// CPbk2ContactViewDoubleListBoxModel::AppendThumbnailL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactViewDoubleListBoxModel::AppendThumbnailL( 
+        CPbk2ContactViewDoubleListboxDataElement& aDataElement, 
+        TInt aIndex ) const
+    {
+    // (1) Add thumbnail icon
+    //
+    TInt index = iThumbManager.GetPbkIconIndexL( 
+            aIndex, *(aDataElement.ContactLink()) );
+    if( index != KErrNotFound )
+        {
+        iBuffer.AppendNum( index );
+        }
+    iBuffer.Append( KListColumnSeparator );
+    }
+
+// --------------------------------------------------------------------------
 // CPbk2ContactViewDoubleListBoxModel::AppendText
 // --------------------------------------------------------------------------
 //
--- a/phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp	Tue May 11 16:00:21 2010 +0300
@@ -80,8 +80,7 @@
 void CPbk2DoubleListboxModelCmdDecorator::ConstructL()
     {
     CPbk2ListboxModelCmdDecorator::ConstructL();
-    iElement = CPbk2ContactViewDoubleListboxDataElement::NewLC();
-    CleanupStack::Pop( iElement ); // member
+    iElement = CPbk2ContactViewDoubleListboxDataElement::NewL();
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp	Tue May 11 16:00:21 2010 +0300
@@ -15,18 +15,23 @@
 */
 
 #include "pbk2contactviewdoublelistboxdataelement.h"
+#include <MVPbkContactLink.h>
 
 // --------------------------------------------------------------------------
 // CPbk2ContactViewDoubleListboxDataElement::NewLC
 // --------------------------------------------------------------------------
 //
-CPbk2ContactViewDoubleListboxDataElement* CPbk2ContactViewDoubleListboxDataElement::NewLC()
+CPbk2ContactViewDoubleListboxDataElement* CPbk2ContactViewDoubleListboxDataElement::NewL(
+        MVPbkContactLink* aLink,
+        TInt aListIndex)
     {
     CPbk2ContactViewDoubleListboxDataElement* self =
-        new ( ELeave ) CPbk2ContactViewDoubleListboxDataElement();
+        new ( ELeave ) CPbk2ContactViewDoubleListboxDataElement(aListIndex);
 
     CleanupStack::PushL(self);
     self->ConstructL();
+    self->iLink = aLink;
+    CleanupStack::Pop(self);
     return self;
     }
 
@@ -34,7 +39,9 @@
 // CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement
 // --------------------------------------------------------------------------
 //
-inline CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement()
+inline CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement(
+        TInt aListIndex)
+: iListIndex( aListIndex )    
     {
     iTexts.Reset();
     iIcons.Reset();
@@ -58,6 +65,7 @@
     {
     iTexts.DeleteAll();
     delete iEmptyBuffer;
+    delete iLink;
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp	Tue May 11 16:00:21 2010 +0300
@@ -100,6 +100,7 @@
 void CPbk2UIExtensionMenuManager::PluginForCommandIdL(
         TInt aCommandId, RArray<TUid>& aPluginUids ) const
     {
+    CleanupClosePushL( aPluginUids );
     const TInt informationCount =
         iExtensionLoader.PluginInformation().Count();
     for ( TInt i = 0; i < informationCount; ++i )
@@ -111,6 +112,7 @@
             aPluginUids.AppendL( pluginInformation->ImplementationUid() );
             }
         }
+    CleanupStack::Pop();
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp	Tue May 11 16:00:21 2010 +0300
@@ -22,12 +22,15 @@
 #include <CPbk2SortOrderManager.h>
 #include <Pbk2ContactNameFormatterFactory.h>
 #include <MPbk2ContactNameFormatter.h>
+#include <MPbk2ContactNameFormatter3.h>
 #include <CVPbkContactFieldIterator.h>
 
 // Virtual Phonebook
 #include <CVPbkContactManager.h>
 #include <CVPbkFieldTypeRefsList.h>
 
+#include <featmgr.h>
+
 // --------------------------------------------------------------------------
 // CPbk2ContactNameConstructionPolicy::CPbk2ContactNameConstructionPolicy
 // --------------------------------------------------------------------------
@@ -46,6 +49,7 @@
     {
     delete iSortOrderManager;
     delete iNameFormatter;
+    FeatureManager::UnInitializeLib();
     }
 
 // --------------------------------------------------------------------------
@@ -74,6 +78,7 @@
 
     iNameFormatter = Pbk2ContactNameFormatterFactory::CreateL
         ( iMasterFieldTypeList, *iSortOrderManager );
+    FeatureManager::InitializeLibL();
     }
 
 // --------------------------------------------------------------------------
@@ -85,8 +90,18 @@
         ( const MVPbkBaseContactFieldCollection& aFieldCollection,
           CVPbkFieldTypeRefsList& aFieldTypeRefsList )
     {
-    return iNameFormatter->ActualTitleFieldsLC
-        ( aFieldTypeRefsList, aFieldCollection );
+    if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames ) )
+        {
+        MPbk2ContactNameFormatter3* nameformatterExtension =
+                reinterpret_cast<MPbk2ContactNameFormatter3*>( iNameFormatter->
+                ContactNameFormatterExtension( MPbk2ContactNameFormatterExtension3Uid ) );
+        
+        if ( nameformatterExtension )
+            {
+            return nameformatterExtension->TitleWithCompanyNameFieldsLC( aFieldTypeRefsList, aFieldCollection );
+            }
+        }
+    return iNameFormatter->ActualTitleFieldsLC( aFieldTypeRefsList, aFieldCollection );
     }
 
 // End of File
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp	Tue May 11 16:00:21 2010 +0300
@@ -645,7 +645,7 @@
     // Forwarding to listbox-model
     iModel->ContactFieldFetchedNotifyL(aContactField);
     
-    if( iStatusControl )
+    if( iStatusControl && iStatusControl->IsVisible() )
        	{
 		SetDefaultStatusTextL();
        	}
@@ -673,7 +673,7 @@
     
     iMdlRowCount = mdlCount;
     
-    if( iStatusControl )
+    if( iStatusControl && iStatusControl->IsVisible() )
     	{
 		SetDefaultStatusTextL();
     	}
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp	Tue May 11 16:00:21 2010 +0300
@@ -174,13 +174,31 @@
 //
 void CCCAppCommLauncherHeaderControl::SizeChanged()
     {    
-    // No variation anymore in layout for portrait/landscape/statusbutton/
-    // no statusbutton (iStatusButtonVisibility) combinations (options 0,1,2). 
-    // Always use option 0.
-    //const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
     const TRect rect(Rect());
-    TInt option(0);    
     
+    /**
+     * Option0 (w button, lsc)
+     * Option2 (w/o button, lsc)
+     * Option0 (w button, prt)
+     * Option1 (w/o button, prt)
+     */
+   
+    // (w/o button)
+    TInt option( isLandscape ? 2 : 1 );
+    if( iStatusButtonVisibility )
+        {
+        // (w button)
+        if( isLandscape )
+            {
+            option = 0;
+            }
+        else
+            {
+            option = 0;
+            }
+        }    
+   
     FavoriteIconSizeChanged();
     
     AknLayoutUtils::LayoutImage(
@@ -397,7 +415,7 @@
 //
 void CCCAppCommLauncherHeaderControl::SetContactStoreL(TCmsContactStore aContactStore)
     {
-    if (!iBitmap && !iMask)
+    if (!iBitmap && !iMask && !iHasContactImage )
         {
         switch (aContactStore)
             {
@@ -698,13 +716,24 @@
      {
      //Set the size for the Favorite Icon
      //This code must be in Sync with SizeChanged() code
-
-     // No variation anymore in layout for portrait/landscape/statusbutton/
-     // no statusbutton (iStatusButtonVisibility) combinations (options 0,1,2). 
-     // Always use option 0.
-     //const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+     const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
      const TRect rect(Rect());
-     TInt option( 0 );
+     
+     // (w/o button)
+     TInt option( isLandscape ? 2 : 1 );
+     if( iStatusButtonVisibility )
+         {
+         // (w button)
+         if( isLandscape )
+             {
+             option = 0;
+             }
+         else
+             {
+             option = 0;
+             }
+         }    
+    
      AknLayoutUtils::LayoutImage(
              iFavContactIcon, rect, AknLayoutScalable_Apps::phob2_cc_data_pane_g2(option));
              
--- a/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h	Tue May 11 16:00:21 2010 +0300
@@ -21,6 +21,7 @@
 
 #include <e32base.h>
 #include <RPbk2LocalizedResourceFile.h>
+#include <MPbk2StoreConfigurationObserver.h>
 
 class CCCAppView;
 class CCCAppPluginData;
@@ -42,7 +43,9 @@
  *  @lib ccaapp.exe
  *  @since S60 v5.0
  */
-class CCCAppPluginLoader : public CBase
+class CCCAppPluginLoader : 
+    public CBase,
+    public MPbk2StoreConfigurationObserver
     {
 #ifdef __CCAPPUNITTESTMODE
     friend class T_CCCAppPluginLoader;
@@ -178,6 +181,23 @@
     TBool SetPluginVisibility(
         TUid aPlugin,
         TInt aVisibility);
+
+    
+private: 
+
+    /**
+     * Observer for store configuration changes. From MPbk2StoreConfigurationObserver
+     *
+     * @since S60 v9.2
+     */    
+    void ConfigurationChanged();
+
+    /**
+     * Observer for completed store configuration changes. From MPbk2StoreConfigurationObserver
+     *
+     * @since S60 v9.2
+     */    
+    void ConfigurationChangedComplete();            
     
 private:
 
--- a/phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp	Tue May 11 16:00:21 2010 +0300
@@ -23,6 +23,7 @@
 #include <mccapluginfactory.h>
 
 #include <cpbk2applicationservices.h>
+#include <CPbk2StoreConfiguration.h>
 #include <CVPbkContactManager.h>
 #include <MVPbkContactStoreProperties.h>
 #include <VPbkContactStoreUris.h>
@@ -131,6 +132,10 @@
     delete iFactoryTempPtr;
     CCA_DP( KCCAppLogFile, CCA_L("<-CCCAppPluginData::~CCCAppPluginLoader"));
     
+    if(iAppServices)
+        {
+        iAppServices->StoreConfiguration().RemoveObserver(*this);
+        }
     Release( iAppServices );
 
     iCommandsResourceFile.Close();
@@ -371,6 +376,7 @@
         KPbk2RomFileDrive, KDC_RESOURCE_FILES_DIR, KPbk2CommonUiDllResFileName );
 
     iAppServices = CPbk2ApplicationServices::InstanceL();
+    iAppServices->StoreConfiguration().AddObserverL(*this);    
     }
 
 // ---------------------------------------------------------------------------
@@ -768,6 +774,7 @@
 void CCCAppPluginLoader::GetPbksXPExtesionNamesL( RArray<TPtrC>& aPbksXPExtesionNamesArray,
         const TDesC& aNameString)
     {
+    CleanupClosePushL( aPbksXPExtesionNamesArray );
     TLex nameString ( aNameString );
     TChar curChar;
     nameString.Mark();
@@ -787,6 +794,7 @@
             nameString.Inc();
             }
         }
+    CleanupStack::Pop();
     }
 
 // ---------------------------------------------------------------------------
@@ -1126,4 +1134,24 @@
         }
     }
 
+// ----------------------------------------------------------------------------
+// CCCAppPluginLoader::ConfigurationChanged
+// ----------------------------------------------------------------------------
+//
+void CCCAppPluginLoader::ConfigurationChanged()
+    {
+    //Special case. Store configuration changed, e.g. store containing current 
+    //contact removed. So close CCA as current contact may not anymore be available
+    CAknAppUi* appUi = static_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi());
+    TRAP_IGNORE(appUi->HandleCommandL(EAknCmdExit));
+    }
+
+// ----------------------------------------------------------------------------
+// CCCAppPluginLoader::ConfigurationChangedComplete
+// ----------------------------------------------------------------------------
+//
+void CCCAppPluginLoader::ConfigurationChangedComplete()
+    {
+    }
+
 // End of File
Binary file phonebookui/Phonebook2/group/10003A73.txt has changed
--- a/phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp	Tue May 11 16:00:21 2010 +0300
@@ -66,5 +66,5 @@
 LIBRARY         pbk2commonui.lib
 LIBRARY         presencecacheclient2.lib
 LIBRARY         presencecacheutils.lib
-
+LIBRARY         efsrv.lib 
 // End of File
--- a/phonebookui/Phonebook2/inc/CPbk2NamesListControl.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/inc/CPbk2NamesListControl.h	Tue May 11 16:00:21 2010 +0300
@@ -251,6 +251,12 @@
          */
         IMPORT_C void MassUpdateSkipProgressNote( TBool aSkip );
         
+        /**
+         * Set the iOpeningCca flag. 
+         * @param aIsOpening - Indicates user is opening cca or not.
+         */
+        IMPORT_C void SetOpeningCca( TBool aIsOpening );
+        
     public: // From CCoeControl
         void MakeVisible(
                 TBool aVisible );
@@ -503,7 +509,8 @@
         CPbk2NamesListControlBgTask* iBgTask;
         //Own: Mass update checker/handler
         CPbk2HandleMassUpdate* iCheckMassUpdate;
-        
+        //Own: Open Cca is in progress
+        TBool iOpeningCca;        
     };
 
 #endif // CPBK2NAMESLISTCONTROL_H
--- a/phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h	Tue May 11 16:00:21 2010 +0300
@@ -111,7 +111,7 @@
 	 * Returns icon index from Pbk2IconArray for double listbox index. 
 	 * If icon is not set, default icon index is returned
 	 */
-	TInt GetPbkIconIndexL( TInt aListboxIndex, const MVPbkBaseContact& aContactLink );
+	TInt GetPbkIconIndexL( TInt aListboxIndex, const MVPbkContactLink& aContactLink );
 	
 	/*
 	 * Setter for default icon ID
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/inc/MPbk2ContactNameFormatter3.h	Tue May 11 16:00:21 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 contact name formatter interface.
+*
+*/
+
+
+#ifndef MPBK2CONTACTNAMEFORMATTER3_H
+#define MPBK2CONTACTNAMEFORMATTER3_H
+
+//Use this UID to access field property interface extension 3. Used as
+//a parameter to ContactNameFormatterExtension() method.
+const TUid MPbk2ContactNameFormatterExtension3Uid = { 3 };
+
+/**
+ * This class is an extension to MPbk2ContactNameFormatter.
+ * See documentation of MPbk2ContactNameFormatter from header
+ * MPbk2ContactNameFormatter.h
+ * 
+ * you can access this extension by calling
+ * MPbk2ContactNameFormatter->ContactNameFormatterExtension()
+ */
+class MPbk2ContactNameFormatter3
+    {
+    public: // Interface
+
+        /**
+         * Return iterator that contains all fields that are used for making
+         * the formatted name.
+         *
+         * @param   aFieldTypeList  Field type list that is used to store
+         *                          field types for the iterator. The list
+         *                          will be resetted before use.
+         * @param   aContactFields  Field collection representing
+         *                          the data in a contact.
+         * @return  Iterator for fields that are used for the formated title.
+         */
+        virtual CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC(
+                CVPbkFieldTypeRefsList& aFieldTypeList,
+                const MVPbkBaseContactFieldCollection& aContactFields ) = 0;
+                
+    protected:
+    
+        virtual ~MPbk2ContactNameFormatter3()
+                {}
+
+     
+      
+    };
+
+#endif // MPBK2CONTACTNAMEFORMATTER3_H
+
+// End of File
--- a/phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h	Tue May 11 16:00:21 2010 +0300
@@ -20,8 +20,7 @@
 #define MPBK2CONTACTUICONTROLDOUBLELISTBOXEXTENSION_H
 
 //  FORWARD DECLARATIONS
-class MVPbkStoreContact;
-class MVPbkViewContact;
+class MVPbkContactLink;
 class MPbk2CommandItemUpdater;
 class TPbk2IconId;
 
@@ -90,7 +89,7 @@
          * 
          */
         virtual void FormatDataL(
-                const MVPbkViewContact& aViewContact, 
+                const MVPbkContactLink& aContactLink, 
                 MPbk2DoubleListboxDataElement& aDataElement ) =0;
         
         /**
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss	Tue May 11 16:00:21 2010 +0300
@@ -83,16 +83,25 @@
         items =
                 {
         MENU_ITEM { command = ERclCmdSaveToContacts; txt = qtn_rcl_opt_save_contact; flags = EEikMenuItemSpecific;},
+        
+        // Stylus Popup menu items for Call and Send actions (in Options Menu they are submenu items)
+        MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_stylus_popup_voice_call; flags = EEikMenuItemSpecific;},
+        MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_stylus_popup_video_call; flags = EEikMenuItemSpecific;},
+        MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_stylus_popup_msg; flags = EEikMenuItemSpecific;},
+        MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_stylus_popup_bcard; flags = EEikMenuItemSpecific;},
+        MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_stylus_popup_email; flags = EEikMenuItemSpecific;},
+        
 		MENU_ITEM { command = ERclCmdViewDetails; txt = qtn_rcl_opt_details; flags = EEikMenuItemAction; },
-		MENU_ITEM { command = ERclCmdAddAsRecipient; txt = qtn_rcl_opt_add_recipient; flags = EEikMenuItemSpecific;},		
+		MENU_ITEM { command = ERclCmdAddAsRecipient; txt = qtn_rcl_opt_add_recipient; flags = EEikMenuItemAction;},		
 		MENU_ITEM { command = ERclCmdNewSearchPrefilled; txt = qtn_rcl_opt_new_search; },
-		MENU_ITEM { command = ERclCmdCall; cascade = r_rcl_call_menu_pane; txt = qtn_rcl_opt_call; flags = EEikMenuItemSpecific; },
-		MENU_ITEM { command = ERclCmdSend; cascade = r_rcl_send_menu_pane; txt = qtn_rcl_opt_send; flags = EEikMenuItemSpecific; },
+		MENU_ITEM { command = ERclCmdCall; cascade = r_rcl_call_menu_pane; txt = qtn_rcl_opt_call; flags = EEikMenuItemAction; },
+		MENU_ITEM { command = ERclCmdSend; cascade = r_rcl_send_menu_pane; txt = qtn_rcl_opt_send; flags = EEikMenuItemAction; },
 		MENU_ITEM { command = EAknCmdHelp; txt = qtn_options_help; },
 		MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; }	
 		};
 	}
 
+
 //
 // ---------------------------------------------------------------------------
 // Menu sub pane for call options
@@ -103,9 +112,9 @@
 	{
 	items =
 	       {
-	       MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; flags = EEikMenuItemSpecific;},
-	       MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; flags = EEikMenuItemSpecific;},
-	       MENU_ITEM { command = ERclCmdVoip; txt = qtn_rcl_opt_voip; flags = EEikMenuItemSpecific;}
+	       MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; flags = EEikMenuItemAction;},
+	       MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; flags = EEikMenuItemAction;},
+	       MENU_ITEM { command = ERclCmdVoip; txt = qtn_rcl_opt_voip; flags = EEikMenuItemAction;}
 	       };
 	}
 
@@ -119,11 +128,11 @@
 	{
 	items =
 	        {
-		MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; flags = EEikMenuItemSpecific;},
-		MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_opt_bcard; flags = EEikMenuItemSpecific;},
-		MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; flags = EEikMenuItemSpecific;},
-		MENU_ITEM { command = ERclCmdSendMeetingReq; txt = qtn_rcl_opt_mreq; flags = EEikMenuItemSpecific;},		
-		MENU_ITEM { command = ERclCmdSendAudioMsg; txt = qtn_rcl_opt_audio; flags = EEikMenuItemSpecific;}
+		MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; flags = EEikMenuItemAction;},
+		MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_opt_bcard; flags = EEikMenuItemAction;},
+		MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; flags = EEikMenuItemAction;},
+		MENU_ITEM { command = ERclCmdSendMeetingReq; txt = qtn_rcl_opt_mreq; flags = EEikMenuItemAction;},		
+		MENU_ITEM { command = ERclCmdSendAudioMsg; txt = qtn_rcl_opt_audio; flags = EEikMenuItemAction;}
 	       	};
 	}
 
@@ -189,12 +198,12 @@
 RESOURCE MENU_PANE r_rcl_result_info_dialog_context_menu_pane
 	{
 	items =
-	        {
-                MENU_ITEM { command = ERclCmdCopyDetail; txt = qtn_rcl_opt_copy_detail; }, 
-	        MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; },
-	        MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; },
-		MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; },	
-		MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; }					
+        {
+        MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_stylus_popup_voice_call; },
+        MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_stylus_popup_video_call; },
+		MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_stylus_popup_msg; },	
+		MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_stylus_popup_email; },
+		MENU_ITEM { command = ERclCmdCopyDetail; txt = qtn_rcl_opt_copy_detail; }			
 		};
 	}
 
@@ -257,7 +266,7 @@
         {
 	titles = 
 	       { 
-	       MENU_TITLE { menu_pane = r_rcl_search_result_dialog_menu_pane; } 
+	       MENU_TITLE { menu_pane = r_rcl_search_result_dialog_menu_pane; }
 	       };
 	}
 
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h	Tue May 11 16:00:21 2010 +0300
@@ -441,6 +441,8 @@
     ///ETrue - if the more than max results note needs to be shown
     TBool iMoreThanMaxResults;
     
+    TBool iFocusableContactPointed;
+    
     // Title pane text. Owned.
     HBufC* iTitleText;
     // Original title pane text (of the caller view). Owned.
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp	Tue May 11 16:00:21 2010 +0300
@@ -137,6 +137,7 @@
 EXPORT_C void CPbk2RemoteContactLookupAccounts::GetAllAccountsL(
     RPointerArray<CPbkxRemoteContactLookupProtocolAccount>& aAccounts )
     {
+    CleanupClosePushL( aAccounts );
     if ( iAdapters.Count() == 0 )
         {
         // No plugins were loaded.
@@ -170,6 +171,7 @@
             }
         // just let protocolAccountsTmp pass out of scope. It doesn't own anything now.
         }
+    CleanupStack::Pop();
     }
 
 
@@ -179,7 +181,8 @@
     const TUid& aProtocol )
     {
     //TODO Should optimise this.
-
+    CleanupClosePushL( aAccounts );
+    
     RPointerArray<CPbkxRemoteContactLookupProtocolAccount> protocolAccounts;
     TCleanupItem cleanupItemAcc(CleanupResetAndDestroyAccArray, &protocolAccounts);
     CleanupStack::PushL(cleanupItemAcc);
@@ -203,6 +206,7 @@
         protocolAccounts.Remove( j );
         }
     CleanupStack::Pop(); // cleanupItemAcc
+    CleanupStack::Pop();
     }
 
 CPbk2RemoteContactLookupAccounts::CPbk2RemoteContactLookupAccounts()
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp	Tue May 11 16:00:21 2010 +0300
@@ -837,6 +837,10 @@
                      iVisibleFocusOnList = EFalse; 
                      listBox->HandlePointerEventL( aPointerEvent ); 
                      break;
+                     
+                 default:
+                     listBox->HandlePointerEventL( aPointerEvent );
+                     break;
                  }
              }
          }     
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp	Tue May 11 16:00:21 2010 +0300
@@ -383,9 +383,18 @@
     CEikMenuPane* aMenuPane )
     {
     FUNC_LOG;
+
     if ( aResourceId == R_RCL_SEARCH_RESULT_DIALOG_MENU_PANE )
         {
-
+        if ( !iFocusableContactPointed ) // dim stylus popup menu
+            {
+            aMenuPane->SetItemDimmed( ERclCmdVoiceCall,ETrue );
+            aMenuPane->SetItemDimmed( ERclCmdVideoCall, ETrue );
+            aMenuPane->SetItemDimmed( ERclCmdSendMsg, ETrue );
+            aMenuPane->SetItemDimmed( ERclCmdSendEmail, ETrue );
+            aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, ETrue );
+            }
+        
         if ( iContactItems.Count() == 0 )
             {
             // when there are 0 results, only new search option is available
@@ -399,20 +408,34 @@
             {
             if ( !iContactSelectorEnabled )
                 {
-                
+                // dim Options Menu main level items
                 aMenuPane->SetItemDimmed( ERclCmdAddAsRecipient, ETrue );
+                // send menu is always visible, since business card can always be sent
+                aMenuPane->SetItemDimmed( ERclCmdCall, !CallActionsAvailable() );
                 
-                aMenuPane->SetItemDimmed(
-                    ERclCmdCall,
-                    !CallActionsAvailable() );
-                
-                // send menu is always visible, since business card can 
-                // always be sent
+                if ( iFocusableContactPointed ) // dim stylus popup menu items
+                    {
+                    // Call menus
+                    aMenuPane->SetItemDimmed( ERclCmdVoiceCall, !iContactActionService.IsActionEnabled( KFscAtComCallGSM ) );
+                    aMenuPane->SetItemDimmed( ERclCmdVideoCall, !iContactActionService.IsActionEnabled( KFscAtComCallVideo ) );
+                    // Send menus
+                    aMenuPane->SetItemDimmed( ERclCmdSendMsg, !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) );
+                    aMenuPane->SetItemDimmed( ERclCmdSendEmail, !iContactActionService.IsActionEnabled( KFscAtComSendEmail ) );
+                    aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, !iContactActionService.IsActionEnabled( KFscAtSendBusinessCard ) );
+                    }
                 }
             else
                 {
+                // dim Options Menu main level items
                 aMenuPane->SetItemDimmed( ERclCmdCall, ETrue );
                 aMenuPane->SetItemDimmed( ERclCmdSend, ETrue );
+                
+                // dim stylus popup menu items
+                aMenuPane->SetItemDimmed( ERclCmdVoiceCall,ETrue );
+                aMenuPane->SetItemDimmed( ERclCmdVideoCall, ETrue );
+                aMenuPane->SetItemDimmed( ERclCmdSendMsg, ETrue );
+                aMenuPane->SetItemDimmed( ERclCmdSendEmail, ETrue );
+                aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, ETrue );
                 }
             
             aMenuPane->SetItemDimmed(
@@ -422,7 +445,6 @@
         }
     else if ( aResourceId == R_RCL_CALL_MENU_PANE )
         {
-        
         aMenuPane->SetItemDimmed( 
             ERclCmdVoiceCall,
             !iContactActionService.IsActionEnabled( KFscAtComCallGSM ) );
@@ -437,7 +459,7 @@
         
         }
     else if ( aResourceId == R_RCL_SEND_MENU_PANE )
-        {       
+        {  
         aMenuPane->SetItemDimmed( 
             ERclCmdSendMsg, 
             !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) );
@@ -459,6 +481,7 @@
             !iContactActionService.IsActionEnabled( KFscAtSendBusinessCard ) );
         
         }
+    iFocusableContactPointed = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -1172,11 +1195,11 @@
                  case TPointerEvent::EButton1Down:
                      {
                      TInt focusIndex;
-                     TBool focusableContactPointed =
+                     iFocusableContactPointed =
                          listBox->View()->XYPosToItemIndex(
                               aPointerEvent.iPosition, focusIndex );
                      
-                     if ( focusableContactPointed && focusIndex > 0)
+                     if ( iFocusableContactPointed )
                          {
                          TInt oldIndex = iSelectedItemIndex;                
                          iSelectedItemIndex = focusIndex;
@@ -1197,6 +1220,11 @@
                      listBox->HandlePointerEventL( aPointerEvent );
                      break;
                      }
+                 default:
+                     {
+                     listBox->HandlePointerEventL( aPointerEvent );
+                     break;
+                     }
                  }
              }
          }    
--- a/phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc	Tue May 11 16:00:21 2010 +0300
@@ -187,6 +187,31 @@
 // r:5.2
 #define qtn_rcl_opt_audio "Audio message"
 
+// d:Header Stylus Popup and Context Specific menu for Voice call command.
+// l:list_single_pane_t1_cp2
+// r:5.2
+#define qtn_rcl_stylus_popup_voice_call "Voice call"
+
+// d:Header Stylus Popup and Context Specific menu for Video call command.
+// l:list_single_pane_t1_cp2
+// r:5.2
+#define qtn_rcl_stylus_popup_video_call "Video call"
+
+// d:Header Stylus Popup and Context Specific menu for Send message command.
+// l:list_single_pane_t1_cp2
+// r:5.2
+#define qtn_rcl_stylus_popup_msg "Send message"
+
+// d:Header Stylus Popup and Context Specific menu for Send email command.
+// l:list_single_pane_t1_cp2
+// r:5.2
+#define qtn_rcl_stylus_popup_email "Send email"
+
+// d:Header Stylus Popup and Context Specific menu for Send business card command.
+// l:list_single_pane_t1_cp2
+// r:5.2
+#define qtn_rcl_stylus_popup_bcard "Send business card"
+
 // d:Softkey text.
 // l:control_pane_t1/opt7
 // r:5.2
@@ -352,7 +377,7 @@
 
 // d:Wait note is displayed when retriving information for saving contact
 // d:to the database takes longer than 1 sec.
-// l:popup_note_window/opt2
+// l:popup_note_wait_window
 // r:5.2
 //
 #define qtn_rcl_saving_wait_note "Saving contact"
--- a/phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp	Tue May 11 16:00:21 2010 +0300
@@ -24,6 +24,7 @@
 #include <CPbk2IconArray.h>
 #include <MPbk2FieldProperty.h>
 #include <MPbk2ClipListBoxText.h>
+#include <f32file.h>
 
 #include <CVPbkContactManager.h>
 #include <MVPbkContactLink.h>
@@ -423,8 +424,7 @@
 TBool CSpbContactDataModelPrivate::IsHiddenField(const MVPbkFieldType* aFieldType)
     {
     TInt resId = aFieldType->FieldTypeResId();
-    return ( resId == R_VPBK_FIELD_TYPE_SYNCCLASS ||
-             resId == R_VPBK_FIELD_TYPE_CALLEROBJIMG );
+    return ( resId == R_VPBK_FIELD_TYPE_SYNCCLASS );
     }
 
 // ---------------------------------------------------------------------------
@@ -454,13 +454,37 @@
         }
     
     TPtrC fieldText = MVPbkContactFieldTextData::Cast(aFieldData).Text();
+    TInt resId = aFieldType.FieldTypeResId();
+    HBufC* defaultText = NULL;
+    if( resId == R_VPBK_FIELD_TYPE_CALLEROBJIMG )
+        {
+        RFs& fs = iCoeEnv.FsSession(); 
+        TEntry entry;
+        if ( fs.Entry( fieldText, entry) == KErrNone )
+           {
+           // get image name
+           TParse parse;
+           parse.Set(fieldText, NULL, NULL);
+           fieldText.Set(parse.Name());
+          
+           }
+        else
+            {
+            // use default image name
+            defaultText = iCoeEnv.AllocReadResourceLC( R_QTN_PHOB_FIELD_THUMBNAIL );
+            fieldText.Set( defaultText->Des() );
+            }
+        }
     TPtr columnBuf( ExpandColumnBufferL( fieldText.Length() ) );
     columnBuf.Zero();
 
     // replace listbox separator characters.
     Pbk2PresentationUtils::AppendAndReplaceChars( columnBuf, fieldText,
             KCharsToReplace, KReplacementChars );
-
+    if( defaultText )
+        {
+        CleanupStack::PopAndDestroy( defaultText );
+        }
     // Replace characters that can not be displayed correctly.
     Pbk2PresentationUtils::ReplaceNonGraphicCharacters( columnBuf, KReplacedChars );
 
--- a/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp	Tue May 11 16:00:21 2010 +0300
@@ -138,6 +138,7 @@
 void CxSPContactManager::GetMappedPbkContactsL( TUint32 aId, TInt32 axSPContactId,
         							RPointerArray<MVPbkContactLink>& aPbkContactLinks ) const
 	{
+	CleanupClosePushL( aPbkContactLinks );
 	TInt count = iContactMap.Count();
 	for( TInt i = 0; i < count; i++ )
 		{
@@ -147,12 +148,14 @@
 			User::LeaveIfError( aPbkContactLinks.Append( map->iPbkContactLink ) );
 			}
 		}
+	CleanupStack::Pop();
 	}		
 
 void CxSPContactManager::GetMappedxSPContactsL( TUint32 aId, 
 												const MVPbkContactLink& aPbkContactLink,
         										RArray<TInt32>& axSPContactIds ) const
 	{
+	CleanupClosePushL( axSPContactIds );
 	const TInt count = iContactMap.Count();
 	for( TInt i = 0; i < count; i++ )
 		{
@@ -165,6 +168,7 @@
 				}
 			}			
 		}
+	CleanupStack::Pop();
 	}        										
 	
 void CxSPContactManager::ViewActivatedL( const TVwsViewId& aPrevViewId,
--- a/phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h	Tue May 11 16:00:21 2010 +0300
@@ -101,10 +101,11 @@
         * from CAknDialog
         */ 
         TBool OkToExitL(TInt aButtonId);
+        
         /**
-        * from CAknDialog
-        */ 
-        void HandleDialogPageEventL (TInt);
+        * From CCoeControl,HandlePointerEventL.
+        */
+        void HandlePointerEventL( const TPointerEvent& aPointerEvent );
 
     protected:
         /**
@@ -136,6 +137,8 @@
         TInt        iCbaID;
         TBool       iNeedUpdate;
         TInt        iPrevIndex;
+        // Grid index in which the button down
+        TInt iButton1DownIndex;
    };
 
 #endif  // SPDIAGRIDDLG_H
--- a/phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp	Tue May 11 16:00:21 2010 +0300
@@ -83,6 +83,7 @@
     {
     iControl = CONST_CAST(CSpdiaControl*, &aControl);
     iCbaID = R_AVKON_SOFTKEYS_BACK;
+    iButton1DownIndex = 0;
     }
 
 // ----------------------------------------------------
@@ -369,13 +370,11 @@
 
         if ( Layout_Meta_Data::IsLandscapeOrientation() )
             {
-            StatusPane->MakeVisible( ETrue );
             AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,mainPaneRect );
             StatusPane->DrawNow();
             }
         else
             {
-            StatusPane->MakeVisible( EFalse );
             AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
             AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EStatusPane, statusPaneRect );
             mainPaneRect.iTl = statusPaneRect.iTl;
@@ -395,14 +394,27 @@
     }
 
 // ---------------------------------------------------------
-// CSpdiaGridDlg::HandleDialogPageEventL()
-// Handles the events on the dialog page (for Touch)
+// CSpdiaGridDlg::HandlePointerEventL()
+// Handle the pointer events on the dialog page, instead of HandleDialogPageEventL.
+// Because HandleDialogPageEventL() can not handle the different pointer events.
+// Only when the index button down is the same with the index button up, assign is right action.
 // ---------------------------------------------------------
-//	
-void CSpdiaGridDlg::HandleDialogPageEventL(TInt /*aEventId*/)
-    {
-    // When clicking on grid, the function will simulate the event 
-    // just like clicking on LSK
-    TryExitL( EAknSoftkeyOk );
-    }
+//
+void CSpdiaGridDlg::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	iGrid->HandlePointerEventL( aPointerEvent );
+	if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+        {
+        iGrid->View()->XYPosToItemIndex( aPointerEvent.iPosition, iButton1DownIndex );
+	    }
+	else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+		{
+		TInt button1UpIndex = -1;
+		iGrid->View()->XYPosToItemIndex( aPointerEvent.iPosition, button1UpIndex );
+		if( iButton1DownIndex == button1UpIndex )
+			{
+			TryExitL( EAknSoftkeyOk );
+			}
+		}
+	}
 // End of File
--- a/phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp	Tue May 11 16:00:21 2010 +0300
@@ -1970,20 +1970,6 @@
 
     if ( !CheckSpaceBelowCriticalLevelL() )
         {
-        if ( iGridUsed == EGridNoUse && (*iSdmArray)[aIndex].Contact() == NULL )
-            {
-            iQueryDialog = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone);
-            TBool resDialog(EFalse);
-            TRAPD(error,
-            resDialog = iQueryDialog->ExecuteLD(R_SPDIA_QUERY_ASSIGN) );
-            iQueryDialog = NULL;
-            User::LeaveIfError(error);
-            if (!resDialog)
-                {
-                result = EFalse;
-                } 
-            }
-
         if ( result && (*iSdmArray)[aIndex].Contact() != NULL )
             {
             //if(iGridUsed == EGridNoUse)//because grid will be used if you want to replace or change
@@ -2304,10 +2290,9 @@
 						CreateDataL( *iGrid  );
 						}
 					// If the view number note popped up and the customer delete the image of contact
-					// refresh the note dialog.
+					// Set the update flag.
 					if ( iRefreshObserver && iCurrentIndex == findResult )
 						{
-						iRefreshObserver->RefreshDialog();
 						iUpdateFlag = ETrue;
 						}
 					}
@@ -2853,58 +2838,70 @@
 // ---------------------------------------------------------
 //
 void CSpeedDialPrivate::AppendTextL(const TSpdiaIndexDataVPbk& aSdmData, TPtr& aText)
-{
-    
-    if (aSdmData.Contact() == NULL)
     {
-      aText.Append(KDesTab2);
-      aText.Append(KDesTab2);
-    }
+    if ( aSdmData.Contact() == NULL )
+        {
+        aText.Append( KDesTab2 );
+        aText.Append( KDesTab2 );
+        }
     else
-    {
-	   	// Test application name formatting logic is that take last name and
-	    // first name and combine them using space as a separator. If either of
-	    // them exists use company name. If there are still no name use "Unnamed"
+        {
+        // Test application name formatting logic is that take last name and
+        // first name and combine them using space as a separator. If either of
+        // them exists use company name. If there are still no name use "Unnamed"
 	    
-	    // Get field types from the master field type list
-	    const MVPbkFieldType* lastNameType = 
-	        iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );
-	    const MVPbkFieldType* firstNameType =
-	        iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );            
-	    const MVPbkFieldType* companyNameType =
-	        iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_COMPANYNAME );
+        // Get field types from the master field type list
+        const MVPbkFieldType* lastNameType = NULL; 
+	      const MVPbkFieldType* firstNameType = NULL;           
+	      const MVPbkFieldType* companyNameType =
+                iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_COMPANYNAME );
 	    
-	    CDesCArrayFlat* bufs = new( ELeave ) CDesCArrayFlat( 2 );
-	    CleanupStack::PushL( bufs );
+        TInt language = User::Language();
+	    
+        CDesCArrayFlat* bufs = new( ELeave ) CDesCArrayFlat( 2 );
+        CleanupStack::PushL( bufs );
 	    
-	    // Non-graphical characters are replaced with space
-	    const TText KReplaceChar = ' ';
+        // Non-graphical characters are replaced with space
+        const TText KReplaceChar = ' ';
 	        
-	    // Contact should have only one last name field
-	    CVPbkBaseContactFieldTypeIterator* itr = 
-	        CVPbkBaseContactFieldTypeIterator::NewLC( *lastNameType, 
-	            aSdmData.Contact()->Fields() );
-	    while ( itr->HasNext() )
-	        {
-	        const MVPbkBaseContactField* field = itr->Next();
-	        // last name field is text data
-	        const MVPbkContactFieldTextData& data = 
-	            MVPbkContactFieldTextData::Cast( field->FieldData() );
-	        HBufC* lastName = data.Text().AllocLC();
+        if ( ( language == ELangTaiwanChinese )
+            || ( language == ELangHongKongChinese )
+            || ( language == ELangPrcChinese ) )
+     		    {
+     		    lastNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );
+     		    firstNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );            
+     		    }
+        else
+            {
+            // Change the display order as first name - last name.
+            lastNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME );
+            firstNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME );      
+            }
+            
+        // Contact should have only one last name field
+        CVPbkBaseContactFieldTypeIterator* itr = 
+            CVPbkBaseContactFieldTypeIterator::NewLC( *lastNameType, aSdmData.Contact()->Fields() );
+        while ( itr->HasNext() )
+            {
+	          const MVPbkBaseContactField* field = itr->Next();
+	          // last name field is text data
+	          const MVPbkContactFieldTextData& data = 
+	              MVPbkContactFieldTextData::Cast( field->FieldData() );
+	          HBufC* lastName = data.Text().AllocLC();
 	        
-	        TPtr lName(NULL, 0);
-	        lName.Set( lastName->Des() );
-         	ReplaceNonGraphicCharacters( lName, KReplaceChar );
+	          TPtr lName(NULL, 0);
+	          lName.Set( lastName->Des() );
+         	  ReplaceNonGraphicCharacters( lName, KReplaceChar );
          	
-         	const TInt 	len = lName.Length();
-         	if (0 < len)
-         	{
-         		bufs->AppendL( lName);
-         	}
+         	  const TInt 	len = lName.Length();
+         	  if ( 0 < len )
+                {
+                bufs->AppendL( lName);
+                }
 	        
-	        CleanupStack::PopAndDestroy( lastName );
-	        }
-	    CleanupStack::PopAndDestroy( itr );
+            CleanupStack::PopAndDestroy( lastName );
+            }
+        CleanupStack::PopAndDestroy( itr );
 	    
 	    // Contact should have only one first name field
 	    itr = CVPbkBaseContactFieldTypeIterator::NewLC( *firstNameType, 
--- a/phonebookui/Speeddial/inc/SpdiaContainer.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/inc/SpdiaContainer.h	Tue May 11 16:00:21 2010 +0300
@@ -151,6 +151,11 @@
         * Set status pane to the normal status.
         */
         void SetStatusPaneL();
+        
+        /**
+        * Check whether the view note is displaying when making speeddial to background.
+        */
+        CSpdiaNoteDialog* GetViewDialogStatus();
 
     public: // Functions from CCoeControl classes
         /**
--- a/phonebookui/Speeddial/src/SpdiaContainer.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/src/SpdiaContainer.cpp	Tue May 11 16:00:21 2010 +0300
@@ -379,6 +379,7 @@
       
     TRAP_IGNORE( iGrid->ScrollBarFrame()->SetScrollBarVisibilityL(
         CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff ) );
+    iGrid->ScrollBarFrame()->VerticalScrollBar()->SetRect( TRect( 0,0,0,0 ) );
     CFormattedCellListBoxData* data = iGrid->ItemDrawer()->FormattedCellData();
 
     data->SetTransparentSubCellL( SDM_TN_CIF_TURNED, ETrue );  //5
@@ -1046,6 +1047,17 @@
         return;
         }
 
+    // check if the position is in grid view
+    CAknGridView* gridView = iGrid->GridView();
+    TInt itemIndex = 0;        
+    TRect visibleItemsRect(gridView->ViewRect().iTl, 
+                 TSize(gridView->ItemSize(itemIndex).iWidth * gridView->NumberOfColsInView(), 
+                 gridView->ItemSize(itemIndex).iHeight * gridView->NumberOfRowsInView()));
+    if (!visibleItemsRect.Contains(aPointerEvent.iPosition))
+        {
+        return;
+        }
+
     // Check if touch is enabled or not.
     if ( !AknLayoutUtils::PenEnabled() )
         {
@@ -1148,14 +1160,14 @@
 // --------------------------------------------------------------------------
 //    
  void CSpdiaContainer::HandleLongTapEventL(
-        const TPoint& /*aPenEventLocation*/, 
-        const TPoint& aPenEventScreenLocation )
+        const TPoint& aPenEventLocation, 
+        const TPoint& /*aPenEventScreenLocation*/ )
     {
     // Get the Current Data Index
     TInt itemIndex( KErrNotFound );
 
     // Get position when user press screen
-    iGrid->View()->XYPosToItemIndex( aPenEventScreenLocation, itemIndex );
+    iGrid->View()->XYPosToItemIndex( aPenEventLocation, itemIndex );
 
     // Compare two index
     if ( AknLayoutUtils::PenEnabled() && ( itemIndex == iGrid->CurrentDataIndex() ) )
@@ -1202,7 +1214,7 @@
              statusPane->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
              }
 
-         if ( statusPane->IsVisible() )
+         if ( statusPane->IsVisible()&&(!iView->IsShowVmbxDlg()) )
              {
              statusPane->MakeVisible( EFalse );
              }
@@ -1248,4 +1260,14 @@
             break;
         }
     }
+ 
+ // --------------------------------------------------------------------------
+ // CSpdiaContainer::GetViewDialogStatus
+ // Check whether the view note is displaying when making speeddial to background.
+ // --------------------------------------------------------------------------
+ // 
+ CSpdiaNoteDialog* CSpdiaContainer::GetViewDialogStatus()
+    {
+    return iDialog;
+    }
  // End of File  
--- a/phonebookui/Speeddial/src/SpdiaView.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookui/Speeddial/src/SpdiaView.cpp	Tue May 11 16:00:21 2010 +0300
@@ -457,6 +457,14 @@
         LoadCba( iContainer->MenuResourceID() );        
         
         iAIWRunFlag = EFalse;	 
+        
+        // If the view note displays when switching speeddial to background.
+        // Making the note pops up again.
+        if ( iSpeedPrivate->UpdateFlag() && iContainer->GetViewDialogStatus() )
+            {
+            CmdViewNumberL();
+            iSpeedPrivate->SetUpdateFlag( EFalse );
+            }
         }
     else
         {
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp	Tue May 11 16:00:21 2010 +0300
@@ -410,6 +410,7 @@
 {
     PRINT ( _L("Enter CPcsAlgorithm1MultiSearchHelper::ConvertQueryToListL") );
 
+    CleanupResetAndDestroyPushL( aQueryList );
     for ( TInt queryIndex = 0; queryIndex < aSearchQuery.Count(); queryIndex++ )
     {
         TBuf<KPsQueryMaxLen> dataWithKeys;
@@ -419,7 +420,8 @@
         aQueryList.AppendL( dWKToAppend );
         CleanupStack::Pop( dWKToAppend ); // ownership transfered
     }
-
+    
+    CleanupStack::Pop( &aQueryList );
     PRINT ( _L("End CPcsAlgorithm1MultiSearchHelper::ConvertQueryToListL") );
 }
 
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp	Tue May 11 16:00:21 2010 +0300
@@ -41,6 +41,7 @@
 void CPcsAlgorithm1Utils::FormCompleteSearchResultsL(RPointerArray<CPSDATA_R_PTR_ARRAY>& aSearchResultsArr, 
 												     RPointerArray<CPsData>& aSearchResults)
 {
+    CleanupClosePushL( aSearchResults );
 	TInt maxIndex = 0;
     TInt maxValue = aSearchResultsArr[maxIndex]->Count();
     TLinearOrder<CPsData> rule( CPcsAlgorithm1Utils::CompareDataBySortOrderL );
@@ -74,6 +75,7 @@
     		}
     	}
     }
+    CleanupStack::Pop();
 }
 
 // ----------------------------------------------------------------------------
@@ -330,6 +332,8 @@
 void CPcsAlgorithm1Utils::AppendMatchToSeqL( 
         RPointerArray<TDesC>& aMatchSeq, const TDesC& aMatch )
     {
+    CleanupResetAndDestroyPushL( aMatchSeq );
+    
     HBufC* seq = aMatch.AllocLC();
     seq->Des().UpperCase();
     TIdentityRelation<TDesC> rule(CompareExact);
@@ -342,6 +346,7 @@
         {
         CleanupStack::PopAndDestroy( seq );
         }
+    CleanupStack::Pop( &aMatchSeq );
     }
 
 // End of File
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp	Tue May 11 16:00:21 2010 +0300
@@ -120,7 +120,7 @@
 void CPcsCache::GetContactsForKeyL(TInt aKeyId, RPointerArray<CPcsPoolElement>& aData)
     {
     PRINT ( _L("Enter CPcsCache::GetContactsForKeyL") );
-    
+    CleanupClosePushL( aData );
     if ( aKeyId >= 0 && aKeyId < iKeyArr.Count() )
         {
         const RPointerArray<CPcsPoolElement>& arr = *iKeyArr[aKeyId];
@@ -129,7 +129,7 @@
             aData.AppendL(arr[i]);
             }
         }
-    
+    CleanupStack::Pop();
     PRINT ( _L("End CPcsCache::GetContactsForKeyL") );
     }
 
@@ -140,12 +140,12 @@
 void CPcsCache::GetAllContentsL(RPointerArray<CPsData>& aData)
 {
     PRINT ( _L("Enter CPcsCache::GetAllContentsL") );
-        	
+    CleanupClosePushL( aData );	
 	for ( TInt i = 0; i < iMasterPool.Count(); i++ )
 	{
         aData.AppendL(iMasterPool[i]);
 	}
-    
+	CleanupStack::Pop();
 	PRINT ( _L("End CPcsCache::GetAllContentsL") );
 }
 
--- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp	Tue May 11 16:00:21 2010 +0300
@@ -224,6 +224,9 @@
                                                            RArray<TPsMatchLocation>& aMatchLocation)
     {
     PRINT ( _L("Enter CPcsAlgorithm2MultiSearchHelper::SearchMatchSeqMultiL") );
+    CleanupResetAndDestroyPushL( aMatchSet );
+    CleanupClosePushL( aMatchLocation );
+    
     RPointerArray<HBufC> queryList;
     ConvertQueryToListL(aPsQuery, queryList);
 
@@ -350,6 +353,9 @@
     // Free the query list
     queryList.ResetAndDestroy();
     tempqueryList.Reset();
+    
+    CleanupStack::Pop();
+    CleanupStack::Pop( &aMatchSet );
 
     PRINT ( _L("End CPcsAlgorithm2MultiSearchHelper::SearchMatchSeqMultiL") );
     }
--- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp	Tue May 11 16:00:21 2010 +0300
@@ -35,6 +35,8 @@
 void CPcsAlgorithm2Utils::FormCompleteSearchResultsL(RPointerArray<CPSDATA_R_PTR_ARRAY>& aSearchResultsArr,
                                                      RPointerArray<CPsData>& SearchResults)
     {
+    CleanupClosePushL( SearchResults );
+    
     TInt maxIndex = 0;
     TInt maxValue = aSearchResultsArr[maxIndex]->Count();
     TLinearOrder<CPsData> rule(CPcsAlgorithm2Utils::CompareDataBySortOrder);
@@ -68,6 +70,7 @@
                 }
             }
         }
+    CleanupStack::Pop();
     }
 
 // ----------------------------------------------------------------------------
--- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp	Tue May 11 16:00:21 2010 +0300
@@ -191,7 +191,7 @@
 void CPcsCache::GetContactsForKeyL(TInt aKeyId, RPointerArray<CPcsPoolElement>& aData)
     {
     PRINT ( _L("Enter CPcsCache::GetContactsForKeyL") );
-
+    CleanupClosePushL( aData );
     RPointerArray<CPcsPoolElement> arr = *keyArr[aKeyId];
     for (int i = 0; i < arr.Count(); i++)
         {
@@ -199,6 +199,7 @@
         aData.AppendL(value);
         }
 
+    CleanupStack::Pop();
     PRINT ( _L("End CPcsCache::GetContactsForKeyL") );
     }
 
@@ -209,13 +210,13 @@
 void CPcsCache::GetAllContentsL(RPointerArray<CPsData>& aData)
     {
     PRINT ( _L("Enter CPcsCache::GetAllContentsL") );
-
+    CleanupClosePushL( aData );
     for (int i = 0; i < masterPool.Count(); i++)
         {
         CPsData* value = masterPool[i];
         aData.AppendL(value);
         }
-
+    CleanupStack::Pop();
     PRINT ( _L("End CPcsCache::GetAllContentsL") );
     }
 
--- a/predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp	Tue May 11 16:00:21 2010 +0300
@@ -70,6 +70,28 @@
 _LIT(KPanicReason, "Abnormal input parameters!");
 
 const TInt KLitLineFeed(8233);
+
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef )
+        { 
+        CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) ); 
+        }
+private:
+    inline static void ResetAndDestroy( TAny *aPtr )
+        { 
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    { 
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------
@@ -1055,6 +1077,7 @@
 void CFindUtilChineseECE::InsertStrInforArrayL(RPointerArray<STRINGINFO>& aStringInfoArr, 
     TDes &aSegmentStr, const TBool aChinese)
     {
+    CleanupResetAndDestroyPushL( aStringInfoArr );
     if (aSegmentStr.Length() <= 0)
         {
         return;
@@ -1069,6 +1092,7 @@
 
     aStringInfoArr.AppendL(strInfo);
     aSegmentStr.Zero();
+    CleanupStack::Pop( &aStringInfoArr );
     }
 
 // ---------------------------------------------------------
--- a/predictivesearch/PcsServer/group/PcsServer.mmp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/PcsServer/group/PcsServer.mmp	Tue May 11 16:00:21 2010 +0300
@@ -25,6 +25,7 @@
 SECUREID      0x2000B5B6
 
 EPOCHEAPSIZE  0x100000 0x1000000
+EPOCPROCESSPRIORITY background
 
 SOURCEPATH    ../src 
 SOURCE 	      CPcsStartup.cpp
--- a/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp	Tue May 11 16:00:21 2010 +0300
@@ -60,11 +60,13 @@
 #include <contactsort.rsg>
 
 // CONSTANTS
+namespace {
 const TInt KSimStoreOffset            = -5000;
+const TInt KTimerInterval             = 100000;   // 100 milliseconds
 
 _LIT(KResourceFileName, "contactsort.rsc");
 _LIT(KPcsViewPrefix,"PCSView_");
-
+}
 // FORWARD DECLARATION
 
 // ============================== MEMBER FUNCTIONS ================================
@@ -318,7 +320,10 @@
 	{
 	    // Fetch next block
 		iNextState = EFetchContactBlock;
-		IssueRequest();
+        // Delay the next fetch since contact fetch is CPU intensive,
+        // this will give other threads a chance to use CPU
+        iTimer.After( iStatus, KTimerInterval); // 100 milliseconds
+        SetActive();
 	}
 	
 }
@@ -344,7 +349,10 @@
 	{
 		// Fetch next block
 		iNextState = EFetchContactBlock;
-		IssueRequest();
+        // Delay the next fetch since contact fetch is CPU intensive,
+        // this will give other threads a chance to use CPU
+		iTimer.After( iStatus, KTimerInterval);   // 100 milliseconds
+        SetActive();
 	}
 	
 	PRINT ( _L("End CPcsContactStore::VPbkSingleContactOperationFailed") );
@@ -815,11 +823,6 @@
 	   	case EFetchContactBlock:
 	   		PRINT ( _L("Issuing the fetch request for next block") );
 			FetchlinksL();
-			
-			// Delay the next fetch since contact fetch is CPU intensive,
-			// this will give other threads a chance to use CPU
-			iTimer.After( timerStatus, 100000); // 100 milliseconds
-			User::WaitForRequest( timerStatus );
 			break;
 	   	
 	   	case EComplete:
--- a/presencecache/presencecacheutils/inc/presenceobjecthelpers.h	Tue Apr 27 16:23:35 2010 +0300
+++ b/presencecache/presencecacheutils/inc/presenceobjecthelpers.h	Tue May 11 16:00:21 2010 +0300
@@ -61,4 +61,19 @@
     ~PresenceCacheBuddyUtils();
     };
 
+// CleanupStack helpers for item owning RPointerArrays
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL(T& aRef)
+        { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); }
+private:
+    inline static void ResetAndDestroy(TAny *aPtr)
+        { static_cast<T*>(aPtr)->ResetAndDestroy(); }
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+    { CleanupResetAndDestroy<T>::PushL(aRef); }
 #endif // PRESENCEOBJECTHELPERS_H
--- a/presencecache/presencecacheutils/src/presenceobjecthelpers.cpp	Tue Apr 27 16:23:35 2010 +0300
+++ b/presencecache/presencecacheutils/src/presenceobjecthelpers.cpp	Tue May 11 16:00:21 2010 +0300
@@ -64,6 +64,7 @@
 //
 EXPORT_C void TPresenceArrayPacker::UnPackArrayL( RPointerArray< MPresenceBuddyInfo2 >& aBufferArray, const TDesC8& aPack  )
     {
+    CleanupResetAndDestroyPushL( aBufferArray );
 	// No reset
     if ( ! aPack.Length() )
         {
@@ -85,10 +86,10 @@
         info = MPresenceBuddyInfo2::NewLC();
         info->InternalizeL( rs );
         aBufferArray.AppendL( info );
-        
+        CleanupStack::Pop();
 		}
-    CleanupStack::Pop( objCount ); // all the objects
     CleanupStack::PopAndDestroy(); // rs    
+    CleanupStack::Pop( &aBufferArray );
     }