Revision: 201023 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 15:24:27 +0300
branchRCL_3
changeset 15 34879f5cfc63
parent 13 a6539d1e8e43
child 17 2666d9724c76
Revision: 201023 Kit: 2010125
contacts_plat/cca_view_plugin_api/inc/ccaextensionfactory.h
contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h
logsui/AppSrc/CLogsBaseView.cpp
phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkCompositeContactView.cpp
phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp
phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberParallelMatchStrategy.cpp
phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberSequentialMatchStrategy.cpp
phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRemoteStore.cpp
phonebookengines/contactsmodel/cntplsql/src/cviewcontactmanager.cpp
phonebookengines/contactsmodel/cntsrv/src/CViewSubSessions.cpp
phonebookengines/contactsmodel/groupsql/cntmodel.iby
phonebookui/Phonebook2/MapExtension/inc/cpmapcmd.h
phonebookui/Phonebook2/MapExtension/inc/cpmapcontacteditorextension.h
phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp
phonebookui/Phonebook2/MapExtension/src/cpmapcontacteditorextension.cpp
phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp
phonebookui/Phonebook2/Presentation/src/CPbk2DuplicateContactFinder.cpp
phonebookui/Phonebook2/UIControls/inc/CPbk2AdaptiveSearchGridFiller.h
phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2FetchDlg.cpp
phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsDlg.cpp
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/data/ccappcommlauncherpluginrsc.rss
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontainer.h
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherlpadmodel.cpp
phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchermenuhandler.cpp
phonebookui/Phonebook2/ccapplication/ccamycardplugin/data/ccappmycardpluginrsc.rss
phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp
phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardheadercontrol.cpp
phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/bwinscw/ccapputilu.def
phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/eabi/ccapputilu.def
phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/inc/ccappstatuscontrol.h
phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/src/ccappstatuscontrol.cpp
phonebookui/Phonebook2/conf/phonebook2.confml
phonebookui/Phonebook2/conf/phonebook2_101f8794.crml
phonebookui/Phonebook2/group/iconlistece.txt
phonebookui/Phonebook2/inc/Phonebook2InternalCRKeys.h
phonebookui/Phonebook2/inc/Phonebook2PrivateCRKeys.h
phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp
phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp
phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp
predictivesearch/PcsAlgorithm/Algorithm1/inc/CPcsAdaptiveGrid.h
predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAdaptiveGrid.cpp
predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp
predictivesearch/PcsServer/group/PcsServer.mmp
predictivesearch/PcsServer/inc/CPcsServer.h
predictivesearch/PcsServer/src/CPcsServer.cpp
predictivesearch/PcsServer/src/CPcsSession.cpp
predictivesearch/adapters/contacts/src/cpcscontactstore.cpp
--- a/contacts_plat/cca_view_plugin_api/inc/ccaextensionfactory.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/contacts_plat/cca_view_plugin_api/inc/ccaextensionfactory.h	Mon Jun 21 15:24:27 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -21,10 +21,17 @@
 #include <e32base.h>
 
 class MCCAViewLauncher;
+class MCCAStatusProvider;
 
 /**
  *  ECom interface for CCA Extension factory.
- *
+ *  At the moment extension factory interface is used only for extend CCA 
+ *  Status button implementation:
+ *   - CCA Status button implementation uses this interface to launch external 
+ *   views (MCCAViewLauncher) when user tap the Status button.
+ *   - CCA Status button implementation uses MCCAStatusProvider interface to
+ *   read status information from plug-in if status infromation doesn't found in 
+ *   Presence Cache.
  *  @lib n/a
  *  @since 9.2
  */
@@ -45,7 +52,7 @@
         {
         return NULL;
         }
-
+    
     /**
      * Returns Service ID of the plug-in.
      */
@@ -67,6 +74,32 @@
 
     };
 
+// Use this UID to access CCCAExtensionFactory's status provider creator.
+// Used as a parameter to CCCAExtensionFactory::FactoryExtension method.
+const TUid KCCAExtensionFactoryStatusProviderCreatorUid = { 2 };
+
+/**
+ * This class is an extension to CCCAExtensionFactory.
+ *
+ * @see CCCAExtensionFactory
+ * @see KCCAExtensionFactoryStatusProviderCreatorUid
+ */
+class MCCAExtensionFactoryStatusProviderCreator
+    {
+    protected:  // Destructor
+        virtual ~MCCAExtensionFactoryStatusProviderCreator() { }
+
+    public:
+
+        /**
+         * Creates a status provider.
+         * Ownership is given.
+         * @return Status provider instance @see MCCAStatusProvider
+         */
+        virtual MCCAStatusProvider* CreateStatusProviderL() = 0;
+
+    };
+
 /**
  *  View launcher extension for the CCA.
  */
@@ -112,6 +145,112 @@
 
     };
 
+class MCCAStatusProviderObserver;
+class MVPbkContactLink;
+class CGulIcon;
+
+/**
+ * Status provider extension for the CCA
+ */
+class MCCAStatusProvider
+    {
+public:
+    /// virtual destructor
+    virtual ~MCCAStatusProvider() {};
+
+    /**
+     * Add observer
+     * @param aObserver instance @see MCCAStatusProviderObserver
+     */
+    virtual void AddObserverL(
+            MCCAStatusProviderObserver& aObserver ) = 0;
+
+    /**
+     * Removes observer
+     * @param aObserver instance @see MCCAStatusProviderObserver
+     */
+    virtual void RemoveObserver(
+            MCCAStatusProviderObserver& aObserver ) = 0;
+
+    /**
+     * CCA fetch status information for the Status button with this method 
+     * if status information is not found from Presence Cache
+     * @param aLink
+     * @param aText Status Text, ownership is transfered 
+     * @param aIcon Status Icon, ownership is transfered
+     */
+    virtual void GetStatusInformationL(
+            const MVPbkContactLink& aLink,
+            HBufC*& aText,
+            CGulIcon*& aIcon ) = 0;
+
+    /**
+     * CCA fetch status information for the Status button with this method 
+     * if status information is not found from Presence Cache
+     * This function is used only for fetching My card status information
+     * @param aLink
+     * @param aText Status Text, ownership is transfered 
+     * @param aIcon Status Icon, ownership is transfered
+     */
+     virtual void GetMyCardStatusInformationL(
+             const MVPbkContactLink& aLink,
+             HBufC*& aText,
+             CGulIcon*& aIcon ) = 0;
+
+    /**
+     *  Extension point for the status provider
+     */
+    virtual TAny* StatusProviderExtension(
+            TUid /*aExtensionUid*/ )
+        {
+        return NULL;
+        }
+
+protected:
+    MCCAStatusProvider() {};
+	
+    };
+
+/**
+ * Interface to observe content changes
+ */
+class MCCAStatusProviderObserver
+    {
+public:
+    /**
+     * Event types
+     */
+    enum TCCAStatusProviderObserverEvent
+        {
+        /// Status is changed and CCA should fetch status information again
+        EStatusChanged = 0x0
+        };
+
+    /**
+     * Plug-in can notify CCA about status events 
+     * @param aEvent Type of the event
+     * @param aLink Contact which the event is about
+     */
+    virtual void StatusEvent(
+        MCCAStatusProviderObserver::TCCAStatusProviderObserverEvent aEvent,
+        const MVPbkContactLink* aLink = NULL ) = 0;
+
+    /**
+     *  Extension point for the MCCAStatusProviderObserver
+     */
+    virtual TAny* StatusProviderObserverExtension(
+            TUid /*aExtensionUid*/ )
+        {
+        return NULL;
+        }
+   
+protected:
+    MCCAStatusProviderObserver(){};
+    virtual ~MCCAStatusProviderObserver() {};
+	
+    };
+
+
 #include "ccaextensionfactory.inl"
 
 #endif // CCAEXTENSIONFACTORY_H
--- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h	Mon Jun 21 15:24:27 2010 +0300
@@ -36,6 +36,9 @@
  * implementations, but instances of the strategies are created using
  * this classes NewL function. Actual implementation selection is done
  * based on the given configuration data.
+ * In case of multiple matches from different stores, results from store
+ * configured in Phonebook 2 settings are returned. Only if no match
+ * is found from configured store(s), then return matches from other stores.
  */
 class CVPbkPhoneNumberMatchStrategy : public CBase
     {
@@ -183,7 +186,14 @@
          * @return Array of stores that are used in matching.
          */
         TArray<MVPbkContactStore*> StoresToMatch() const;
-
+        
+        /**
+         * Checks if contact store is SIM store.
+         * @param aStore Store to be checked.
+         * @return ETrue if aStore is SIM store, otherwise EFalse.
+         */
+        TBool IsSimStore( const MVPbkContactStore& aStore );
+        
     private: // Interface for derived classes to implement
         /**
          * Called from MatchL to indicate derived classes that 
--- a/logsui/AppSrc/CLogsBaseView.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/logsui/AppSrc/CLogsBaseView.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -880,9 +880,7 @@
         }
   
     //Process Send key for cellular, voip or poc call 
-    if( aKeyEvent.iScanCode == EStdKeyYes &&
-        ( MenuBar()->ItemSpecificCommandsEnabled() ||
-            LogsAppUi()->ActiveViewId() == ELogDetailViewId ) )
+    if( aKeyEvent.iScanCode == EStdKeyYes )
         {
         ConstructDelayedL( EFalse );        //EFalse: perform immediately
         TBool supportLongSendPress = EFalse;//FIXME: FeatureManager::FeatureSupported( ??? ) this value should be available from platform in future
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkCompositeContactView.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkCompositeContactView.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -958,12 +958,15 @@
             {
             // Loop through the rest of the contacts of the subview
             // and modify their global contact mapping information
-            for (TInt i = index; i < iContactMapping.Count(); ++i)
+            for (TInt i = 0; i < iContactMapping.Count(); ++i )
                 {
-                if (iContactMapping[i].iViewIndex == subViewIndex)
+                // Adjust the iContactIndex in the same view except the deleted one.
+                if ( ( iContactMapping[i].iViewIndex == subViewIndex ) 
+                   && ( iContactMapping[i].iContactIndex >= aIndex )
+                   && ( i != index ) )
                     {
-                    // Subtract one because one contact was deleted
-                    // from the list before the current index
+                    // Subtract one because one contact was deleted, the index
+                    // from the list which is bigger than the deleted one needs to be adjusted.
                     --iContactMapping[i].iContactIndex;
                     }
                 }
@@ -999,13 +1002,18 @@
             index = err;
             }
         else
-        	{
-        	// We have to fix the indexes of all the succeeding
+            {
+        	  // We have to fix the indexes of all the succeeding
             // contacts in the view where the contact addition took place
-            for ( TInt i = index + 1; i < iContactMapping.Count(); ++i )
+            for ( TInt i = 0; i < iContactMapping.Count(); ++i )
                 {
-                if (iContactMapping[i].iViewIndex == subViewIndex)
+                // Adjust the iContactIndex in the same view except the added one.
+                if ( ( iContactMapping[i].iViewIndex == subViewIndex ) 
+                   && ( iContactMapping[i].iContactIndex >= aIndex )
+                   && ( i != index ) )
                     {
+                    // plus one because one contact was added, the index
+                    // from the list which is bigger than the deleted one needs to be adjusted.
                     ++iContactMapping[i].iContactIndex;
                     }
                 }
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberMatchStrategy.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -37,12 +37,27 @@
 #include <barsread.h>
 #include <MVPbkContactFieldTextData.h>
 #include <CVPbkContactStoreUriArray.h>
+#include <centralrepository.h>
+#include <VPbkStoreUriLiterals.h>
 
 #include "CVPbkPhoneNumberSequentialMatchStrategy.h"
 #include "CVPbkPhoneNumberParallelMatchStrategy.h"
 
 // CONSTANTS
+// Unnamed namespace for local definitions
+namespace {
+// --------------------------------------------------------------------------
+// Phonebook Central Repository UIDs
+// Copied from sf\app\contacts\phonebookui\Phonebook2\inc\Phonebook2InternalCRKeys.h
+// --------------------------------------------------------------------------
+//
+const TUint32 KCRUidPhonebookStoreConfiguration             = 0x1020727f;
+const TUint32 KPhonebookCurrentConfigurationPartialKey      = 0x00000100;
+const TUint32 KPhonebookCurrentConfigurationMask            = 0xffffff00;
+
+const TInt KInitialStoreUriSize = 22; // length of KVPbkDefaultCntDbURI
 const TInt KMagicNumber = -1;
+} // namespace
 
 NONSHARABLE_CLASS(CVPbkPhoneNumberMatchStrategyImpl) :
         public CActive,
@@ -61,7 +76,8 @@
         void MatchL(const TDesC& aPhoneNumber);
         TInt MaxMatchDigits() const;
         TArray<MVPbkContactStore*> StoresToMatch() const;
-
+        TBool IsSimStore( const MVPbkContactStore& aStore );
+        
     private: // From CActive
         void RunL();
         void DoCancel();
@@ -133,6 +149,19 @@
                 const TDesC& aNumberB, TNumberType aNumberBType  );
         TInt FormatAndCheckNumberType( TDes& aNumber );
         
+        /**
+         * Reads current store configuration from central repositiry
+         * @return Array of stores or NULL if error during reading form cenrep.
+        */
+        CVPbkContactStoreUriArray* GetCurrentStoreConfigurationL();
+        
+        /**
+         * If there is in the results at least one contact
+         * from currently used stores in Phonebook2 it removes from results 
+         * contacts from other stores
+        */
+        void RefineDuplicatedNumbersL();
+        
     private: // Data
         CVPbkPhoneNumberMatchStrategy& iParent;
         /// Ref: The contact manager instance to be used for searching.
@@ -410,6 +439,12 @@
                 delete iResults;
                 iResults = results;
                 }
+
+            if ( iResults->Count() > 1 )
+                {
+                RefineDuplicatedNumbersL();
+                }
+
             CVPbkContactLinkArray* results = iResults;
             iResults = NULL;            
             iObserver->FindCompleteL( results );
@@ -945,6 +980,134 @@
     return result;
     }
 
+CVPbkContactStoreUriArray* CVPbkPhoneNumberMatchStrategyImpl::GetCurrentStoreConfigurationL()
+    {
+    CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidPhonebookStoreConfiguration ) );
+    CleanupStack::PushL( repository );
+    CVPbkContactStoreUriArray* result = CVPbkContactStoreUriArray::NewLC();
+
+    RArray<TUint32> configurationKeys;
+    CleanupClosePushL( configurationKeys );
+
+    repository->FindL( KPhonebookCurrentConfigurationPartialKey,
+            KPhonebookCurrentConfigurationMask, configurationKeys );
+
+    HBufC* buffer = HBufC::NewLC( KInitialStoreUriSize );
+    const TInt keyCount = configurationKeys.Count();
+    TInt ret = KErrNone;
+    for ( TInt i = 0; i < keyCount; ++i )
+        {
+        TPtr ptr = buffer->Des();
+        ptr.Zero();
+        TInt actualSize = 0;
+        ret = repository->Get( configurationKeys[i], ptr, actualSize );
+        if ( ret == KErrOverflow )
+            {
+            CleanupStack::PopAndDestroy(); // buffer
+            buffer = HBufC::NewLC( actualSize );
+            ptr.Set( buffer->Des() );
+            ret = repository->Get( configurationKeys[i], ptr );
+            }
+        
+        if ( ret != KErrNone )
+            {
+            break;
+            }
+        
+        if( !result->IsIncluded( TVPbkContactStoreUriPtr( ptr ) ) )  // Only append if the uri is not yet included
+            {
+            result->AppendL( ptr );
+            }
+        }
+    CleanupStack::PopAndDestroy( buffer );
+    CleanupStack::PopAndDestroy( &configurationKeys );
+    CleanupStack::Pop( result );
+    CleanupStack::PopAndDestroy( repository );
+    
+    if ( ret != KErrNone )
+        {
+        delete result;
+        result = NULL;
+        }
+    return result;
+    }
+
+void CVPbkPhoneNumberMatchStrategyImpl::RefineDuplicatedNumbersL()
+    {
+    CVPbkContactStoreUriArray* stores = GetCurrentStoreConfigurationL();
+    if ( !stores )
+        {
+        return;
+        }
+    CleanupStack::PushL( stores );
+    
+    TInt storesCount = stores->Count();
+    if ( storesCount )
+        {
+        TInt linksCount = iResults->Count();
+        // check if there is in the results at least one contact
+        // from currently used stores
+        TBool isFromUsedStore = EFalse;
+        for ( TInt i = 0; i < linksCount; i++ )
+            {
+            const MVPbkContactStoreProperties& linkStoreProp = 
+                iResults->At( i ).ContactStore().StoreProperties();
+
+            for ( TInt j = 0; j < storesCount; j++ )
+                {
+                if ( !linkStoreProp.Uri().UriDes().Compare( ( *stores )[j].UriDes() ) )
+                    {
+                    isFromUsedStore = ETrue;
+                    break;
+                    }
+                }
+            if ( isFromUsedStore )
+                {
+                break;
+                }
+            }
+        // remove from results contacts from not used stores
+        if ( isFromUsedStore )
+            {
+            for ( TInt i = 0; i < linksCount; i++ )
+                {
+                TBool remove = ETrue;
+                const MVPbkContactStoreProperties& linkStoreProp = 
+                    iResults->At( i ).ContactStore().StoreProperties();
+                
+                for ( TInt j = 0; j < storesCount; j++ )
+                    {
+                    if ( !linkStoreProp.Uri().UriDes().Compare( ( *stores )[j].UriDes() ) )
+                        {
+                        remove = EFalse;
+                        break;
+                        }
+                    }
+                if ( remove )
+                    {
+                    iResults->Delete( i );
+                    linksCount--;
+                    i--;
+                    }
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy( stores );
+    }
+
+TBool CVPbkPhoneNumberMatchStrategyImpl::IsSimStore( const MVPbkContactStore& aStore )
+    {
+    TVPbkContactStoreUriPtr uriPtr = aStore.StoreProperties().Uri();
+    if ( !uriPtr.UriDes().Compare( KVPbkSimGlobalAdnURI )
+            || !uriPtr.UriDes().Compare( KVPbkSimGlobalFdnURI )
+            || !uriPtr.UriDes().Compare( KVPbkSimGlobalSdnURI )
+            || !uriPtr.UriDes().Compare( KVPbkSimGlobalOwnNumberURI ) )
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
 CVPbkPhoneNumberMatchStrategy::CVPbkPhoneNumberMatchStrategy()
     {
     }
@@ -1000,4 +1163,8 @@
     return iImpl->StoresToMatch();
     }
 
+TBool CVPbkPhoneNumberMatchStrategy::IsSimStore( const MVPbkContactStore& aStore )
+    {
+    return iImpl->IsSimStore( aStore );
+    }
 // End of File
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberParallelMatchStrategy.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberParallelMatchStrategy.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -20,6 +20,7 @@
 
 #include <MVPbkContactStore.h>
 #include <CVPbkContactFindOperation.h>
+#include <cntdb.h>
 
 CVPbkPhoneNumberParallelMatchStrategy::CVPbkPhoneNumberParallelMatchStrategy()
     {
@@ -54,16 +55,33 @@
         const TDesC& aPhoneNumber)
     {
     CVPbkContactFindOperation* operation = NULL;
-
+    
     if (!iMatchingStarted)
         {
         operation = CVPbkContactFindOperation::NewLC(FindObserver());
         const TInt storeCount = StoresToMatch().Count();
+        TInt maxDigits = MaxMatchDigits();
+        
         for (TInt i = 0; i < storeCount; ++i)
             {
-            MVPbkContactOperation* subOperation = 
-                    StoresToMatch()[i]->CreateMatchPhoneNumberOperationL(
-                               aPhoneNumber, MaxMatchDigits(), *operation);
+            MVPbkContactOperation* subOperation = NULL;
+            
+            if ( maxDigits == KBestMatchingPhoneNumbers &&
+                    IsSimStore( *( StoresToMatch()[i] ) ) )
+                {
+                // KBestMatchingPhoneNumbers enables best matching strategy 
+                // on store level only for phone memory stores, for sim store
+                // MaxDigits parameter should be set to 7 or greater
+                const TInt KMaxDigitsForSimStore = 7;
+                subOperation = StoresToMatch()[i]->CreateMatchPhoneNumberOperationL(
+                        aPhoneNumber, KMaxDigitsForSimStore, *operation);
+                }
+            else
+                {
+                subOperation = StoresToMatch()[i]->CreateMatchPhoneNumberOperationL(
+                        aPhoneNumber, maxDigits, *operation);
+                }
+
             if (subOperation)
                 {
                 CleanupDeletePushL(subOperation);
--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberSequentialMatchStrategy.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkPhoneNumberSequentialMatchStrategy.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -20,6 +20,7 @@
 
 #include <MVPbkContactStore.h>
 #include <MVPbkContactOperation.h>
+#include <cntdb.h>
 
 CVPbkPhoneNumberSequentialMatchStrategy::CVPbkPhoneNumberSequentialMatchStrategy() 
     {
@@ -54,13 +55,26 @@
         const TDesC& aPhoneNumber)
     {
     MVPbkContactOperation* operation = NULL;
-
+    TInt maxDigits = MaxMatchDigits();
     // Get the next store's operation if it not null
     while ( iCurrentOperation < StoresToMatch().Count() && !operation )
         {
-        operation = StoresToMatch()[iCurrentOperation]->CreateMatchPhoneNumberOperationL(
-                aPhoneNumber, MaxMatchDigits(), FindObserver());
-        
+        if ( maxDigits == KBestMatchingPhoneNumbers &&
+                IsSimStore( *( StoresToMatch()[iCurrentOperation] ) ) )
+            {
+            // KBestMatchingPhoneNumbers enables best matching strategy 
+            // on store level only for phone memory stores, for sim store
+            // MaxDigits parameter should be set to 7 or greater
+            const TInt KMaxDigitsForSimStore = 7;
+            operation = StoresToMatch()[iCurrentOperation]->CreateMatchPhoneNumberOperationL(
+                    aPhoneNumber, KMaxDigitsForSimStore, FindObserver());
+            }
+        else
+            {
+            operation = StoresToMatch()[iCurrentOperation]->CreateMatchPhoneNumberOperationL(
+                    aPhoneNumber, maxDigits, FindObserver());
+            }
+
         if ( operation )
             {
             CleanupDeletePushL(operation);
--- a/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRemoteStore.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRemoteStore.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -676,6 +676,12 @@
                 {
                 iAsyncOpenOp->Purge();
                 TInt id = iStoreEvent.iData;
+                
+                if ( IsOpen() && id == MVPbkSimPhoneObserver::ESimCardNotInserted )
+                    {
+                    iCurrentState = iStoreEvent.iEvent;
+                    }
+
                 // If not SIM card or BT SAP is active then store is not available
                 if ( id == MVPbkSimPhoneObserver::ESimCardNotInserted ||
                      id == MVPbkSimPhoneObserver::EBtSapActive )
--- a/phonebookengines/contactsmodel/cntplsql/src/cviewcontactmanager.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/contactsmodel/cntplsql/src/cviewcontactmanager.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -359,9 +359,8 @@
 			}
 		else if(iViewPreferences & (EUnSortedAtBeginning | EUnSortedAtEnd))
 			{
-			// It's an unsortable contact, just append its lightweight object
-			// to unsortable view contacts list.
-			contact->ChangeToLightweightObject();
+			// It's an unsortable contact,
+			// just append it to unsortable view contacts list.
 			iUnsortedViewContacts->AppendL(contact);
 			CleanupStack::Pop(contact);
 			}
@@ -523,13 +522,11 @@
 		if(diff > 0)
 			{
 			resultContacts->AppendL(firstRightContact);
-			firstRightContact->ChangeToLightweightObject();
 			++indexRight;
 			}
 		else
 			{		
 			resultContacts->AppendL(firstLeftContact);
-			firstLeftContact->ChangeToLightweightObject();
 			++indexLeft;
 			if(diff == 0)
 			    {
@@ -549,10 +546,6 @@
 	while(indexRight < aRightContacts.Count())
 		{
 		CViewContact* firstRightContact = static_cast<CViewContact*>(aRightContacts[indexRight]);
-		
-		//change all the fullfil view objects to lightweight into the merged list.
-		firstRightContact->ChangeToLightweightObject();
-		
 		resultContacts->AppendL(firstRightContact);
 		++indexRight;
 		}
@@ -653,8 +646,6 @@
 
     User::LeaveIfError(error);
     
-    //Make the view contact object to be lightweighted before insert to iViewContacts.
-    const_cast<CViewContact*>(aNewContact)->ChangeToLightweightObject();
 	iViewContacts->InsertL(aNewContact, position);
 
 	return position;
@@ -821,8 +812,6 @@
 */
 HBufC* CViewContactManager::AllFieldsLC(TInt aIndex, const TDesC& aSeparator) const
     {
-	TBool ifWasFullObject = EFalse;
-	
 	CViewContact& viewContact = ViewContactAtL(aIndex); 
 	if(viewContact.IsLightweightObject())
 		{
@@ -835,19 +824,10 @@
 		CleanupStack::PushL(contact);    
 		viewContact.CopyL(*contact);
 		CleanupStack::PopAndDestroy(contact);
-		
-		ifWasFullObject = ETrue;
 		}
 
 	HBufC* buf = FieldsWithSeparatorLC(viewContact,aSeparator);
-	
-	if(ifWasFullObject)
-		{
-		//loadFullContent is set in ViewContactAtL if the viewContact was a lightweight object and
-		//loaded to be full content object in that function. So we need to change it to lightweight
-		//in order to save more memory.
-		viewContact.ChangeToLightweightObject();
-		}
+
     return buf;	
     }
 
@@ -893,7 +873,6 @@
 			{
 			// unsortable contacts go at the end or beginning
 			// we want this to be stable (e.g. when ICC becomes unlocked)
-			contact->ChangeToLightweightObject();
 			iUnsortedViewContacts->AppendL(contact);
             index = iUnsortedViewContacts->Count() - 1; 
             			
--- a/phonebookengines/contactsmodel/cntsrv/src/CViewSubSessions.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/contactsmodel/cntsrv/src/CViewSubSessions.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -390,10 +390,6 @@
 	delete iContact;
 	iContact=NULL;
 	iContact = CViewContact::NewL(contact);
-
-	//Always keep server side local view in memory saving mode, so we
-	//change the view contact object stored in iView into lightweight object
-	const_cast<CViewContact&>(contact).ChangeToLightweightObject();
 	
 	const TInt externalizedSize=iContact->ExternalizedSize();
 	TPckgBuf<TInt> pckg(externalizedSize);
@@ -668,10 +664,6 @@
 			idMap.iMapping=i;
 			User::LeaveIfError(array.Append(idMap));
 			}
-			
-        //Always keep server side local view in memory saving mode, so we
-        //change the view contact object stored in iView into lightweight object
-		const_cast<CViewContact&>( contact ).ChangeToLightweightObject();
 		}
 
 	// Externalize array to client.
--- a/phonebookengines/contactsmodel/groupsql/cntmodel.iby	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookengines/contactsmodel/groupsql/cntmodel.iby	Mon Jun 21 15:24:27 2010 +0300
@@ -30,7 +30,7 @@
 
 REM Configurable heap size for contact server.
 #ifndef CONTACT_SERVER_MAX_HEAPSIZE
-#define CONTACT_SERVER_MAX_HEAPSIZE  0x100000
+#define CONTACT_SERVER_MAX_HEAPSIZE  0x200000
 #endif
 
 file=ABI_DIR\BUILD_DIR\cntsrv.exe		System\Programs\cntsrv.exe       heapmax=CONTACT_SERVER_MAX_HEAPSIZE
--- a/phonebookui/Phonebook2/MapExtension/inc/cpmapcmd.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/MapExtension/inc/cpmapcmd.h	Mon Jun 21 15:24:27 2010 +0300
@@ -36,13 +36,20 @@
 class MPbk2ContactEditorControlExtension;
 class MVPbkStoreContactField;
 class TLocality;
+class CMnMapView;
 
+enum TCurrentMapLaunchedByState
+    {
+    EMapNone = 1,
+    EMapAssignFromMaps,
+    EMapShowOnMaps
+    };
 // CLASS DECLARATION
 
 /**
  * Phonebook 2 show on map command object.
  */
-class CPmapCmd : public CBase,
+class CPmapCmd : public CActive,
 				 public MPbk2Command,
 				 public MVPbkContactObserver
     {
@@ -76,6 +83,27 @@
          */
         ~CPmapCmd();
 
+        // CActive-related methods
+       /**
+       * RunL method to handle the user selection
+       */
+       void RunL();
+       
+       /**
+       * Cancel method to handle the user selection
+       */
+       void DoCancel();
+       
+       /**
+       * Function to handle any errors in async request
+       * @param aError   Error Code
+       */
+       TInt RunError( TInt aError );
+      
+       /**
+       * Disconnects from provider, when operation is completed
+       */
+       void Reset();
     public: //From MVPbkContactObserver
     	void ContactOperationCompleted( TContactOpResult aResult );
         void ContactOperationFailed(
@@ -85,6 +113,7 @@
         
     public: // From MPbk2Command
         void ExecuteLD();
+        void ExecuteL();
         void AddObserver(
                 MPbk2CommandObserver& aObserver );
         void ResetUiControl(
@@ -235,6 +264,16 @@
          */
         TPbk2FieldGroupId GetFieldGroupL( MVPbkStoreContactField& aField );
         
+        /**
+         * Handle the selection of map which was launched from Show On Map option. 
+         */
+        void HandleSelectiOnShowOnMapsL();
+        
+        /**
+         * Handle the selection of map which was launched from Assign From Maps option. 
+         */
+        void HandleSelectiOnAssignFromMapsL();
+        
     private: // Data
     	/// Ref: Contact editor control
         MPbk2ContactEditorControl* iEditorControl;
@@ -246,12 +285,20 @@
         MPbk2CommandObserver* iObserver;
         /// Own: Map View Provider
         CMnProvider* iMapViewProvider;
+        /// Own: Map View
+        CMnMapView* iMapView;
         /// Own: Is in editor address view?
         TBool iAddressView;
         /// Own: command id
         TInt iCommandId;
         /// Own: Is in editor address view?
 		TBool iAddressUpdatePrompt;
+		/// Own: Current map launched is by which option
+		TCurrentMapLaunchedByState iCurrentMapLaunchedByState;
+		/// Own: Current AddressType
+		TVPbkFieldTypeParameter iAddressType;
+		/// Own: Is already address is there?
+		TBool iNoAddress;
     };
 
 #endif // CPMAPCMD_H
--- a/phonebookui/Phonebook2/MapExtension/inc/cpmapcontacteditorextension.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/MapExtension/inc/cpmapcontacteditorextension.h	Mon Jun 21 15:24:27 2010 +0300
@@ -30,7 +30,7 @@
 class MPbk2ContactEditorControl;
 class MPbk2ContactEditorUIField;
 class MPbk2UIField;
-
+class MPbk2Command;
 // CLASS DECLARATION
 class CPmapContactEditorExtension : public CBase,
 								    public MPbk2ContactEditorExtension,
@@ -107,7 +107,8 @@
         MVPbkStoreContact& iContact;
         /// Ref: Contact editor control
         MPbk2ContactEditorControl& iEditorControl;
-
+        /// Own: Map command controller
+        MPbk2Command* iCmd;
 	};
 
 #endif // CPMAPCONTACTEDITOREXTENSION_H
--- a/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -96,11 +96,14 @@
 //
 CPmapCmd::CPmapCmd( MPbk2ContactEditorControl& aEditorControl,
 		MVPbkStoreContact& aContact, TInt aCommandId ) :
+		CActive( CActive::EPriorityStandard ),
 		        iEditorControl( &aEditorControl ),
 		        iContact( &aContact ),
             iCommandId( aCommandId )            
     {
+    CActiveScheduler::Add( this );
     iAddressUpdatePrompt = ETrue;
+    iCurrentMapLaunchedByState = EMapNone;
     }
 
 // --------------------------------------------------------------------------
@@ -108,10 +111,13 @@
 // --------------------------------------------------------------------------
 //
 CPmapCmd::CPmapCmd( MPbk2ContactUiControl& aUiControl, TInt aCommandId ) :
+            CActive( CActive::EPriorityStandard ),
             iUiControl( &aUiControl ),
             iCommandId( aCommandId )
     {
+    CActiveScheduler::Add( this );
     iAddressUpdatePrompt = ETrue;
+    iCurrentMapLaunchedByState = EMapNone;
     }
 
 // --------------------------------------------------------------------------
@@ -120,6 +126,14 @@
 //
 CPmapCmd::~CPmapCmd()
     {
+    Cancel();
+    if(iMapView)
+        {
+        iMapView->ResetLandmarksToShow();
+        delete iMapView;
+        iMapView = NULL;    
+        }
+    ReleaseLandmarkResources();
     if( iUiControl )
 	    {
 	    iUiControl->RegisterCommand( NULL );
@@ -230,14 +244,17 @@
     return ret;
     }
 
+void CPmapCmd::ExecuteLD()
+    {
+    ExecuteL();
+    }
+
 // --------------------------------------------------------------------------
 // CPmapCmd::ExecuteLD
 // --------------------------------------------------------------------------
 //
-void CPmapCmd::ExecuteLD()
+void CPmapCmd::ExecuteL()
     {
-    CleanupStack::PushL( this );
-
     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
         ("CPmapCmd::ExecuteLD"));
 
@@ -258,17 +275,7 @@
 			else
 				{
 				CleanupStack::PopAndDestroy( prompt );
-				FinishProcess();
-				
-				if( !iUiControl )
-					{
-					CleanupStack::PopAndDestroy( this );
-					}
-				else
-					{
-					CleanupStack::Pop( this );
-					}
-				
+				FinishProcess();				
 				PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
 					("CPmapCmd::ExecuteLD end"));
 				
@@ -309,24 +316,17 @@
 	    if( iCommandId == EPbk2ExtensionShowOnMap )
     		{
     		EditorShowOnMapsL(addressType);
+    		return; // as the asynchronous request is processed next part will be executed inside RunL of this class. 
     		}
     	else if( iCommandId == EPbk2ExtensionAssignFromMap )
     		{
     		EditorAssignFromMapsL(addressType);
+    	    return; // as the asynchronous request is processed next part will be executed inside RunL of this class.
     		}
     	}
     
     FinishProcess();
 
-    if( !iUiControl )
-    	{
-    	CleanupStack::PopAndDestroy( this );
-    	}
-    else
-    	{
-    	CleanupStack::Pop( this );
-    	}
-    
     PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
         ("CPmapCmd::ExecuteLD end"));
     }
@@ -568,9 +568,8 @@
 //
 void CPmapCmd::EditorShowOnMapsL( TVPbkFieldTypeParameter aAddressType )
     {
-    CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider );
-    CleanupStack::PushL( mapview );
-
+    iAddressType = aAddressType;
+    
     RPointerArray<CPosLandmark> landmarks;
     CleanupClosePushL( landmarks );
 
@@ -586,198 +585,38 @@
         || landmark->GetPosition( locality ) == KErrNone )
         {
         landmarks.AppendL( landmark );
-        mapview->AddLandmarksToShowL( landmarks );
         }
 
     if ( landmark->GetPosition( locality ) == KErrNone )
         {
-        mapview->ShowMapL();
+        if(iMapView)
+            {
+            delete iMapView;
+            iMapView = NULL;
+            }
+        iMapView = CMnMapView::NewL( *iMapViewProvider );
+        iMapView->AddLandmarksToShowL( landmarks );
+        iMapView->ShowMapL();
         CleanupStack::PopAndDestroy( landmark );
         CleanupStack::PopAndDestroy( &landmarks );
-        CleanupStack::PopAndDestroy( mapview );
+        delete iMapView;
+        iMapView = NULL;
+        FinishProcess();
         }
     else
         {
-        TRequestStatus status;
-        mapview->SelectFromMapL( status );
-        User::WaitForRequest( status );
-        TBool update = EFalse;
-        TBool geocoordsExist = EFalse;
-
-        CPosLandmark* result = NULL;
-        if ( status.Int() == KErrNone )
+        if(iMapView)
             {
-            result = mapview->RetrieveSelectionResultL();
-            if ( result->GetPosition( locality ) == KErrNone )
-                {
-                geocoordsExist = ETrue;
-                }
-            if ( result->IsPositionFieldAvailable( EPositionFieldStreet )
-                || result->IsPositionFieldAvailable( EPositionFieldCity )
-                || result->IsPositionFieldAvailable( EPositionFieldCountry ) )
-                {
-                update = ETrue;
-                }
-
+            delete iMapView;
+            iMapView = NULL;
             }
+        iMapView = CMnMapView::NewChainedL( *iMapViewProvider );
+        iMapView->AddLandmarksToShowL( landmarks );
+        iMapView->SelectFromMapL( iStatus );
+        iCurrentMapLaunchedByState = EMapShowOnMaps;
+        SetActive();
         CleanupStack::PopAndDestroy( landmark );
         CleanupStack::PopAndDestroy( &landmarks );
-        CleanupStack::PopAndDestroy( mapview );
-        if ( result )
-            {
-            CleanupStack::PushL( result );
-            }
-
-        if ( update )
-            {
-
-            const TInt KGranularity = 4;
-            CDesCArrayFlat* arrFields = new (ELeave) CDesCArrayFlat(
-                KGranularity );
-            CleanupStack::PushL( arrFields );
-            HBufC* addrLebel = NULL;
-
-            switch ( aAddressType )
-                {
-                case EVPbkVersitParamPREF:
-                    addrLebel = StringLoader::LoadLC(
-                        R_QTN_PHOB_HEADER_ADDRESS );
-                    break;
-                case EVPbkVersitParamHOME:
-                    addrLebel = StringLoader::LoadLC(
-                        R_QTN_PHOB_HEADER_ADDRESS_HOME );
-                    break;
-                case EVPbkVersitParamWORK:
-                    addrLebel = StringLoader::LoadLC(
-                        R_QTN_PHOB_HEADER_ADDRESS_WORK );
-                    break;
-                default:
-                    User::Leave( KErrArgument );
-                }
-            arrFields->AppendL( addrLebel->Des() );
-            _LIT(KComma, ",");
-            _LIT(KSpace, " ");
-            TInt lenght = 0;
-            TPtrC street;
-            if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) )
-                {
-                result->GetPositionField( EPositionFieldStreet, street );
-                lenght += street.Length();
-                }
-
-            TPtrC city;
-            if ( result->IsPositionFieldAvailable( EPositionFieldCity ) )
-                {
-                result->GetPositionField( EPositionFieldCity, city );
-                if ( lenght )
-                    {
-                    lenght += KComma().Length() + KSpace().Length();
-                    }
-                lenght += city.Length();
-                }
-
-            TPtrC country;
-            if ( result->IsPositionFieldAvailable( EPositionFieldCountry ) )
-                {
-                result->GetPositionField( EPositionFieldCountry, country );
-                if ( lenght )
-                    {
-                    lenght += KComma().Length() + KSpace().Length();
-                    }
-                lenght += country.Length();
-                }
-
-            RBuf newAddr;
-            newAddr.CreateL( lenght );
-            CleanupClosePushL( newAddr );
-
-            if ( street.Length() )
-                {
-                newAddr += street;
-                }
-
-            if ( city.Length() )
-                {
-                if ( newAddr.Length() > 0 )
-                    {
-                    newAddr += KComma();
-                    newAddr += KSpace();
-                    }
-                newAddr += city;
-                }
-
-            if ( country.Length() )
-                {
-                if ( newAddr.Length() > 0 )
-                    {
-                    newAddr += KComma();
-                    newAddr += KSpace();
-                    }
-                newAddr += country;
-                }
-
-            arrFields->AppendL( newAddr );
-            HBufC* prompt = StringLoader::LoadLC(
-                R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields );
-            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-            if ( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) )
-                {
-                update = EFalse;
-                }
-            CleanupStack::PopAndDestroy( prompt );
-            CleanupStack::PopAndDestroy( &newAddr );
-            CleanupStack::PopAndDestroy( addrLebel );
-            CleanupStack::PopAndDestroy( arrFields );
-
-            }
-        if ( update )
-            {
-            if ( !iEditorControl )
-                {
-                iContact->LockL( *this );
-                CActiveScheduler::Start();
-                }
-            UpdateFieldL( *result, EPositionFieldCountry,
-                EVPbkVersitSubFieldCountry, aAddressType );
-            UpdateFieldL( *result, EPositionFieldCity,
-                EVPbkVersitSubFieldLocality, aAddressType );
-            UpdateFieldL( *result, EPositionFieldStreet,
-                EVPbkVersitSubFieldStreet, aAddressType );
-            UpdateFieldL( *result, EPositionFieldPostalCode,
-                EVPbkVersitSubFieldPostalCode, aAddressType );
-            UpdateFieldL( *result, EPositionFieldLocality,
-                EVPbkVersitSubFieldRegion, aAddressType );
-            UpdateFieldL( *result, EPositionFieldNone,
-                EVPbkVersitSubFieldPostOfficeAddress, aAddressType );
-            UpdateFieldL( *result, EPositionFieldNone,
-                EVPbkVersitSubFieldExtendedAddress, aAddressType );
-
-            if ( geocoordsExist )
-                {
-                UpdateCoordsL( locality, aAddressType );
-                }
-            if ( !iEditorControl )
-                {
-                iContact->CommitL( *this );
-                CActiveScheduler::Start();
-                }
-            if ( ControlExtension() )
-                {
-                ControlExtension()->UpdateControlsL();
-                }
-
-            HBufC* text = StringLoader::LoadLC(
-                R_QTN_PHOB_NOTE_ADDRESS_UPDATED );
-            CAknInformationNote* note = new (ELeave) CAknInformationNote(
-                ETrue );
-            note->ExecuteLD( *text );
-            CleanupStack::PopAndDestroy( text );
-            }
-
-        if ( result )
-            {
-            CleanupStack::PopAndDestroy( result );
-            }
         }
     }
 
@@ -1028,9 +867,15 @@
 //
 void CPmapCmd::EditorAssignFromMapsL(TVPbkFieldTypeParameter aAddressType)
 	{
-   	CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider );
-   	CleanupStack::PushL( mapview );
-   	
+    if(iMapView)
+        {
+        delete iMapView;
+        iMapView = NULL;
+        }
+    
+    iMapView = CMnMapView::NewChainedL( *iMapViewProvider );
+    iAddressType = aAddressType;
+    
     RPointerArray<CPosLandmark> landmarks;
     CleanupClosePushL( landmarks );
 
@@ -1042,195 +887,19 @@
 		FillLandmarkL( *landmark, aAddressType );
 		}
 	TLocality locality;
-	TBool noAddress = ETrue;
+	iNoAddress = ETrue;
 	if( landmark->NumOfAvailablePositionFields() > 0 || landmark->GetPosition( locality ) == KErrNone )
 		{
 		landmarks.AppendL( landmark );
-		mapview->AddLandmarksToShowL( landmarks );
-		noAddress = EFalse;
+		iMapView->AddLandmarksToShowL( landmarks );
+		iNoAddress = EFalse;
 		}
 
-    TRequestStatus status;
-	mapview->SelectFromMapL( status );
-	User::WaitForRequest( status );
-	
-	TBool update = EFalse;
-	TBool geocoordsExist = EFalse;
-	
-	CPosLandmark* result = NULL;
-	if ( status.Int() == KErrNone )
-	    {
-	    result = mapview->RetrieveSelectionResultL();
-	    if ( result->GetPosition( locality ) == KErrNone )
-			{
-			geocoordsExist = ETrue;
-			}     
-          
-	    if( result->IsPositionFieldAvailable( EPositionFieldStreet ) || 
-			result->IsPositionFieldAvailable( EPositionFieldCity ) ||
-			result->IsPositionFieldAvailable( EPositionFieldCountry ) )
-			{
-			update= ETrue;
-			}
-		
-	    }
-    CleanupStack::PopAndDestroy( landmark );
-	CleanupStack::PopAndDestroy( &landmarks );
-	CleanupStack::PopAndDestroy( mapview );
-	if( result )
-		{
-		CleanupStack::PushL( result );
-		}
-	
-	if( update )
-		{
-		if( iAddressUpdatePrompt && !noAddress )
-			{
-			const TInt KGranularity = 4; 
-			CDesCArrayFlat* arrFields = new ( ELeave ) CDesCArrayFlat
-					( KGranularity );
-			CleanupStack::PushL(arrFields);
-			
-			HBufC* addrLebel = NULL;
-			
-			switch( aAddressType )
-				{
-				case EVPbkVersitParamPREF:
-					addrLebel = StringLoader::LoadLC(R_QTN_PHOB_HEADER_ADDRESS );
-					break;
-				case EVPbkVersitParamHOME:
-					addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_HOME );
-					break;
-				case EVPbkVersitParamWORK:
-					addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_WORK );
-					break;
-				default:
-					User::Leave(KErrArgument);
-				}
-			arrFields->AppendL( addrLebel->Des() );
-			
-			_LIT(KComma, ",");
-			_LIT(KSpace, " ");
-			
-			TInt lenght = 0; 
-			TPtrC street;
-			if( result->IsPositionFieldAvailable( EPositionFieldStreet ) )
-				{
-				result->GetPositionField( EPositionFieldStreet, street );
-				lenght += street.Length();
-				}
-			
-			TPtrC city;
-			if( result->IsPositionFieldAvailable( EPositionFieldCity ) )
-				{
-				result->GetPositionField( EPositionFieldCity, city );
-				if( lenght )
-					{
-					lenght += KComma().Length() + KSpace().Length();
-					}
-				lenght += city.Length();
-				}	
-			
-			TPtrC country;
-			if( result->IsPositionFieldAvailable( EPositionFieldCountry ) )
-				{
-				result->GetPositionField( EPositionFieldCountry, country );
-				if( lenght )
-					{
-					lenght += KComma().Length() + KSpace().Length();
-					}
-				lenght += country.Length();
-				}	
-			
-			RBuf newAddr;
-			newAddr.CreateL( lenght );
-			CleanupClosePushL( newAddr );
-			
-			if( street.Length() )
-				{
-				newAddr += street;
-				}
-			
-			if( city.Length() )
-				{
-				if( newAddr.Length() > 0 )
-					{
-					newAddr += KComma();
-					newAddr += KSpace();
-					}
-				newAddr += city;
-				}
-			
-			if( country.Length() )
-				{
-				if( newAddr.Length() > 0 )
-					{
-					newAddr += KComma();
-					newAddr += KSpace();
-					}
-				newAddr += country;
-				}
-	
-			arrFields->AppendL( newAddr );
-			HBufC* prompt = StringLoader::LoadLC( R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields );
-			CAknQueryDialog* dlg = CAknQueryDialog::NewL();
-			if( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) )
-				{
-				update = EFalse;
-				}
-			CleanupStack::PopAndDestroy( prompt );
-			CleanupStack::PopAndDestroy( &newAddr );
-			CleanupStack::PopAndDestroy( addrLebel );
-			CleanupStack::PopAndDestroy( arrFields );
-			}
-			
-		if( update )
-			{
-			if ( !iEditorControl )
-				{
-				iContact->LockL( *this );
-				CActiveScheduler::Start();
-				}
-			UpdateFieldL( *result, EPositionFieldCountry, 
-							EVPbkVersitSubFieldCountry, aAddressType );
-			UpdateFieldL( *result, EPositionFieldCity, 
-							EVPbkVersitSubFieldLocality, aAddressType );
-			UpdateFieldL( *result, EPositionFieldStreet, 
-							EVPbkVersitSubFieldStreet, aAddressType );
-			UpdateFieldL( *result, EPositionFieldPostalCode, 
-							EVPbkVersitSubFieldPostalCode, aAddressType );
-			UpdateFieldL( *result, EPositionFieldLocality, 
-							EVPbkVersitSubFieldRegion, aAddressType );
-			UpdateFieldL( *result, EPositionFieldNone, 
-							EVPbkVersitSubFieldPostOfficeAddress, aAddressType );
-			UpdateFieldL( *result, EPositionFieldNone, 
-							EVPbkVersitSubFieldExtendedAddress, aAddressType );
-			
-			if( geocoordsExist )
-				{
-				UpdateCoordsL( locality, aAddressType );
-				}
-			if ( !iEditorControl )
-				{
-				iContact->CommitL( *this );
-				CActiveScheduler::Start();
-				}
-			if( ControlExtension() )
-				{
-				ControlExtension()->UpdateControlsL();
-				}
-			
-			HBufC* text = StringLoader::LoadLC( R_QTN_PHOB_NOTE_ADDRESS_UPDATED );
-			CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
-			note->ExecuteLD( *text );
-			CleanupStack::PopAndDestroy( text );
-			}
-		}
-	
-	if( result )
-		{
-		CleanupStack::PopAndDestroy( result );
-		}
+	iMapView->SelectFromMapL( iStatus );
+	iCurrentMapLaunchedByState = EMapAssignFromMaps;
+	SetActive();
+	CleanupStack::PopAndDestroy( landmark );
+    CleanupStack::PopAndDestroy( &landmarks );
 	}
 
 // --------------------------------------------------------------------------
@@ -1539,6 +1208,383 @@
     }
 
 // --------------------------------------------------------------------------
+// CPmapCmd::HandleSelectiOnAssignFromMapsL
+// --------------------------------------------------------------------------
+//
+void CPmapCmd::HandleSelectiOnAssignFromMapsL()
+    {
+    TBool update = EFalse;
+    TBool geocoordsExist = EFalse;
+    
+    TLocality locality;
+    CPosLandmark* result = NULL;
+    TInt currentstatus = iStatus.Int();
+    if ( iStatus.Int() == KErrNone && iMapView)
+        {
+        result = iMapView->RetrieveSelectionResultL();
+        // Get the location name if available
+        //-----------------Emulator Hack-------------------------------
+     // result->SetLandmarkNameL(_L("Jupiter Tech Park"));
+//      result->SetPositionFieldL(EPositionFieldCity, _L("Bangalore"));
+//      result->SetPositionFieldL(EPositionFieldCountry, _L("India"));
+        //-------------------------------------------------------------
+        if(result->GetPosition( locality ) == KErrNone )
+            {
+            geocoordsExist = ETrue;
+            }     
+          
+        if( result->IsPositionFieldAvailable( EPositionFieldStreet ) || 
+            result->IsPositionFieldAvailable( EPositionFieldCity ) ||
+            result->IsPositionFieldAvailable( EPositionFieldCountry ) )
+            {
+            update= ETrue;
+            }
+        }
+    delete iMapView;
+    iMapView = NULL;
+    if( result )
+        {
+        CleanupStack::PushL( result );
+        }
+    
+    if( update )
+        {
+        if( iAddressUpdatePrompt && !iNoAddress )
+            {
+            const TInt KGranularity = 4; 
+            CDesCArrayFlat* arrFields = new ( ELeave ) CDesCArrayFlat
+                    ( KGranularity );
+            CleanupStack::PushL(arrFields);
+            
+            HBufC* addrLebel = NULL;
+            
+            switch( iAddressType )
+                {
+                case EVPbkVersitParamPREF:
+                    addrLebel = StringLoader::LoadLC(R_QTN_PHOB_HEADER_ADDRESS );
+                    break;
+                case EVPbkVersitParamHOME:
+                    addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_HOME );
+                    break;
+                case EVPbkVersitParamWORK:
+                    addrLebel = StringLoader::LoadLC( R_QTN_PHOB_HEADER_ADDRESS_WORK );
+                    break;
+                default:
+                    User::Leave(KErrArgument);
+                }
+            arrFields->AppendL( addrLebel->Des() );
+            
+            _LIT(KComma, ",");
+            _LIT(KSpace, " ");
+            
+            TInt lenght = 0; 
+            TPtrC street;
+            if( result->IsPositionFieldAvailable( EPositionFieldStreet ) )
+                {
+                result->GetPositionField( EPositionFieldStreet, street );
+                lenght += street.Length();
+                }
+            
+            TPtrC city;
+            if( result->IsPositionFieldAvailable( EPositionFieldCity ) )
+                {
+                result->GetPositionField( EPositionFieldCity, city );
+                if( lenght )
+                    {
+                    lenght += KComma().Length() + KSpace().Length();
+                    }
+                lenght += city.Length();
+                }   
+            
+            TPtrC country;
+            if( result->IsPositionFieldAvailable( EPositionFieldCountry ) )
+                {
+                result->GetPositionField( EPositionFieldCountry, country );
+                if( lenght )
+                    {
+                    lenght += KComma().Length() + KSpace().Length();
+                    }
+                lenght += country.Length();
+                }   
+            
+            RBuf newAddr;
+            newAddr.CreateL( lenght );
+            CleanupClosePushL( newAddr );
+            
+            if( street.Length() )
+                {
+                newAddr += street;
+                }
+            
+            if( city.Length() )
+                {
+                if( newAddr.Length() > 0 )
+                    {
+                    newAddr += KComma();
+                    newAddr += KSpace();
+                    }
+                newAddr += city;
+                }
+            
+            if( country.Length() )
+                {
+                if( newAddr.Length() > 0 )
+                    {
+                    newAddr += KComma();
+                    newAddr += KSpace();
+                    }
+                newAddr += country;
+                }
+    
+            arrFields->AppendL( newAddr );
+            HBufC* prompt = StringLoader::LoadLC( R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields );
+            CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+            if( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) )
+                {
+                update = EFalse;
+                }
+            CleanupStack::PopAndDestroy( prompt );
+            CleanupStack::PopAndDestroy( &newAddr );
+            CleanupStack::PopAndDestroy( addrLebel );
+            CleanupStack::PopAndDestroy( arrFields );
+            }
+            
+        if( update )
+            {
+            if ( !iEditorControl )
+                {
+                iContact->LockL( *this );
+                CActiveScheduler::Start();
+                }
+            UpdateFieldL( *result, EPositionFieldCountry, 
+                            EVPbkVersitSubFieldCountry, iAddressType );
+            UpdateFieldL( *result, EPositionFieldCity, 
+                            EVPbkVersitSubFieldLocality, iAddressType );
+            UpdateFieldL( *result, EPositionFieldStreet, 
+                            EVPbkVersitSubFieldStreet, iAddressType );
+            UpdateFieldL( *result, EPositionFieldPostalCode, 
+                            EVPbkVersitSubFieldPostalCode, iAddressType );
+            UpdateFieldL( *result, EPositionFieldLocality, 
+                            EVPbkVersitSubFieldRegion, iAddressType );
+            UpdateFieldL( *result, EPositionFieldNone, 
+                            EVPbkVersitSubFieldPostOfficeAddress, iAddressType );
+            UpdateFieldL( *result, EPositionFieldNone, 
+                            EVPbkVersitSubFieldExtendedAddress, iAddressType );
+            
+            if( geocoordsExist )
+                {
+                UpdateCoordsL( locality, iAddressType );
+                }
+            if ( !iEditorControl )
+                {
+                iContact->CommitL( *this );
+                CActiveScheduler::Start();
+                }
+            if( ControlExtension() )
+                {
+                ControlExtension()->UpdateControlsL();
+                }
+            
+            HBufC* text = StringLoader::LoadLC( R_QTN_PHOB_NOTE_ADDRESS_UPDATED );
+            CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );
+            note->ExecuteLD( *text );
+            CleanupStack::PopAndDestroy( text );
+            }
+        }
+    
+    if( result )
+        {
+        CleanupStack::PopAndDestroy( result );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPmapCmd::HandleSelectiOnAssignFromMapsL
+// --------------------------------------------------------------------------
+//
+void CPmapCmd::HandleSelectiOnShowOnMapsL()
+    {
+    TBool update = EFalse;
+    TBool geocoordsExist = EFalse;
+
+    TLocality locality;
+    CPosLandmark* result = NULL;
+    if ( iStatus.Int() == KErrNone && iMapView)
+        {
+        result = iMapView->RetrieveSelectionResultL();
+        if ( result->GetPosition( locality ) == KErrNone )
+            {
+            geocoordsExist = ETrue;
+            }
+        if ( result->IsPositionFieldAvailable( EPositionFieldStreet )
+            || result->IsPositionFieldAvailable( EPositionFieldCity )
+            || result->IsPositionFieldAvailable( EPositionFieldCountry ) )
+            {
+            update = ETrue;
+            }
+
+        }
+   
+    delete iMapView;
+    iMapView = NULL;
+    if ( result )
+        {
+        CleanupStack::PushL( result );
+        }
+
+    if ( update )
+        {
+
+        const TInt KGranularity = 4;
+        CDesCArrayFlat* arrFields = new (ELeave) CDesCArrayFlat(
+            KGranularity );
+        CleanupStack::PushL( arrFields );
+        HBufC* addrLebel = NULL;
+
+        switch ( iAddressType )
+            {
+            case EVPbkVersitParamPREF:
+                addrLebel = StringLoader::LoadLC(
+                    R_QTN_PHOB_HEADER_ADDRESS );
+                break;
+            case EVPbkVersitParamHOME:
+                addrLebel = StringLoader::LoadLC(
+                    R_QTN_PHOB_HEADER_ADDRESS_HOME );
+                break;
+            case EVPbkVersitParamWORK:
+                addrLebel = StringLoader::LoadLC(
+                    R_QTN_PHOB_HEADER_ADDRESS_WORK );
+                break;
+            default:
+                User::Leave( KErrArgument );
+            }
+        arrFields->AppendL( addrLebel->Des() );
+        _LIT(KComma, ",");
+        _LIT(KSpace, " ");
+        TInt lenght = 0;
+        TPtrC street;
+        if ( result->IsPositionFieldAvailable( EPositionFieldStreet ) )
+            {
+            result->GetPositionField( EPositionFieldStreet, street );
+            lenght += street.Length();
+            }
+
+        TPtrC city;
+        if ( result->IsPositionFieldAvailable( EPositionFieldCity ) )
+            {
+            result->GetPositionField( EPositionFieldCity, city );
+            if ( lenght )
+                {
+                lenght += KComma().Length() + KSpace().Length();
+                }
+            lenght += city.Length();
+            }
+
+        TPtrC country;
+        if ( result->IsPositionFieldAvailable( EPositionFieldCountry ) )
+            {
+            result->GetPositionField( EPositionFieldCountry, country );
+            if ( lenght )
+                {
+                lenght += KComma().Length() + KSpace().Length();
+                }
+            lenght += country.Length();
+            }
+
+        RBuf newAddr;
+        newAddr.CreateL( lenght );
+        CleanupClosePushL( newAddr );
+
+        if ( street.Length() )
+            {
+            newAddr += street;
+            }
+
+        if ( city.Length() )
+            {
+            if ( newAddr.Length() > 0 )
+                {
+                newAddr += KComma();
+                newAddr += KSpace();
+                }
+            newAddr += city;
+            }
+
+        if ( country.Length() )
+            {
+            if ( newAddr.Length() > 0 )
+                {
+                newAddr += KComma();
+                newAddr += KSpace();
+                }
+            newAddr += country;
+            }
+
+        arrFields->AppendL( newAddr );
+        HBufC* prompt = StringLoader::LoadLC(
+            R_QTN_PHOB_CONFIRM_CHANGE_ADDRESS, *arrFields );
+        CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+        if ( !dlg->ExecuteLD( R_PBK2_GENERAL_CONFIRMATION_QUERY, *prompt ) )
+            {
+            update = EFalse;
+            }
+        CleanupStack::PopAndDestroy( prompt );
+        CleanupStack::PopAndDestroy( &newAddr );
+        CleanupStack::PopAndDestroy( addrLebel );
+        CleanupStack::PopAndDestroy( arrFields );
+
+        }
+    if ( update )
+        {
+        if ( !iEditorControl )
+            {
+            iContact->LockL( *this );
+            CActiveScheduler::Start();
+            }
+        UpdateFieldL( *result, EPositionFieldCountry,
+            EVPbkVersitSubFieldCountry, iAddressType );
+        UpdateFieldL( *result, EPositionFieldCity,
+            EVPbkVersitSubFieldLocality, iAddressType );
+        UpdateFieldL( *result, EPositionFieldStreet,
+            EVPbkVersitSubFieldStreet, iAddressType );
+        UpdateFieldL( *result, EPositionFieldPostalCode,
+            EVPbkVersitSubFieldPostalCode, iAddressType );
+        UpdateFieldL( *result, EPositionFieldLocality,
+            EVPbkVersitSubFieldRegion, iAddressType );
+        UpdateFieldL( *result, EPositionFieldNone,
+            EVPbkVersitSubFieldPostOfficeAddress, iAddressType );
+        UpdateFieldL( *result, EPositionFieldNone,
+            EVPbkVersitSubFieldExtendedAddress, iAddressType );
+
+        if ( geocoordsExist )
+            {
+            UpdateCoordsL( locality, iAddressType );
+            }
+        if ( !iEditorControl )
+            {
+            iContact->CommitL( *this );
+            CActiveScheduler::Start();
+            }
+        if ( ControlExtension() )
+            {
+            ControlExtension()->UpdateControlsL();
+            }
+
+        HBufC* text = StringLoader::LoadLC(
+            R_QTN_PHOB_NOTE_ADDRESS_UPDATED );
+        CAknInformationNote* note = new (ELeave) CAknInformationNote(
+            ETrue );
+        note->ExecuteLD( *text );
+        CleanupStack::PopAndDestroy( text );
+        }
+
+    if ( result )
+        {
+        CleanupStack::PopAndDestroy( result );
+        }
+    }
+
+// --------------------------------------------------------------------------
 // CPmapCmd::ContactOperationFailed
 // --------------------------------------------------------------------------
 //
@@ -1548,4 +1594,85 @@
    	CActiveScheduler::Stop();
     }
 
+// ----------------------------------------------------------------------------
+// CPmapCmd::RunL
+// RunL method to handle the user selection
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//    
+void CPmapCmd::RunL()
+    {
+    // request is completed, inform observer
+    TInt maperror = iStatus.Int();
+    if(iStatus.Int() == KErrNone)
+        {
+        switch(iCurrentMapLaunchedByState)
+            {
+            case EMapAssignFromMaps:
+                {
+                HandleSelectiOnAssignFromMapsL();
+                }
+                break;
+            case EMapShowOnMaps:
+                {
+                HandleSelectiOnShowOnMapsL();
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    FinishProcess();
+
+    if(!iUiControl)
+       {
+     //  delete this;
+       }
+    iCurrentMapLaunchedByState = EMapNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CPmapCmd::RunError
+// Function to handle any errors in async request
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//    
+TInt CPmapCmd::RunError( TInt /*aError*/ )
+    {
+    Reset();
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CPmapCmd::DoCancel
+// Cancel method to handle the user selection
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CPmapCmd::DoCancel()
+    {
+    if ( IsActive() && iMapView )
+        {
+        iMapView->Cancel();
+        }
+    Reset();
+    }
+
+// ----------------------------------------------------------------------------
+// CPmapCmd::Reset
+// Disconnects from provider, when operation is completed
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CPmapCmd::Reset()
+    {
+    if(iMapView)
+        {
+        iMapView->ResetLandmarksToShow();
+        delete iMapView;
+        iMapView = NULL;    
+        }
+    ReleaseLandmarkResources();
+    }
+
 // End of File
--- a/phonebookui/Phonebook2/MapExtension/src/cpmapcontacteditorextension.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcontacteditorextension.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -101,6 +101,11 @@
 //
 CPmapContactEditorExtension::~CPmapContactEditorExtension()
     {
+    if(iCmd)
+        {
+        delete iCmd;
+        iCmd = NULL;
+        }
     }
 
 // --------------------------------------------------------------------------
@@ -170,16 +175,26 @@
         {
         case EPbk2ExtensionShowOnMap:
         	{
-        	MPbk2Command* cmd = CPmapCmd::NewL( iEditorControl, iContact, aCommandId );
-        	// Execute the command
-        	cmd->ExecuteLD();
+        	if(iCmd)
+        	    {
+                delete iCmd;
+                iCmd = NULL;
+        	    }
+        	iCmd = CPmapCmd::NewL( iEditorControl, iContact, aCommandId );
+        	// Execute the command 
+        	iCmd->ExecuteLD();
             return ETrue;
             }
         case EPbk2ExtensionAssignFromMap:
         	{
-        	MPbk2Command* cmd = CPmapCmd::NewL( iEditorControl, iContact, aCommandId );
+        	if(iCmd)
+                {
+                delete iCmd;
+                iCmd = NULL;
+                }
+        	iCmd = CPmapCmd::NewL( iEditorControl, iContact, aCommandId );
         	// Execute the command
-        	cmd->ExecuteLD();
+        	iCmd->ExecuteLD();
             return ETrue;
             }
         default:
--- a/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -41,6 +41,7 @@
 #include <CPbk2StoreConfiguration.h>
 #include <TVPbkContactStoreUriPtr.h>
 #include <CPbk2ApplicationServices.h>
+#include <Phonebook2PrivateCRKeys.h>
 
 #include <MPbk2ContactUiControl.h>
 #include <MPbk2ViewExplorer.h>
@@ -79,6 +80,7 @@
 #include <AiwCommon.hrh>
 #include <avkon.hrh>
 #include <avkon.rsg>
+#include <centralrepository.h>
 
 /// Unnamed namespace for local definitions
 namespace {
@@ -155,10 +157,28 @@
             {
             User::Leave( KErrNotReady );
             }
+        // Check status message variation
+        TInt showStatusInNamesList = 0;
+        CRepository* cenrep =
+            CRepository::NewLC( TUid::Uid( KCRUidPhonebook ) );
+        User::LeaveIfError(
+            cenrep->Get( KPhonebookStatusMessageVisibility, 
+                    showStatusInNamesList ) );
+        CleanupStack::PopAndDestroy( cenrep );
+        
+        // By default status is not shown in names list
+        TInt32 spbContentFlags = CSpbContentProvider::EPhoneNumber;
+        
+        if( showStatusInNamesList )
+            {
+            spbContentFlags = (CSpbContentProvider::EStatusMessage | 
+                    CSpbContentProvider::EPhoneNumber);
+            }
+        
         CPbk2StoreManager& storeManager = 
             static_cast<MPbk2ApplicationServices2*>(ext)->StoreManager();
-        iContentProvider = CSpbContentProvider::NewL( iAppServices->ContactManager(), storeManager,  
-            CSpbContentProvider::EStatusMessage | CSpbContentProvider::EPhoneNumber );
+        iContentProvider = CSpbContentProvider::NewL( 
+                iAppServices->ContactManager(), storeManager, spbContentFlags );
         }
 	return *iContentProvider;
 	}
--- a/phonebookui/Phonebook2/Presentation/src/CPbk2DuplicateContactFinder.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2DuplicateContactFinder.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -488,11 +488,13 @@
     for ( TInt i = 0; i < fieldCount; ++i )
         {
         const MVPbkBaseContactField& field = fieldSet.FieldAt(i);
-        TInt fieldTypeId = field.BestMatchingFieldType()->FieldTypeResId();
-        
-        if ( fieldTypeId == aFieldId )
+        if ( field.BestMatchingFieldType() )
             {
-            return &field;
+            TInt fieldTypeId = field.BestMatchingFieldType()->FieldTypeResId();
+            if ( fieldTypeId == aFieldId )
+                {
+                return &field;
+                }
             }
         }
     return NULL;
--- a/phonebookui/Phonebook2/UIControls/inc/CPbk2AdaptiveSearchGridFiller.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2AdaptiveSearchGridFiller.h	Mon Jun 21 15:24:27 2010 +0300
@@ -23,6 +23,7 @@
 #include <e32base.h>
 #include <aknsfld.h>
 #include <MPsResultsObserver.h>
+#include "MVPbkViewContact.h"
 
 // FORWARD DECLARATIONS
 class CAknSearchField;
@@ -137,6 +138,8 @@
         // Used to judge if this contact's title include drgraphs
         TBool IsDigraphContactsTitleL(const TDesC& aContactTitle);
         TBool GridFromPsEngineL( const MVPbkContactViewBase& aView );
+        // Check whether the title is empty or not.
+        TBool IsActualTitleEmpty( const MVPbkViewContact& aContact );
     private: // Data
     	
 		/// Own: Containts adaptive search grid.
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -23,6 +23,11 @@
 #include "MPbk2ContactNameFormatter.h"
 #include "MPbk2FilteredViewStack.h"
 
+#include <MVPbkBaseContactFieldCollection.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkBaseContactField.h>
+
+
 #include <MPbk2ContactViewSupplier.h>
 #include <MPbk2ApplicationServices.h>
 #include <MPbk2AppUi.h>
@@ -41,6 +46,15 @@
             MPbk2ContactNameFormatter::EReplaceNonGraphicChars |
             MPbk2ContactNameFormatter::EDisableCompanyNameSeparator;
 
+namespace {
+enum TNameOrder
+    {
+    ETopContactOrderNumber = 0,     //TC control data, not shown
+    ENameFirstPart,                 //Contact name data
+    ENameSecondPart,                //Contact name data
+    ENameCompanyPart                //to support Company name
+    };
+} // namespace
 
 NONSHARABLE_CLASS(CPbk2AdaptiveGrid) : public CBase
 	{
@@ -249,6 +263,14 @@
         else if ( titleLength )
             {
             title = iNameFormatter.GetContactTitleL( contact.Fields(), KContactFormattingFlags );
+            
+            // In FDN, the number will be displayed in the list if the contact is no name.
+            // If it is, set the search string as NULL.
+            if ( IsActualTitleEmpty( contact ) )    
+                {
+                delete title;
+                title = NULL;
+            	}
             }
 		
 		if ( !title )
@@ -750,4 +772,39 @@
         return EFalse;
         }
     }
+
+TBool CPbk2AdaptiveSearchGridFiller::IsActualTitleEmpty( const MVPbkViewContact& aContact )
+    {
+    TBool result = ETrue;
+    const TInt fieldCount = aContact.Fields().FieldCount();
+    for ( TInt i = ENameFirstPart; i <= ENameSecondPart && i < fieldCount; ++i)
+        {     
+        const MVPbkBaseContactField& field = aContact.Fields().FieldAt( i );
+        if ( iNameFormatter.IsTitleField( field ) )
+            {
+            const MVPbkContactFieldData& fieldData = field.FieldData();
+            if ( fieldData.DataType() == EVPbkFieldStorageTypeText )
+                {
+                const TDesC& fieldText = MVPbkContactFieldTextData::Cast( fieldData ).Text();
+                TInt length = fieldText.Length();
+                    
+                if ( length > 0 )
+                    {
+                    TInt firstNonSpaceChar = 0;
+                    while ( firstNonSpaceChar < length 
+                        && TChar( fieldText[firstNonSpaceChar] ).IsSpace() )
+                        {
+                        ++firstNonSpaceChar;
+                        }
+                    if ( firstNonSpaceChar != length )
+                        {
+                        result = EFalse;
+                        break;
+                        }
+                    }   
+                }
+            }
+        }
+    return result;
+    }
 // End of File
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2FetchDlg.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2FetchDlg.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -717,16 +717,20 @@
 // CPbk2FetchDlg::FetchDlgPageChangedL
 // --------------------------------------------------------------------------
 //
-void CPbk2FetchDlg::FetchDlgPageChangedL( MPbk2FetchDlgPage& /*aPage*/ )
+void CPbk2FetchDlg::FetchDlgPageChangedL( MPbk2FetchDlgPage& aPage )
     {
-    // An view event burst from VPbk results this function being called
-    // several times a row. It is not meaningful to restore selections
-    // every time, but instead wait for a while and restore the selections
-    // after all events have been received. Hence the idle object is used.
     delete iSelectionRestorer;
     iSelectionRestorer = NULL;
-    iSelectionRestorer = CIdle::NewL( CActive::EPriorityIdle );
-    iSelectionRestorer->Start( TCallBack( RestoreSelections, this ));
+
+    if ( aPage.DlgPageReady() )
+        {
+        // An view event burst from VPbk results this function being called
+        // several times a row. It is not meaningful to restore selections
+        // every time, but inste ad wait for a while and restore the selections
+        // after all events have been received. Hence the idle object is used.
+        iSelectionRestorer = CIdle::NewL( CActive::EPriorityIdle );
+        iSelectionRestorer->Start( TCallBack( RestoreSelections, this ));
+        }
     }
 
 // --------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsDlg.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2MemoryEntryDefaultsDlg.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -834,7 +834,7 @@
     // Skip the line if Email field not supported or having no mailbox
     if ( aSelectorID == VPbkFieldTypeSelectorFactory::EEmailEditorSelector )
         {
-        if ( !FeatureManager::FeatureSupported( KFeatureIdEmailUi ) || !HasMailboxAccountsL() )
+        if ( !FeatureManager::FeatureSupported( KFeatureIdEmailUi ) )
         	{
         	ret = EFalse;
         	}
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/data/ccappcommlauncherpluginrsc.rss	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/data/ccappcommlauncherpluginrsc.rss	Mon Jun 21 15:24:27 2010 +0300
@@ -264,6 +264,6 @@
 RESOURCE TBUF r_qtn_phob_popup_incomplete_address         { buf = qtn_phob_popup_incomplete_address; }
 RESOURCE TBUF r_qtn_phob_commlauncher_onelinepreview      { buf = qtn_phob_commlauncher_onelinepreview; }
 RESOURCE TBUF r_qtn_cca_voip_call_with_servicename { buf = qtn_cca_voip_call_single_service; }
-RESOURCE TBUF r_qtn_cca_ftu_discover               { buf = qtn_cca_ftu_discover; }
+RESOURCE TBUF r_qtn_cca_social_networks            { buf = qtn_cca_social_networks; }
 RESOURCE TBUF r_qtn_cca_error_note_maps_not_found  { buf = qtn_cca_error_note_maps_not_found; }
 //End of File
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontainer.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontainer.h	Mon Jun 21 15:24:27 2010 +0300
@@ -18,7 +18,6 @@
 
 #ifndef __CCAPPCOMMALAUNCHERCONTAINER_H
 #define __CCAPPCOMMALAUNCHERCONTAINER_H
-
 // INCLUDES
 #include "ccappcommlauncherheaders.h"
 #include <Pbk2Commands.hrh>
@@ -238,6 +237,11 @@
      * @since S60 v5.0
      */
     void CreateListboxControlL();
+    
+    /**
+     * Creates the status control
+     */
+    void CreateStatusControlL();
 
     /**
      * Updates the number/address popup
@@ -275,11 +279,6 @@
     * availability.
     */
     void DoCheckExtensionFactoryL();
-    
-    /**
-	* Set default status text to CCCAppStatusControl
-	*/
-    void SetDefaultStatusTextL();
 
 private: // Constructors
 
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -85,86 +85,10 @@
     // Create the header
     iHeaderCtrl = CCCAppCommLauncherHeaderControl::NewL( iPlugin );
     iHeaderCtrl->SetContainerWindowL(*this);
-
-    FeatureManager::InitializeLibL();
-    if( FeatureManager::FeatureSupported( KFeatureIdFfContactsSocial ) )
-        {
-        MVPbkContactLink* link = NULL;
-        MVPbkContactLinkArray* contactArray = NULL;
-        TInt isSame = KErrNotFound;
-        
-        iAppServices = CPbk2ApplicationServices::InstanceL();    
-        iProvider = CSpbContentProvider::NewL( iAppServices->ContactManager(), 
-            iAppServices->StoreManager(),
-            CSpbContentProvider::EStatusMessage | CSpbContentProvider::EServiceIcon );
-        
-        HBufC& contactData = iPlugin.AppEngine()->Parameter().ContactDataL();
-        HBufC8* contactData8 = HBufC8::NewLC( contactData.Size() );
-        TPtr8 contactData8Ptr( contactData8->Des() );
-		contactData8Ptr.Copy( contactData.Des() ); 
-        
-        CVPbkContactManager* vPbkContactManager = &iAppServices->ContactManager();
-        
-        if( vPbkContactManager )
-            {
-            contactArray = vPbkContactManager->CreateLinksLC( contactData8Ptr );
-
-           if( contactArray->Count() > 0 )
-                {
-                link = contactArray->At( 0 ).CloneLC();
-                }				
-                            
-            if ( link )
-                {    
-                const MVPbkContactStoreProperties& storeProperties = link->ContactStore().StoreProperties();
-                TVPbkContactStoreUriPtr uri = storeProperties.Uri();
-            
-                isSame = uri.Compare( VPbkContactStoreUris::DefaultCntDbUri(), 
-                            TVPbkContactStoreUriPtr::EContactStoreUriAllComponents );
-                }
-            }
-            
-        if( isSame == 0 )
-            {		
-            iStatusControl = CCCAppStatusControl::NewL( *iProvider, *this );
-            iStatusControl->SetContainerWindowL( *this );                   
-            iStatusControl->MakeVisible( EFalse );
-            iHeaderCtrl->SetStatusButtonVisibility( EFalse );
-            CFbsBitmap* bmp = NULL;
-            CFbsBitmap* bmpMask = NULL;
-
-            AknsUtils::CreateIconL(
-                AknsUtils::SkinInstance(),
-                KAknsIIDQgnPropWmlBmOvi,
-                bmp,
-                bmpMask,
-                KCcaIconDefaultFileName,
-                EMbmPhonebook2eceQgn_prop_wml_bm_ovi,
-                EMbmPhonebook2eceQgn_prop_wml_bm_ovi_mask );    
-        
-            CGulIcon* guiIcon = CGulIcon::NewL( bmp, bmpMask );
-            iStatusControl->SetDefaultStatusIconL( guiIcon );
-            iStatusControl->SetContactLinkL( *link );
-	
-            iFactoryExtensionNotifier = CCCaFactoryExtensionNotifier::NewL();
-            TCallBack callBack( CCCAppCommLauncherContainer::CheckExtensionFactoryL, this );
-            iFactoryExtensionNotifier->ObserveExtensionFactoryL( callBack );
-            }
-        
-        if( link )
-            {
-            CleanupStack::PopAndDestroy(); //link
-            }
-        
-        if( contactArray )
-            {
-            CleanupStack::PopAndDestroy(); // contactArray
-            }
-                        
-        CleanupStack::PopAndDestroy(); // contactData8	
-    } //  KFeatureIdFfContactsSocial	
-    FeatureManager::UnInitializeLib();
-
+    
+    // create status control  
+    CreateStatusControlL();     
+    
     // Get the skin background for the view
     iBackground = CAknsBasicBackgroundControlContext::NewL(
         KAknsIIDQsnBgAreaMain, TRect(0, 0, 0, 0), EFalse);
@@ -198,6 +122,108 @@
     iListBox->ActivateL();
     }
 
+//-----------------------------------------------------------------------------
+// CCCAppCommLauncherContainer::CreateStatusControlL()
+//-----------------------------------------------------------------------------
+//
+void CCCAppCommLauncherContainer::CreateStatusControlL() 
+    {
+    FeatureManager::InitializeLibL();
+    const TBool isFeatureIdFfContactsSocial =
+            FeatureManager::FeatureSupported( KFeatureIdFfContactsSocial );
+    FeatureManager::UnInitializeLib();
+
+    if( isFeatureIdFfContactsSocial )
+        {
+        MVPbkContactLink* link = NULL;
+        MVPbkContactLinkArray* contactArray = NULL;
+        TInt isSame = KErrNotFound;
+
+        if( !iAppServices )
+            {
+            iAppServices = CPbk2ApplicationServices::InstanceL();  
+            }
+        if( !iProvider )
+            {
+            iProvider = CSpbContentProvider::NewL( iAppServices->ContactManager(), 
+                    iAppServices->StoreManager(),
+                    CSpbContentProvider::EStatusMessage | 
+					    CSpbContentProvider::EServiceIcon );
+            }
+        HBufC& contactData = iPlugin.AppEngine()->Parameter().ContactDataL();
+        HBufC8* contactData8 = HBufC8::NewLC( contactData.Size() );
+        TPtr8 contactData8Ptr( contactData8->Des() );
+		contactData8Ptr.Copy( contactData.Des() ); 
+        
+        CVPbkContactManager* vPbkContactManager = 
+                &iAppServices->ContactManager();
+        
+        if( vPbkContactManager )
+            {
+            contactArray = vPbkContactManager->CreateLinksLC( contactData8Ptr );
+
+           if( contactArray->Count() > 0 )
+                {
+                link = contactArray->At( 0 ).CloneLC();
+                }				
+                            
+            if ( link )
+                {    
+                const MVPbkContactStoreProperties& storeProperties = 
+                    link->ContactStore().StoreProperties();
+                TVPbkContactStoreUriPtr uri = storeProperties.Uri();
+            
+                isSame = uri.Compare( VPbkContactStoreUris::DefaultCntDbUri(), 
+                    TVPbkContactStoreUriPtr::EContactStoreUriAllComponents );
+                }
+            }
+            
+        if( isSame == 0 )
+            {		
+            iStatusControl = CCCAppStatusControl::NewL( *iProvider, *this, CCCAppStatusControl::ENormalContact );
+            iStatusControl->SetContainerWindowL( *this );                   
+            iStatusControl->MakeVisible( EFalse );
+            iHeaderCtrl->SetStatusButtonVisibility( EFalse );
+            CFbsBitmap* bmp = NULL;
+            CFbsBitmap* bmpMask = NULL;
+
+            AknsUtils::CreateIconL(
+                AknsUtils::SkinInstance(),
+                KAknsIIDQgnPropSocialCommunities,
+                bmp,
+                bmpMask,
+                KCcaIconDefaultFileName,
+                EMbmPhonebook2eceQgn_prop_social_communities,
+                EMbmPhonebook2eceQgn_prop_social_communities_mask );    
+        
+            CGulIcon* guiIcon = CGulIcon::NewL( bmp, bmpMask );
+            iStatusControl->SetDefaultStatusIconL( guiIcon );
+            HBufC* defaultText = 
+                    StringLoader::LoadL( R_QTN_CCA_SOCIAL_NETWORKS );                                            
+            iStatusControl->SetDefaultStatusTextL( defaultText );        
+            iStatusControl->SetContactLinkL( *link );
+	
+            iFactoryExtensionNotifier = CCCaFactoryExtensionNotifier::NewL();
+            TCallBack callBack( 
+                    CCCAppCommLauncherContainer::CheckExtensionFactoryL, this );
+            iFactoryExtensionNotifier->ObserveExtensionFactoryL( callBack );
+            }
+        
+        if( link )
+            {
+            CleanupStack::PopAndDestroy(); //link
+            }
+        
+        if( contactArray )
+            {
+            CleanupStack::PopAndDestroy(); // contactArray
+            }
+                        
+        CleanupStack::PopAndDestroy(); // contactData8	
+		} //  KFeatureIdFfContactsSocial	
+	}
+	
+	
 // ----------------------------------------------------------------------------
 // CCCAppCommLauncherContainer::Draw()
 // ----------------------------------------------------------------------------
@@ -637,11 +663,6 @@
     iHeaderCtrl->ContactFieldFetchedNotifyL(aContactField);
     // Forwarding to listbox-model
     iModel->ContactFieldFetchedNotifyL(aContactField);
-    
-    if( iStatusControl && iStatusControl->IsVisible() )
-       	{
-		SetDefaultStatusTextL();
-       	}
     }
 
 // ----------------------------------------------------------------------------
@@ -665,11 +686,6 @@
     iListBox->DrawDeferred();
     
     iMdlRowCount = mdlCount;
-    
-    if( iStatusControl && iStatusControl->IsVisible() )
-    	{
-		SetDefaultStatusTextL();
-    	}
     }
 
 // ---------------------------------------------------------------------------
@@ -722,6 +738,15 @@
     iModel->Reset();
     iListBox->HandleItemRemovalL();
     iHeaderCtrl->ClearL();
+
+    if (!iStatusControl && iPlugin.ContactHandler().ContactStore() == ECmsContactStorePbk)
+        {
+        // create status control 
+        CreateStatusControlL();
+        //reset control's rect
+        SizeChanged();
+        }
+	
     }
 
 // ---------------------------------------------------------------------------
@@ -800,28 +825,6 @@
     return *iLongTapDetector;
     }
 
-// --------------------------------------------------------------------------
-// CCCAppCommLauncherContainer::SetDefaultStatusTextL
-// --------------------------------------------------------------------------
-//
-void CCCAppCommLauncherContainer::SetDefaultStatusTextL()
-	{	
-	TPtrC fullName;
-	iPlugin.ContactHandler().ContactFieldItemDataL(
-		CCmsContactFieldItem::ECmsFullName, 
-		fullName );
-	
-	if( fullName.Size() == 0 )
-		{
-		return;
-		}
-	
-	HBufC* defaultStatusText = StringLoader::LoadL( 
-        R_QTN_CCA_FTU_DISCOVER, fullName, iCoeEnv );       
-		
-	iStatusControl->SetDefaultStatusTextL( defaultStatusText );
-	}
-
 //-----------------------------------------------------------------------------
 // CCCAppCommLauncherContainer::StatusClicked()
 //-----------------------------------------------------------------------------
@@ -857,8 +860,11 @@
 void CCCAppCommLauncherContainer::DoCheckExtensionFactoryL()
     {
     CCCAExtensionFactory* extension = iFactoryExtensionNotifier->ExtensionFactory();
+    
+    MCCAStatusProvider* ccaStatusProvider = NULL;
+    
     // if extension is not null, extensionfactory plugins are available ->
-    // show statuscontrol
+    // show statuscontrol        
     if( extension )
         {
         if ( !iViewLauncher )
@@ -866,7 +872,24 @@
             iViewLauncher = extension->CreateViewLauncherL();
             }
         if( iStatusControl )
-            {
+            {        
+			if( extension )
+				{				
+				TAny* factoryExtension = extension->FactoryExtension( KCCAExtensionFactoryStatusProviderCreatorUid );        	
+				
+				 if( factoryExtension )
+					 {
+					 MCCAExtensionFactoryStatusProviderCreator* statusProviderCreator =
+							 static_cast<MCCAExtensionFactoryStatusProviderCreator*>( factoryExtension );
+
+					   if( statusProviderCreator )
+						   {
+                           ccaStatusProvider = statusProviderCreator->CreateStatusProviderL();						   
+						   }
+					 }
+				}
+        
+			iStatusControl->SetStatusProvider( ccaStatusProvider );
             iStatusControl->MakeVisible( ETrue );
             iHeaderCtrl->SetStatusButtonVisibility( ETrue );
             }
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherlpadmodel.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherlpadmodel.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -953,6 +953,7 @@
 void CCCAppCommLauncherLPadModel::Reset()
     {
     iButtonDataArray.Reset();
+    iAddressFields.Close();
     iButtonIconArray->ResetAndDestroy();
     }
 
@@ -1248,6 +1249,8 @@
     HBufC* formattedText = NULL;
     TBool street = EFalse;
     TBool local = EFalse;
+    TBool region = EFalse;
+    TBool country = EFalse;
 
     TPtrC* text = iAddressFields.Find( EAddressStreet );
     if ( text )
@@ -1262,15 +1265,49 @@
     	local = ETrue;
     	}
 
-    if ( street && local )
+    text = iAddressFields.Find( EAddressCountry );
+    if( text )
+       {
+       fields->AppendL( *text );
+       country = ETrue;
+       }
+    else
+       {
+       country = EFalse;
+       fields->AppendL(KNullDesC16);
+       }
+    
+    text = iAddressFields.Find( EAddressRegion );
+    if ( text )
+        {
+        fields->AppendL( *text );
+        region = ETrue;
+        }
+    else
+       {
+       region = EFalse;
+       fields->AppendL(KNullDesC16);
+       }
+    
+   
+   if ( street && local)
     	{
         formattedText = StringLoader::LoadLC(
     	        R_QTN_PHOB_COMMLAUNCHER_ONELINEPREVIEW, *fields );
     	}
+   else if( street && country )
+          {
+          formattedText = StringLoader::LoadLC(
+                  R_QTN_PHOB_COMMLAUNCHER_ONELINEPREVIEW, *fields );
+          }
+    else if( region || country )
+        {
+        formattedText = StringLoader::LoadLC(
+                R_QTN_PHOB_COMMLAUNCHER_ONELINEPREVIEW, *fields );
+        }
     else
         {
-        formattedText = StringLoader::LoadLC(
-    	   		R_QTN_PHOB_POPUP_INCOMPLETE_ADDRESS );
+        formattedText = KNullDesC16().AllocLC();
     	}
 
     tempText.Append( *formattedText );
--- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchermenuhandler.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchermenuhandler.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -558,6 +558,9 @@
         // Update the commlauncher the UI contact data
         iPlugin.ContactHandler().RefetchContactL();
         iPlugin.Container().ContactsChangedL();
+        
+        //Update the Store
+        SetContactStore(iPlugin.ContactHandler().ContactStore());
         }
 
     if (errParam)
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/data/ccappmycardpluginrsc.rss	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/data/ccappmycardpluginrsc.rss	Mon Jun 21 15:24:27 2010 +0300
@@ -199,9 +199,9 @@
 // r_qtn_cca_mc_my_card_in_ovi
 // ---------------------------------------------------------------------------
 // 
-RESOURCE TBUF r_qtn_cca_mc_my_card_in_ovi 			   
+RESOURCE TBUF r_qtn_cca_social_networks 			   
     {  
-    buf = qtn_cca_mc_my_card_in_ovi; 
+    buf = qtn_cca_social_networks; 
     }
 
 // ---------------------------------------------------------------------------
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardcontainer.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -445,6 +445,8 @@
     {
     CCCAExtensionFactory* extension = iFactoryExtensionNotifier->ExtensionFactory();
     TBool visible = EFalse;
+    MCCAStatusProvider* ccaStatusProvider = NULL;
+    
     if( extension )
         {
         if ( !iViewLauncher )
@@ -462,11 +464,29 @@
         delete iViewLauncher;
         iViewLauncher = NULL;
         }
+            
+    CCCAppStatusControl* statusControl = iHeaderCtrl->StatusControl();
     
-    CCCAppStatusControl* statusControl = iHeaderCtrl->StatusControl();
     if( statusControl )
         {
-        statusControl->MakeVisible( visible );
+		if( extension )
+        	{				
+			TAny* factoryExtension = extension->FactoryExtension( KCCAExtensionFactoryStatusProviderCreatorUid );        	
+        	
+			 if( factoryExtension )
+				 {
+				 MCCAExtensionFactoryStatusProviderCreator* statusProviderCreator =
+						 static_cast<MCCAExtensionFactoryStatusProviderCreator*>( factoryExtension );
+
+				   if( statusProviderCreator )
+					   {
+					   ccaStatusProvider = statusProviderCreator->CreateStatusProviderL();					   
+					   }
+				 }
+        	}
+		
+		statusControl->SetStatusProvider( ccaStatusProvider );
+        statusControl->MakeVisible( visible );        
         LayoutControls();
         DrawDeferred();
         }
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardheadercontrol.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardheadercontrol.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -81,12 +81,16 @@
     CVPbkContactManager& contactManager = iAppServices->ContactManager();
 
     FeatureManager::InitializeLibL();
-    if( FeatureManager::FeatureSupported( KFeatureIdFfContactsSocial ) )
-        {    
+    const TBool isFeatureIdFfContactsSocial =
+            FeatureManager::FeatureSupported( KFeatureIdFfContactsSocial );
+    FeatureManager::UnInitializeLib();
+
+    if( isFeatureIdFfContactsSocial )
+        {
         iProvider = CSpbContentProvider::NewL( contactManager, 
             iAppServices->StoreManager(),
             CSpbContentProvider::EStatusMessage | CSpbContentProvider::EServiceIcon );
-        iStatusControl = CCCAppStatusControl::NewL( *iProvider, aObserver );
+        iStatusControl = CCCAppStatusControl::NewL( *iProvider, aObserver, CCCAppStatusControl::EMyCardContact );
         iStatusControl->SetContainerWindowL( *this );
         iStatusControl->MakeVisible( EFalse );
         
@@ -95,19 +99,18 @@
                       
         AknsUtils::CreateIconL(
             AknsUtils::SkinInstance(),
-            KAknsIIDQgnPropWmlBmOvi,
+            KAknsIIDQgnPropSocialCommunities,
             bmp,
             bmpMask,
             KMyCardIconDefaultFileName,
-            EMbmPhonebook2eceQgn_prop_wml_bm_ovi,
-            EMbmPhonebook2eceQgn_prop_wml_bm_ovi_mask );    
+            EMbmPhonebook2eceQgn_prop_social_communities,
+            EMbmPhonebook2eceQgn_prop_social_communities_mask );     
                 
         CGulIcon* guiIcon = CGulIcon::NewL( bmp, bmpMask );
         iStatusControl->SetDefaultStatusIconL( guiIcon );
-        HBufC* defaultText = StringLoader::LoadL( R_QTN_CCA_MC_MY_CARD_IN_OVI );                                            
+        HBufC* defaultText = StringLoader::LoadL( R_QTN_CCA_SOCIAL_NETWORKS );                                            
         iStatusControl->SetDefaultStatusTextL( defaultText );        
         }
-    FeatureManager::UnInitializeLib();
     
     
     // Create portrait image
--- a/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/bwinscw/ccapputilu.def	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/bwinscw/ccapputilu.def	Mon Jun 21 15:24:27 2010 +0300
@@ -19,8 +19,8 @@
 	?OfferKeyEventL@CCCAppViewPluginAknContainer@@MAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 18 NONAME ; enum TKeyResponse CCCAppViewPluginAknContainer::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
 	?Release@CCCAppCmsContactFetcherWrapper@@QAEXXZ @ 19 NONAME ; void CCCAppCmsContactFetcherWrapper::Release(void)
 	?RemoveObserver@CCCAppCmsContactFetcherWrapper@@QAEXAAVMCCAppContactFieldDataObserver@@@Z @ 20 NONAME ; void CCCAppCmsContactFetcherWrapper::RemoveObserver(class MCCAppContactFieldDataObserver &)
-	?SetTitleL@CCCAppViewPluginAknView@@QAEXABVTDesC16@@@Z @ 21 NONAME ; void CCCAppViewPluginAknView::SetTitleL(class TDesC16 const &)		
-	?NewL@CCCAppStatusControl@@SAPAV1@AAVCSpbContentProvider@@AAVMCCAStatusControlObserver@@@Z @ 22 NONAME ; class CCCAppStatusControl * CCCAppStatusControl::NewL(class CSpbContentProvider &, class MCCAStatusControlObserver &)
+	?SetTitleL@CCCAppViewPluginAknView@@QAEXABVTDesC16@@@Z @ 21 NONAME ; void CCCAppViewPluginAknView::SetTitleL(class TDesC16 const &)			
+	?NewL@CCCAppStatusControl@@SAPAV1@AAVCSpbContentProvider@@AAVMCCAStatusControlObserver@@W4TContactType@1@@Z @ 22  NONAME ; class CCCAppStatusControl * CCCAppStatusControl::NewL(class CSpbContentProvider &, class MCCAStatusControlObserver &, enum CCCAppStatusControl::TContactType)	
 	?SetContactLinkL@CCCAppStatusControl@@QAEXAAVMVPbkContactLink@@@Z @ 23 NONAME ; void CCCAppStatusControl::SetContactLinkL(class MVPbkContactLink &)	
 	?NewL@CCCaFactoryExtensionNotifier@@SAPAV1@XZ @ 24 NONAME ; class CCCaFactoryExtensionNotifier * CCCaFactoryExtensionNotifier::NewL(void)
 	?ObserveExtensionFactoryL@CCCaFactoryExtensionNotifier@@QAEXAAVTCallBack@@@Z @ 25 NONAME ; void CCCaFactoryExtensionNotifier::ObserveExtensionFactory(class TCallBack &)
@@ -30,3 +30,5 @@
 	?SetDefaultStatusTextL@CCCAppStatusControl@@QAEXPAVHBufC16@@@Z @ 29 NONAME ; void CCCAppStatusControl::SetDefaultStatusTextL(class HBufC16 *)
 	?SetDefaultStatusIconL@CCCAppStatusControl@@QAEXPAVCGulIcon@@@Z @ 30 NONAME ; void CCCAppStatusControl::SetDefaultStatusIcon(class CGulIcon *)
 	?IsTopContact@CCCAppCmsContactFetcherWrapper@@QAEHXZ @ 31 NONAME ; int CCCAppCmsContactFetcherWrapper::IsTopContact(void)
+	?SetStatusProvider@CCCAppStatusControl@@QAEXPAVMCCAStatusProvider@@@Z @ 32 NONAME ; void CCCAppStatusControl::SetStatusProvider(class MCCAStatusProvider *)
+
--- a/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/eabi/ccapputilu.def	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/eabi/ccapputilu.def	Mon Jun 21 15:24:27 2010 +0300
@@ -31,7 +31,7 @@
 	_ZTV28CCCAppViewPluginAknContainer @ 30 NONAME ; #<VT>#
 	_ZTV30CCCAppCmsContactFetcherWrapper @ 31 NONAME ; #<VT>#	
 	_ZN19CCCAppStatusControl15SetContactLinkLER16MVPbkContactLink @ 32 NONAME
-	_ZN19CCCAppStatusControl4NewLER19CSpbContentProviderR25MCCAStatusControlObserver @ 33 NONAME
+	_ZN19CCCAppStatusControl4NewLER19CSpbContentProviderR25MCCAStatusControlObserverNS_12TContactTypeE @ 33 NONAME
 	_ZN28CCCaFactoryExtensionNotifier16ExtensionFactoryEv @ 34 NONAME
 	_ZN28CCCaFactoryExtensionNotifier24ObserveExtensionFactoryLER9TCallBack @ 35 NONAME
 	_ZN28CCCaFactoryExtensionNotifier4NewLEv @ 36 NONAME
@@ -40,4 +40,4 @@
 	_ZN19CCCAppStatusControl21SetDefaultStatusTextLEP7HBufC16 @ 39 NONAME
 	_ZN19CCCAppStatusControl21SetDefaultStatusIconLEP8CGulIcon @ 40 NONAME
 	_ZN30CCCAppCmsContactFetcherWrapper12IsTopContactEv @ 41 NONAME
-
+	_ZN19CCCAppStatusControl17SetStatusProviderEP18MCCAStatusProvider @ 42 NONAME
--- a/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/inc/ccappstatuscontrol.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/inc/ccappstatuscontrol.h	Mon Jun 21 15:24:27 2010 +0300
@@ -22,6 +22,8 @@
 // INCLUDES
 #include <coecntrl.h>
 #include <spbcontentprovider.h>
+#include <ccaextensionfactory.h>
+
 
 // FORWARD DECLARATIONS
 class CEikImage;
@@ -55,20 +57,29 @@
  */
 NONSHARABLE_CLASS( CCCAppStatusControl ) : 
     public CCoeControl, 
-    public MSpbContentProviderObserver 
+    public MSpbContentProviderObserver,
+    public MCCAStatusProviderObserver
     {
 public: // Construction & destruction
+	
+	enum TContactType
+            {
+            ENormalContact = 0x01,
+            EMyCardContact = 0x02
+            };
+
     /**
      * Two-phased constructor.
      */
     IMPORT_C static CCCAppStatusControl* NewL( 
             CSpbContentProvider& aContentProvider, 
-            MCCAStatusControlObserver& aObserver );
+            MCCAStatusControlObserver& aObserver,
+            CCCAppStatusControl::TContactType aContactType );
 
     /**
      * Destructor.
      */
-    ~CCCAppStatusControl();
+    ~CCCAppStatusControl();       
 
 public: // New implementation
         
@@ -100,7 +111,14 @@
 	 * @aDefaultStatusText Default status text
 	 */
     IMPORT_C void SetDefaultStatusTextL( HBufC* aDefaultStatusText );     
-             
+    
+    /**
+	 * Set the CCA statusprovider 
+	 * 	 
+	 * @aCCAStatusProvider ECom status provider
+	 */
+    IMPORT_C void SetStatusProvider( MCCAStatusProvider* aCCAStatusProvider );
+         
 public: // From CCoeControl
      
     /**
@@ -142,6 +160,15 @@
         MVPbkContactLink& aLink, 
         MSpbContentProviderObserver::TSpbContentEvent aEvent );           
     
+public: // From MCCAStatusProviderObserver
+    
+	/*
+	 * From MCCAStatusProviderObserver
+	 */
+    void StatusEvent(
+		MCCAStatusProviderObserver::TCCAStatusProviderObserverEvent aEvent,
+		const MVPbkContactLink* aLink = NULL );
+		
 private: // New functions    
 
     /**
@@ -164,6 +191,12 @@
         MVPbkContactLink& aLink, 
         MSpbContentProviderObserver::TSpbContentEvent aEvent );           
 
+    /*
+     * Update contact status from ECom plugin
+     * @param aLink contact which has the status updated
+     */
+    void UpdateCCAStatusL( MVPbkContactLink* aLink );
+    
     void SetVariableLayouts( TInt aOption );
     
     inline void RewrapStatusTextToArrayL( 
@@ -177,7 +210,8 @@
      */
     CCCAppStatusControl( 
         CSpbContentProvider& aContentProvider, 
-        MCCAStatusControlObserver& aObserver );
+        MCCAStatusControlObserver& aObserver,
+        CCCAppStatusControl::TContactType aContactType );
 
     /**
      * Constructor for performing 2nd stage construction
@@ -267,6 +301,12 @@
      * Current control state.
      */
     TStatusControlState iState;
+        
+    // Own. ECOM plugin tatus provider
+    MCCAStatusProvider* iCCAStatusProvider;
+    
+    // Current contact type.
+    CCCAppStatusControl::TContactType iContactType;
     };
 
 #endif // CCAPPSTATUSCONTROL_H_
--- a/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/src/ccappstatuscontrol.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/src/ccappstatuscontrol.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -60,13 +60,11 @@
         CFbsBitmap* mask = aIcon->Mask();
         if( bitmap )
             {
-            AknIconUtils::SetSize( 
-                    bitmap, aSize, EAspectRatioPreservedAndUnusedSpaceRemoved );
+            AknIconUtils::SetSize( bitmap, aSize );
             }
         if( mask )
             {
-            AknIconUtils::SetSize( 
-                    mask, aSize, EAspectRatioPreservedAndUnusedSpaceRemoved );
+            AknIconUtils::SetSize( mask, aSize );
             }
         }
     }
@@ -79,10 +77,11 @@
 //                            
 EXPORT_C CCCAppStatusControl* CCCAppStatusControl::NewL( 
     CSpbContentProvider& aContentProvider, 
-    MCCAStatusControlObserver& aObserver )
+    MCCAStatusControlObserver& aObserver,
+    CCCAppStatusControl::TContactType aContactType )
     {
     CCCAppStatusControl* self= new(ELeave) CCCAppStatusControl( 
-            aContentProvider, aObserver );
+            aContentProvider, aObserver, aContactType );
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
@@ -95,10 +94,12 @@
 //
 CCCAppStatusControl::CCCAppStatusControl( 
     CSpbContentProvider& aContentProvider, 
-    MCCAStatusControlObserver& aObserver ) : 
+    MCCAStatusControlObserver& aObserver,
+    CCCAppStatusControl::TContactType aContactType ) : 
     iContentProvider( aContentProvider ),
     iObserver( aObserver ),
-    iState( EStateUndefined )
+    iState( EStateUndefined ),
+    iContactType( aContactType )
     {		
     } 
 
@@ -151,8 +152,15 @@
         {
         iTouchFeedBack->RemoveFeedbackForControl( this );
         }
-	iContentProvider.RemoveObserver( *this );
+	
+    iContentProvider.RemoveObserver( *this );
 	
+	if( iCCAStatusProvider )
+		{
+		iCCAStatusProvider->RemoveObserver( *this );
+		}
+	
+	delete iCCAStatusProvider;		
     delete iStatusImage;
     delete iStatusIcon;
     delete iStatusLabel1;    
@@ -241,6 +249,22 @@
 	}
 
 // ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetStatusProvider
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCCAppStatusControl::SetStatusProvider( MCCAStatusProvider* aCCAStatusProvider )
+	{
+	if( iCCAStatusProvider )
+		{
+		iCCAStatusProvider->RemoveObserver( *this );
+		delete iCCAStatusProvider;
+		iCCAStatusProvider = NULL;
+		}
+	
+	iCCAStatusProvider = aCCAStatusProvider;					
+	}
+
+// ---------------------------------------------------------------------------
 // CCCAppStatusControl::CountComponentControls
 // ---------------------------------------------------------------------------
 //
@@ -436,6 +460,21 @@
 	}
 
 // ---------------------------------------------------------------------------
+// CCCAppStatusControl::StatusEvent
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::StatusEvent(
+           MCCAStatusProviderObserver::TCCAStatusProviderObserverEvent aEvent,
+           const MVPbkContactLink* aLink )
+	{		       	
+	if( iCCAStatusProvider && aEvent == MCCAStatusProviderObserver::EStatusChanged && 
+			iLink && aLink && iLink->IsSame( *aLink ) )
+		{
+        UpdateCCAStatusL( iLink );
+		}			
+	}
+
+// ---------------------------------------------------------------------------
 // CCCAppStatusControl::DoStatusUpdateL
 // ---------------------------------------------------------------------------
 //
@@ -444,10 +483,23 @@
     {
     if( aEvent == EContentNotAvailable )
         {
-		ShowDefaultContentL();
+		if( iCCAStatusProvider )
+    		{
+            UpdateCCAStatusL( &aLink );            			        					
+    		TRAP_IGNORE( iCCAStatusProvider->AddObserverL( *this ) );
+    		}    
+		else
+			{
+			ShowDefaultContentL();
+			}
         }
     else if( iLink && iLink->IsSame( aLink ) )
         {
+        if( iCCAStatusProvider )
+            {
+            iCCAStatusProvider->RemoveObserver( *this );
+            }
+    
         iState = EStateStatusContent;
         delete iStatusText;
         iStatusText = NULL;
@@ -488,6 +540,55 @@
     }
 
 // ---------------------------------------------------------------------------
+// CCCAppStatusControl::UpdateCCAStatusL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::UpdateCCAStatusL( MVPbkContactLink* aLink )
+    {
+    if( aLink && iCCAStatusProvider )
+        {
+        delete iStatusText;
+        iStatusText = NULL;
+        delete iStatusIcon;
+        iStatusIcon = NULL;
+        
+        if( iContactType == ENormalContact )
+            {
+            iCCAStatusProvider->GetStatusInformationL(
+                *aLink,
+                iStatusText,
+                iStatusIcon );
+            }
+        else if( iContactType == EMyCardContact )
+            {
+            iCCAStatusProvider->GetMyCardStatusInformationL(
+                *aLink,
+                iStatusText,
+                iStatusIcon );
+            }
+                            
+        if( !iStatusIcon )
+            {
+            iStatusIcon = CreateEmptyIconL();
+            }
+                
+        ReSizeIcon( iStatusIcon, iStatusIconSize );                 
+        iStatusImage->SetPicture( iStatusIcon->Bitmap(), iStatusIcon->Mask() );
+        iStatusImage->MakeVisible( ETrue );        
+        
+        const TInt count( RewrapStatusTextL() );
+        TInt option( 1 );
+        if( count > 1 )
+           {
+           option = 0;
+           }
+        SetVariableLayouts( option );
+                   
+        DrawDeferred();
+        }
+    }
+
+// ---------------------------------------------------------------------------
 // CCCAppStatusControl::RewrapStatusTextToArrayL
 // ---------------------------------------------------------------------------
 //
Binary file phonebookui/Phonebook2/conf/phonebook2.confml has changed
Binary file phonebookui/Phonebook2/conf/phonebook2_101f8794.crml has changed
--- a/phonebookui/Phonebook2/group/iconlistece.txt	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/group/iconlistece.txt	Mon Jun 21 15:24:27 2010 +0300
@@ -29,8 +29,9 @@
 /c8,8 qgn_prop_pb_comm_valid_lm_large.svg
 /c8,8 qgn_prop_locev_map.svg
 /c8,8 qgn_prop_pb_no_valid_lm.svg
-/c8,8 qgn_prop_wml_bm_ovi.svg
+/c8,8 qgn_prop_social_communities.svg
 /c8,8 qgn_indi_many_items_add.svg
 /c8,8 qgn_prop_pb_thump_mycard.svg
 /c8,8 qgn_prop_pb_add_top.svg
 /c8,8 qgn_prop_pb_topc.svg
+
--- a/phonebookui/Phonebook2/inc/Phonebook2InternalCRKeys.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/inc/Phonebook2InternalCRKeys.h	Mon Jun 21 15:24:27 2010 +0300
@@ -24,6 +24,7 @@
 // --------------------------------------------------------------------------
 //
 const TUint32 KCRUidPhonebookInternalConfig                 = 0x101f884a;
+// value redefined and used also in CVPbkPhoneNumberMatchStrategy.cpp
 const TUint32 KCRUidPhonebookStoreConfiguration             = 0x1020727f;
 
 // --------------------------------------------------------------------------
@@ -42,7 +43,9 @@
 /// Current configuration key range 0x00000100 to 0x000001ff
 const TUint32 KPhonebookCurrentConfigurationFirstKey        = 0x00000100;
 const TUint32 KPhonebookCurrentConfigurationLastKey         = 0x000001ff;
+// value redefined and used also in CVPbkPhoneNumberMatchStrategy.cpp
 const TUint32 KPhonebookCurrentConfigurationPartialKey      = 0x00000100;
+// value redefined and used also in CVPbkPhoneNumberMatchStrategy.cpp
 const TUint32 KPhonebookCurrentConfigurationMask            = 0xffffff00;
 
 /// Possible configuration key range 0x00000200 to 0x000002ff
--- a/phonebookui/Phonebook2/inc/Phonebook2PrivateCRKeys.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/inc/Phonebook2PrivateCRKeys.h	Mon Jun 21 15:24:27 2010 +0300
@@ -39,6 +39,7 @@
 const TUint32 KPhonebookAddFavoritiesVisibility				= 0x00000006;
 const TUint32 KPhonebooksXPExtensionPluginsName             = 0x00000007; 
 const TUint32 KPhonebookPredictiveSearchEnablerFlags        = 0x00000008; 
+const TUint32 KPhonebookStatusMessageVisibility             = 0x00000009; 
 
 #endif // PHONEBOOK2PRIVATECRKEYS_H
 
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -122,12 +122,29 @@
     // The actual ECom loading is implemented in CPbkxRemoteContactLookupProtocolAdapter.
     for ( TInt i = 0; i < implArray.Count(); i++ )
         {
-        CPbkxRemoteContactLookupProtocolAdapter* adapter = NULL;
-        adapter = CPbkxRemoteContactLookupProtocolAdapter::NewL(
-            implArray[i]->ImplementationUid(), *iProtocolEnv );
-        CleanupStack::PushL( adapter );
-        User::LeaveIfError( iAdapters.Append( adapter ) );
-        CleanupStack::Pop( adapter );
+        CPbkxRemoteContactLookupProtocolAdapter* volatile adapter = NULL;
+        
+        // Trap the error code of loading one specific protocal adapter, if the error is not 
+        // extremly harmful like "No memory", then go on loading remaining possibly working 
+        // adapters.
+        TRAPD(err,
+        		{
+                adapter = CPbkxRemoteContactLookupProtocolAdapter::NewL(
+                implArray[i]->ImplementationUid(), *iProtocolEnv );
+        		}
+        );
+        
+        if( err == KErrNoMemory )
+            {
+            User::Leave( KErrNoMemory );
+            }
+        
+        if ( adapter )
+        	{
+            CleanupStack::PushL( adapter );
+            User::LeaveIfError( iAdapters.Append( adapter ) );
+            CleanupStack::Pop( adapter );
+        	}
         }
     CleanupStack::PopAndDestroy(); // cleanupItem 
     }
@@ -153,23 +170,32 @@
         RPointerArray<CPbkxRemoteContactLookupProtocolAccount> protocolAccountsTmp;
         TCleanupItem cleanupItemAcc(CleanupResetAndDestroyAccArray, &protocolAccountsTmp);
         CleanupStack::PushL(cleanupItemAcc);
-        adapter.GetAllProtocolAccountsL( protocolAccountsTmp );
+        
+        TRAPD( err,
+        		{
+                adapter.GetAllProtocolAccountsL( protocolAccountsTmp );
+        		}
+        );
+        
+        if( err == KErrNoMemory )
+            {
+            User::Leave( KErrNoMemory );
+            }
         
         // Move accounts from temp array to main array
         
         // First expand the main array so that we can move ownership in one go.
         // TODO OOPS, METHOD NOT AVAILABLE iAdapters.SetReserveL( iAdapters.Count() + protocolAccountsTmp.Count() );
 
-        
-        // Don't need the cleanup item anymore since iAdapters will take ownership,
-        // and the iAdapters has already been expanded.
-        CleanupStack::Pop(); // cleanupItemAcc
-        for ( TInt x = 0; x < protocolAccountsTmp.Count(); x++ )
+        const TInt count = protocolAccountsTmp.Count();
+        for ( TInt x = 0; x < count; x++ )
             {
             // Ownership is passed
-            User::LeaveIfError( aAccounts.Append( protocolAccountsTmp[ x ] ) );
+            User::LeaveIfError( aAccounts.Append( protocolAccountsTmp[ 0 ] ) );
+            protocolAccountsTmp.Remove( 0 );
             }
-        // just let protocolAccountsTmp pass out of scope. It doesn't own anything now.
+        
+        CleanupStack::PopAndDestroy( &protocolAccountsTmp );
         }
     CleanupStack::Pop();
     }
--- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -710,7 +710,8 @@
     CEikStatusPane* statusPane = appUi->StatusPane();
     
     // add the navigation decorators only if the usual statuspane layout is used
-    if ( statusPane->CurrentLayoutResId() == R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT )
+    if ( statusPane->CurrentLayoutResId() == R_AVKON_STATUS_PANE_LAYOUT_USUAL_EXT || 
+    		statusPane->CurrentLayoutResId() == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT )
         {
         iNaviPane = reinterpret_cast<CAknNavigationControlContainer*>(
                 statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
--- a/phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/phonebookui/Phonebook2/spbcontentprovider/src/spbphonenumberparser.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -109,94 +109,90 @@
 // ---------------------------------------------------------------------------
 //
 void CSpbPhoneNumberParser::SolvePhoneNumberL( MVPbkStoreContact& aContact )
-	{
-	RBuf number;
-	TInt numberCount = 0;
-	
-	// check if the contact has default a number
-	MVPbkContactAttributeManager& attributeManager = 
-			iContactManager.ContactAttributeManagerL();
+    {
+    RBuf number;
+    TInt numberCount = 0;
 	
-	CVPbkDefaultAttribute* attribute = 
-			CVPbkDefaultAttribute::NewL( EVPbkDefaultTypePhoneNumber );
-	CleanupStack::PushL( attribute );
-	
-	MVPbkStoreContactField* field = 
-			attributeManager.FindFieldWithAttributeL( *attribute, aContact );
-	if( field )
-		{
-		const MVPbkContactFieldTextData* textData =
-				&MVPbkContactFieldTextData::Cast( field->FieldData() );
-		number.CreateL( textData->Text() );
-		}
-	CleanupStack::PopAndDestroy(); //attribute
+    // check if the contact has default a number
+    MVPbkContactAttributeManager& attributeManager = 
+            iContactManager.ContactAttributeManagerL();
 	
-	// was the default number found?
-	if( number.Length() == 0 )
-		{
-        CDesC16Array* phoneNumberArray = new (ELeave) CDesC16ArraySeg(8);
-        CleanupStack::PushL( phoneNumberArray );
-        
-		// get contact fields
-		MVPbkStoreContactFieldCollection& fields = aContact.Fields();
-		const TInt fieldCount = fields.FieldCount();
-		// check fields
-		for ( TInt i = 0; i < fieldCount; ++i )
-			{
-			const MVPbkStoreContactField& field = fields.FieldAt( i );
-			// if correct data type
-			if( field.FieldData().DataType() == EVPbkFieldStorageTypeText )
-				{
-				const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
-				if( fieldType )
-					{
-                    const TInt fieldTypeResId = fieldType->FieldTypeResId();
-					// if one of the number fields
-					if( fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEGEN    ||
-     			        fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEHOME   ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEWORK   ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN  ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_CARPHONE        ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_ASSTPHONE       ||
-                        fieldTypeResId == R_VPBK_FIELD_TYPE_PAGERNUMBER )
-						{
-					    const MVPbkContactFieldTextData* textData =
-                                &MVPbkContactFieldTextData::Cast( field.FieldData() );
-					    const TPtrC phoneNumber( textData->Text() );
-					    
-                        // we need count phonenumbers same way how this is implemented in CCA
-                        // so that we show same count for phonenumbers in names list
-                        // CCA uses descriptor folded compare for phonenumbers
-					    TInt dummy = 0;
-					    if( 0 != phoneNumberArray->FindIsq( phoneNumber, dummy, ECmpFolded ) )
-					        {
-                            // phone number doesn't exist
-                            phoneNumberArray->InsertIsqL( phoneNumber, ECmpFolded );
-					        }
-						}
-					}
-				}
-			}
-        numberCount = phoneNumberArray->Count();
-        // if only one number, store it
-        if( numberCount == 1 )
+    CVPbkDefaultAttribute* attribute = 
+            CVPbkDefaultAttribute::NewL( EVPbkDefaultTypePhoneNumber );
+    CleanupStack::PushL( attribute );
+
+    TBool hasDefaultNumberField = EFalse;
+    CDesC16Array* phoneNumberArray = new (ELeave) CDesC16ArraySeg(8);
+    CleanupStack::PushL( phoneNumberArray );
+
+    // get contact fields
+    MVPbkStoreContactFieldCollection& fields = aContact.Fields();
+    const TInt fieldCount = fields.FieldCount();
+    // check fields
+    for ( TInt i = 0; i < fieldCount; ++i )
+        {
+        const MVPbkStoreContactField& field = fields.FieldAt( i );
+        // if correct data type
+        if( field.FieldData().DataType() == EVPbkFieldStorageTypeText )
             {
-            number.CreateL( (*phoneNumberArray)[0] );
+            const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
+            if( fieldType )
+                {
+                const TInt fieldTypeResId = fieldType->FieldTypeResId();
+                // if one of the number fields
+                if( fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEGEN    ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEHOME   ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_LANDPHONEWORK   ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN  ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_CARPHONE        ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_ASSTPHONE       ||
+                    fieldTypeResId == R_VPBK_FIELD_TYPE_PAGERNUMBER )
+                    {
+                    const MVPbkContactFieldTextData* textData =
+                            &MVPbkContactFieldTextData::Cast( field.FieldData() );
+                    if( attributeManager.HasFieldAttributeL( *attribute, field ) )
+                        {
+                        //default number found
+                        number.CreateL( textData->Text() );
+                        hasDefaultNumberField = ETrue;
+                        break;
+                        }
+                    const TPtrC phoneNumber( textData->Text() );
+                    // we need count phonenumbers same way how this is implemented in CCA
+                    // so that we show same count for phonenumbers in names list
+                    // CCA uses descriptor folded compare for phonenumbers
+                    TInt dummy = 0;
+                    if( 0 != phoneNumberArray->FindIsq( phoneNumber, dummy, ECmpFolded ) )
+                        {
+                        // phone number doesn't exist
+                        phoneNumberArray->InsertIsqL( phoneNumber, ECmpFolded );
+                        }
+                    }
+                }
             }
-        CleanupStack::PopAndDestroy( phoneNumberArray );
-		}
+        }
+    numberCount = phoneNumberArray->Count();
+    
+    //default number not found, and only one number
+    if( EFalse == hasDefaultNumberField && numberCount == 1 )
+        {
+            number.CreateL( (*phoneNumberArray)[0] );
+        }
+
+    CleanupStack::PopAndDestroy( phoneNumberArray );
+    CleanupStack::PopAndDestroy( attribute );
 	
-	// no number was found
-	if( numberCount > 1 )
-	    {
+    // no number was found
+    if( numberCount > 1 )
+        {
         // contact has multiple numbers and no default
         TBuf<12> count;
         count.Num( numberCount );
         iContent.PhoneNumberUpdatedL( 
             count, CSpbContentProvider::ETypePhoneNumberMultiple );
-	    }
+        }
     else
         {
         // inform the observer
@@ -204,8 +200,8 @@
             number, CSpbContentProvider::ETypePhoneNumber );
         }
 
-	number.Close();
-	}
+    number.Close();
+    }
 
 // ---------------------------------------------------------------------------
 // CSpbPhoneNumberParser::FetchPhoneNumber
--- a/predictivesearch/PcsAlgorithm/Algorithm1/inc/CPcsAdaptiveGrid.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/inc/CPcsAdaptiveGrid.h	Mon Jun 21 15:24:27 2010 +0300
@@ -89,6 +89,11 @@
          * Print the Adaptive Grid
          */
         void CPcsAdaptiveGrid::PrintAdatptiveGrid( );
+        
+        /**
+         * Reset the grid
+         */
+        void Reset();
 
 	private:
 
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAdaptiveGrid.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAdaptiveGrid.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -204,4 +204,13 @@
     PRINT ( _L("CPcsAdaptiveGrid::PrintAdatptiveGrid: ----------------------------------------") );
 }
 
+// ----------------------------------------------------------------------------
+// CPcsAdaptiveGrid::Reset
+// 
+// ----------------------------------------------------------------------------
+void CPcsAdaptiveGrid::Reset()
+    {
+    iAdaptiveGrid.ResetAndDestroy();
+    }
+
 // End of file
--- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -90,7 +90,14 @@
         }
 
     // Adaptive Grid map
-    iAdaptiveGridMap = CPcsAdaptiveGrid::NewL( );
+    if ( iURI->Compare( KVPbkDefaultCntDbURI ) == 0
+            || iURI->Compare( KVPbkSimGlobalAdnURI ) == 0
+            || iURI->Compare( KVPbkSimGlobalFdnURI ) == 0 
+            || iURI->Compare( KVPbkSimGlobalSdnURI ) == 0
+            || iURI->Compare( KVPbkDefaultGrpDbURI ) == 0 )
+        {
+        iAdaptiveGridMap = CPcsAdaptiveGrid::NewL();
+        }
     
     PRINT ( _L("End CPcsCache::ConstructL") );
 }
@@ -217,10 +224,13 @@
                          dataIndex, &*dataStr, &(ptr), (TUint) firstChar, aData.IsDataMatch(dataIndex) );
 #endif // _DEBUG
 
-                // Set the 1st char of the word for the Adaptive Grid or
-                // increment the reference counter
-                TUint selector = GridItemSelector( dataIndex, unnamed );
-                iAdaptiveGridMap->IncrementRefCounterL( firstChar, selector );
+                if ( iAdaptiveGridMap )
+                	{
+					// Set the 1st char of the word for the Adaptive Grid or
+					// increment the reference counter
+					TUint selector = GridItemSelector( dataIndex, unnamed );
+					iAdaptiveGridMap->IncrementRefCounterL( firstChar, selector );
+                	}
 		    }
 		    
 		    CleanupStack::PopAndDestroy(words); 
@@ -359,7 +369,7 @@
         }
     }
     
-    if ( data )
+    if ( iAdaptiveGridMap && data )
     {
         TBool unnamed = ETrue;
         // Parse thru each data element
@@ -383,14 +393,12 @@
                     TPtrC16 ptr = words->MdcaPoint(i); 
                     PRINT5 ( _L("CPcsCache::RemoveFromCacheL: Data[%d]=\"%S\", word=\"%S\", firstChar='%c', Match=%d" ),
                              dataIndex, &*dataStr, &(ptr), (TUint) firstChar, data->IsDataMatch(dataIndex) );
-#endif // _DEBUG
-    
+#endif // _DEBUG   
                     // Decrement the reference counter of the 1st char of the word for the Adaptive Grid or
                     // delete the Adaptive Grid item if there are no references to it anymore
                     TUint selector = GridItemSelector( dataIndex, unnamed );
                     iAdaptiveGridMap->DecrementRefCounter( firstChar, selector );
                 }
-    
                 CleanupStack::PopAndDestroy( words ); 
             }
         }
@@ -420,8 +428,10 @@
 	iMasterPool.ResetAndDestroy();
 	iCacheInfo.Close();
 
-    delete iAdaptiveGridMap;
-	iAdaptiveGridMap = NULL;
+	if ( iAdaptiveGridMap )
+	    {
+	    iAdaptiveGridMap->Reset();
+	    }
 	
 	PRINT ( _L("End CPcsCache::RemoveAllFromCache") );
 }
@@ -434,7 +444,10 @@
 {
     PRINT ( _L("Enter CPcsCache::GetAdaptiveGridL") );
     
-    iAdaptiveGridMap->GetAdaptiveGrid( aCompanyName, aAdaptiveGrid );
+    if ( iAdaptiveGridMap )
+        {
+        iAdaptiveGridMap->GetAdaptiveGrid( aCompanyName, aAdaptiveGrid );
+        }
     
     PRINT ( _L("End CPcsCache::GetAdaptiveGridL") );
 }
@@ -650,7 +663,11 @@
         }
     iMasterPool.Reset();
     iCacheInfo.Close();
-
+    if ( iAdaptiveGridMap )
+        {
+        iAdaptiveGridMap->Reset();
+        }
+    
     // Now add data again from the iMasterPoolBackup
     for (TInt i = 0; i < iMasterPoolBackup.Count(); i++ )
         {
--- a/predictivesearch/PcsServer/group/PcsServer.mmp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsServer/group/PcsServer.mmp	Mon Jun 21 15:24:27 2010 +0300
@@ -24,6 +24,7 @@
 UID           0x1000008e 0x2000B5B6
 SECUREID      0x2000B5B6
 
+EPOCSTACKSIZE 0x8000
 EPOCHEAPSIZE  0x100000 0x1000000
 EPOCPROCESSPRIORITY background
 
--- a/predictivesearch/PcsServer/inc/CPcsServer.h	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsServer/inc/CPcsServer.h	Mon Jun 21 15:24:27 2010 +0300
@@ -58,6 +58,11 @@
          */			                  
 	    CPcsPluginInterface* PluginInterface();
 	    
+	    /**
+         * Returns ETrue if there is Chinese variant feature in phone
+         */	
+	    TBool  IsChineseVariant() const;
+	    
     private:
     
         /**
@@ -80,6 +85,11 @@
          * A PCS algorithm instance (owned)
          */
     	CPcsPluginInterface* iPcs;
+		
+		/**
+         * Flag for whether there is Chinese in phone
+         */	
+    	TBool iIsChineseVariant;
 };
 
 #endif // End of file
--- a/predictivesearch/PcsServer/src/CPcsServer.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsServer/src/CPcsServer.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -70,11 +70,11 @@
 	iPcs = CPcsPluginInterface::NewL();
     
 	// Check if the phone is chinese feature id installed
-	TBool isChineseVariant = IsChineseFeatureInitilizedL();
+	iIsChineseVariant = IsChineseFeatureInitilizedL();
     // Create the plugin for the required algorithm
     // Matches the ECOM Plugin's display name definition in rss file
     // Check for the chinese feature id flag.
-	if(isChineseVariant) 
+	if(iIsChineseVariant) 
 	    {
 	    // Chinese variant phones. Use Algorithm 2
 	    PRINT ( _L("Enter CPcsServer::ConstructL() - Chinese Variant Phone Algorithm Instantiated") );
@@ -151,3 +151,12 @@
     
     return chineseFeatureInitialized;
 }
+
+// ----------------------------------------------------------------------------
+// CPcsServer::IsChineseVariant() const
+// Returns ETrue if there is Chinese variant feature in phone
+// ---------------------------------------------------------------------------- 
+TBool CPcsServer::IsChineseVariant() const
+    {
+    return iIsChineseVariant;
+    }
--- a/predictivesearch/PcsServer/src/CPcsSession.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/PcsServer/src/CPcsSession.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -254,10 +254,20 @@
         RPointerArray<CPsClientData> searchResults;
         RPointerArray<CPsPattern> searchSeqs;
 
-        iServer->PluginInterface()->PerformSearchL(*iSettings,
-                                                   *psQuery,
-                                                   searchResults,
-                                                   searchSeqs);
+
+        if( !iServer->IsChineseVariant() )
+             {
+             PRINT ( _L("----Algorithm1 search----") );
+             iServer->PluginInterface()->PerformSearchL(*iSettings,
+                                                        *psQuery,
+                                                        searchResults,
+                                                        searchSeqs);
+             }
+         else
+             {
+             PRINT ( _L("----Algorithm2 fake search----") );
+             }       
+
         CleanupStack::PopAndDestroy( psQuery );
 
 		// Dynamic data buffer
@@ -383,10 +393,18 @@
     // To hold matched location
     RArray<TPsMatchLocation> sequenceLoc;
 
-	iServer->PluginInterface()->SearchInputL(*psQuery,
-	                                         *data,
-	                                         searchSeqs,
-	                                         sequenceLoc);
+    if( !iServer->IsChineseVariant() )
+         {
+         PRINT ( _L("----Algorithm1 searchinput----") );
+         iServer->PluginInterface()->SearchInputL(*psQuery,
+                                                  *data,
+                                                  searchSeqs,
+                                                  sequenceLoc);
+         }
+     else
+         {
+         PRINT ( _L("----Algorithm2 fake searchinput----") );
+         }       
 
     // Delete the search query and search data
 	CleanupStack::PopAndDestroy( data );
--- a/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp	Wed Jun 09 09:26:27 2010 +0300
+++ b/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp	Mon Jun 21 15:24:27 2010 +0300
@@ -332,8 +332,12 @@
 		iNextState = EFetchContactBlock;
         // 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();
+	    if(!IsActive())
+	        {
+            iTimer.After( iStatus, KTimerInterval); // 100 milliseconds
+            SetActive();
+	        }
+
 	}
 	
 }
@@ -361,8 +365,11 @@
 		iNextState = EFetchContactBlock;
         // 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();
+        if(!IsActive())
+            {
+            iTimer.After( iStatus, KTimerInterval); // 100 milliseconds
+            SetActive();
+            }
 	}
 	
 	PRINT ( _L("End CPcsContactStore::VPbkSingleContactOperationFailed") );