Revision: 201009 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:39:55 +0200
branchRCL_3
changeset 9 bddb6d4447db
parent 8 7117cbf1600a
child 10 ed1e38b404e5
Revision: 201009 Kit: 201010
callcontinuity/vcc/src/cvcctransferprovider.cpp
callcontinuity/vcc/src/tvccstatecalling.cpp
callcontinuity/vcc/src/vccengpsproperty.cpp
commsconfig/cscapplicationui/inc/cscappui.h
commsconfig/cscapplicationui/inc/cscconstants.h
commsconfig/cscapplicationui/src/cscappui.cpp
commsconfig/cscapplicationui/src/cscservicecontainer.cpp
commsconfig/cscsettingsui/inc/cscsettingsuimainview.h
commsconfig/cscsettingsui/src/cscsettingsuiimpl.cpp
commsconfig/cscsettingsui/src/cscsettingsuimaincontainer.cpp
commsconfig/cscsettingsui/src/cscsettingsuimainview.cpp
commsconfig/group/bld.inf
commsconfig/help/data/xhtml.zip
commsconfig/help/group/bld.inf
commsconfig/help/inc/voip.hlp.hrh
commsconfig/help/rom/cscapplicationuihelps_variant.iby
convergedconnectionhandler/cchclientapi/cchuinotif/group/cchuinotif.mmp
convergedconnectionhandler/cchclientapi/group/cch.mmp
convergedconnectionhandler/cchclientapi/inc/cchserviceimpl.h
convergedconnectionhandler/cchclientapi/inc/cchserviceimplasynchroniser.h
convergedconnectionhandler/cchclientapi/inc/cchuiconnectionhandler.h
convergedconnectionhandler/cchclientapi/src/cchserviceimpl.cpp
convergedconnectionhandler/cchclientapi/src/cchserviceimplasynchroniser.cpp
convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp
convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp
convergedconnectionhandler/cchserver/group/cchserver.mmp
convergedconnectionhandler/cchserver/inc/cchservicehandler.h
convergedconnectionhandler/cchserver/inc/cchuihandler.h
convergedconnectionhandler/cchserver/src/cchservicehandler.cpp
convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp
convergedconnectionhandler/cchserver/src/cchuihandler.cpp
convergedconnectionhandler/group/bld.inf
sipvoipprovider/src/svpsessionbase.cpp
voipplugins/accountcreationplugin/data/accountcreationplugin.rss
voipplugins/accountcreationplugin/engine/src/acphttphandler.cpp
voipplugins/accountcreationplugin/src/acpproviderlistview.cpp
voipplugins/sipconnectionprovider/inc/scppresencehandler.h
voipplugins/sipconnectionprovider/inc/scpprofilehandler.h
voipplugins/sipconnectionprovider/inc/scpservicehandlerbase.h
voipplugins/sipconnectionprovider/inc/scpsipconnectionobserver.h
voipplugins/sipconnectionprovider/src/scppresencehandler.cpp
voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp
voipplugins/sipconnectionprovider/src/scpservicehandlerbase.cpp
voipplugins/sipconnectionprovider/src/scpservicemanager.cpp
voipplugins/svtmatching/inc/svturiparser.h
voipplugins/svtmatching/src/svturiparser.cpp
voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPAdapter.cpp
voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp
voipplugins/voipadapters/voipxmlprovisioning/group/bld.inf
voipplugins/voipadapters/voipxmlprovisioning/rom/voipxmlprovisioning.iby
voipplugins/voipadapters/voipxmlprovisioning/rom/voipxmlprovisioningresources.iby
voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmliaphandler.cpp
--- a/callcontinuity/vcc/src/cvcctransferprovider.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/callcontinuity/vcc/src/cvcctransferprovider.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -92,6 +92,10 @@
             target = targetCall->PrimaryCall();
             }
         }
+    else
+        {
+        return KErrNotReady;
+        }
     return iCallTransferProvider->AttendedTransfer( *target );
     }
 
--- a/callcontinuity/vcc/src/tvccstatecalling.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/callcontinuity/vcc/src/tvccstatecalling.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -118,9 +118,17 @@
         RUBY_DEBUG0( "TVccStateCalling::CallStateChanged - swap the calls" );
         
 		aContext.SetCall(aContext.SecondaryCall());
-		TRAP_IGNORE( aContext.Notifier().NotifySubscriberL( EVccCsToPsHoInprogress, 
-		                                       KErrNone ) );
 		
+		if ( aContext.Parameters().CallType() == CCPCall::ECallTypePS )
+            {
+            TRAP_IGNORE( aContext.Notifier().NotifySubscriberL( EVccCsToPsHoInprogress, 
+                                                   KErrNone ) );            
+            }
+        else
+            {
+            TRAP_IGNORE( aContext.Notifier().NotifySubscriberL( EVccPsToCsHoInprogress, 
+                                                       KErrNone ) );
+            }
 		//-> Set Next State - if the call is idle just destroy call object and 
 		//go to init-state
 		__ASSERT_DEBUG( aContext.SecondaryCall() != NULL, 
--- a/callcontinuity/vcc/src/vccengpsproperty.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/callcontinuity/vcc/src/vccengpsproperty.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -87,6 +87,7 @@
 		case EVccCsToPsHoStarted:
 		case EVccPsToCsHoStarted:
 		case EVccCsToPsHoInprogress:
+		case EVccPsToCsHoInprogress:
 		case EVccCsToPsHoSuccessful:
 		case EVccCsToPsHoFailure:
         case EVccHoUnavailable:
--- a/commsconfig/cscapplicationui/inc/cscappui.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscapplicationui/inc/cscappui.h	Mon Mar 15 12:39:55 2010 +0200
@@ -183,8 +183,14 @@
          */
         void NotifyConnectionEvent( 
             CCSCEngConnectionHandler::TConnectionEvent aConnectionEvent );
-        
-        
+
+        /**
+         * From MCoeMessageObserver.
+         */
+        MCoeMessageObserver::TMessageResponse HandleMessageL(
+            TUint32 aClientHandleOfTargetWindowGroup, TUid aMessageUid,
+            const TDesC8& aMessageParameters);
+
     private:
             
         /*
--- a/commsconfig/cscapplicationui/inc/cscconstants.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscapplicationui/inc/cscconstants.h	Mon Mar 15 12:39:55 2010 +0200
@@ -30,6 +30,9 @@
 // Advanced settings plugin UID
 const TUid KAdvancedSettingsPluginUID = { 0x1028331D };
 
+// Help context UID
+const TUid KCscHelpUid = { 0x1020E566 };
+
 // Filename and path for bitmaps and icons.
 _LIT( KDriveZ, "z:" );
 _LIT( KCSCAifFile, "csc_aif.mif");
--- a/commsconfig/cscapplicationui/src/cscappui.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscapplicationui/src/cscappui.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -31,7 +31,6 @@
 #include <mspnotifychangeobserver.h>
 #include <gsfwviewuids.h>
 #include <apgwgnam.h>
-#include <csc.hlp.hrh>
 
 #include "cscappui.h"
 #include "csclogger.h"
@@ -502,7 +501,7 @@
                 embeddeeuid = windowName1->AppUid();
 
                 // Check if CSC is the child of GS
-                if ( KUidCscHelp == embeddeeuid )
+                if ( KUidCSCApp == embeddeeuid )
                     {
                     ret = ETrue;
                     gstask.EndTask();
@@ -515,3 +514,33 @@
     
     return ret;
     }
+
+// ---------------------------------------------------------------------------
+// Handle view change messages (e.g. from MeCo)
+// ---------------------------------------------------------------------------
+//
+MCoeMessageObserver::TMessageResponse CCSCAppUi::HandleMessageL(
+    TUint32 /*aClientHandleOfTargetWindowGroup*/, TUid aMessageUid,
+    const TDesC8& aMessageParameters )
+    {
+    CSCDEBUG( "CCSCAppUi::HandleMessageL - begin" ); 
+
+    MCoeMessageObserver::TMessageResponse ret = EMessageNotHandled;
+
+    if ( TUid::Uid( KUidApaMessageSwitchOpenFileValue ) == aMessageUid &&
+        aMessageParameters.Length() &&
+        aMessageParameters.Length() <= KMaxParamLength )
+        {
+        TBuf<KMaxParamLength> params;
+        params.Copy( aMessageParameters );  
+        iStartupHandler->SetStartupParametersL( params );
+            
+        iServiceView->InitializeWithStartupParametersL();
+        iServiceView->ExecuteStartupActionsL( EFalse, EFalse );
+        
+        ret = EMessageHandled;
+        }
+
+    CSCDEBUG( "CCSCAppUi::HandleMessageL - end" ); 
+    return ret;
+    }
--- a/commsconfig/cscapplicationui/src/cscservicecontainer.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscapplicationui/src/cscservicecontainer.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -28,15 +28,16 @@
 #include <coecntrl.h>
 #include <AknsUtils.h>
 #include <cchclient.h>
-#include <csc.hlp.hrh>
 #include <akncontext.h>
 #include <AknIconArray.h>
 #include <StringLoader.h>
 #include <aknViewAppUi.h>
 #include <AiwServiceHandler.h>
 #include <mspnotifychangeobserver.h>
+#include <cscengsettingscleanupplugininterface.h>
+
+#include <csxhelp/voip.hlp.hrh>
 #include <data_caging_path_literals.hrh>
-#include <cscengsettingscleanupplugininterface.h>
 
 #include "mcscservicecontainerobserver.h"
 #include "csclogger.h"
@@ -789,7 +790,7 @@
 void CCSCServiceContainer::GetHelpContext( 
     TCoeHelpContext& aContext ) const
     {
-    aContext.iMajor = KUidCscHelp;
+    aContext.iMajor = KCscHelpUid;
     aContext.iContext = KVOIP_HLP_CSC;
     }
 
--- a/commsconfig/cscsettingsui/inc/cscsettingsuimainview.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscsettingsui/inc/cscsettingsuimainview.h	Mon Mar 15 12:39:55 2010 +0200
@@ -68,6 +68,13 @@
          * @since S60 v3.2
          */
         void UpdateSoftkeysL( );
+        
+        /**
+         * Resets service settings when switching services.
+         * 
+         * @since S60 v5.2
+         */
+        void ResetViewL();
 
         
         // from base class CAknView
--- a/commsconfig/cscsettingsui/src/cscsettingsuiimpl.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscsettingsui/src/cscsettingsuiimpl.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -119,6 +119,12 @@
         iMainView = CCSCSettingsUiMainView::NewL( *iModel );
         AppUi()->AddViewL( iMainView ); // ownership is transferred
         }
+    else
+        {
+        // Already initialised. Reset view since we're probably switching
+        // between different service settings.
+        iMainView->ResetViewL();
+        }
     
     // Set initialization information data. The function leaves if given 
     // service does not exist.
--- a/commsconfig/cscsettingsui/src/cscsettingsuimaincontainer.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscsettingsui/src/cscsettingsuimaincontainer.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -19,14 +19,15 @@
 #include <aknlists.h>
 #include <coecntrl.h>
 #include <cchclient.h>
-#include <csc.hlp.hrh>
 #include <cmmanagerext.h>
 #include <StringLoader.h>
 #include <spdefinitions.h>
 #include <cscsettingsui.rsg>
 #include <aknlistquerydialog.h>
 #include <cvimpstsettingsstore.h>
+#include <csxhelp/voip.hlp.hrh>
 
+#include "cscconstants.h"
 #include "cscsettingsui.hrh"
 #include "cscsettingsuimodel.h"
 #include "cscsettingsuilogger.h"
@@ -290,7 +291,7 @@
 void CCSCSettingsUiMainContainer::GetHelpContext( 
     TCoeHelpContext& aContext ) const
     {
-    aContext.iMajor = KUidCscSettingsUiHelp;
+    aContext.iMajor = KCscHelpUid;
     aContext.iContext = KSERVTAB_HLP_SETTINGS;
     }
 
--- a/commsconfig/cscsettingsui/src/cscsettingsuimainview.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/cscsettingsui/src/cscsettingsuimainview.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -915,4 +915,30 @@
        
     CSCSETUIDEBUG( "CCSCSettingsUiMainView::HandleSettingsUiExitL - OUT" );
     }
- 
+
+// ---------------------------------------------------------------------------
+// CCSCSettingsUiMainView::ResetViewL
+// Resets service settings when switching services
+// ---------------------------------------------------------------------------
+//
+void CCSCSettingsUiMainView::ResetViewL()
+    {
+    CSCSETUIDEBUG( "CCSCSettingsUiMainView::ResetViewL - IN" );
+
+    // Create container when view is activated.
+    if ( !iContainer )
+        {
+        iContainer = new (ELeave) CCSCSettingsUiMainContainer( iModel );
+        iContainer->SetMopParent( this );
+        iContainer->ConstructL( ClientRect() );
+        AppUi()->AddToStackL( *this, iContainer );
+        iContainer->ListBox()->SetListBoxObserver( this );
+        }
+
+    SetTitleTextL();
+    UpdateSoftkeysL();
+    iContainer->UpdateContainerL();
+
+    CSCSETUIDEBUG( "CCSCSettingsUiMainView::ResetViewL - OUT" );
+    }
+
--- a/commsconfig/group/bld.inf	Fri Mar 12 15:42:09 2010 +0200
+++ b/commsconfig/group/bld.inf	Mon Mar 15 12:39:55 2010 +0200
@@ -21,16 +21,9 @@
 #include <platform_paths.hrh>
 
 PRJ_EXPORTS
-#ifdef __SERIES60_HELP
-../cscapplicationui/inc/csc.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH( csc.hlp.hrh )
-#endif
-
 ../rom/csc.iby CORE_APP_LAYER_IBY_EXPORT_PATH( csc.iby )
 
-// Temporarily move resource iby to core due missing localization
-//../rom/cscresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH( cscresources.iby )
-../rom/cscresources.iby CORE_APP_LAYER_IBY_EXPORT_PATH( cscresources.iby )
-
+../rom/cscresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH( cscresources.iby )
 
 //ROM SIS stub
 ../sis/commsconfig_stub.sis    /epoc32/data/z/system/install/commsconfig_stub.sis
@@ -45,6 +38,10 @@
 OPTION SOURCEFILE iconlist.txt
 END
 
+
+//  Help exports
+#include "../help/group/bld.inf"
+
 //subcomponent includes
 #include "../cscgsplugin/group/bld.inf"
 #include "../cscsipvoipcleanupplugin/group/bld.inf"
Binary file commsconfig/help/data/xhtml.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/help/group/bld.inf	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+* 
+* Contributors:
+* 
+* 
+* Description:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>				
+PRJ_EXPORTS
+:zip ../data/xhtml.zip   /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip   /epoc32/winscw/c/resource/ overwrite
+
+../inc/voip.hlp.hrh	MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/voip.hlp.hrh)
+../rom/cscapplicationuihelps_variant.iby		CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(cscapplicationuihelps_variant.iby)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/help/inc/voip.hlp.hrh	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+	
+//
+// voip.hlp.hrh generated by CSXHelp Utilities.
+//           
+
+#ifndef __VOIP_HLP_HRH__
+#define __VOIP_HLP_HRH__
+
+_LIT(KSMSVO_HLP_CS_VIDEO_AND_XSP_VOIP, "SMSVO_HLP_CS_VIDEO_AND_XSP_VOIP"); // 
+_LIT(KVOIP_HLP_CSC, "VOIP_HLP_CSC"); // 
+_LIT(KVOIP_HLP_SERVCATALOG, "VOIP_HLP_SERVCATALOG"); // 
+_LIT(KSERVTAB_HLP_SETTINGS, "SERVTAB_HLP_SETTINGS"); // 
+
+#endif 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsconfig/help/rom/cscapplicationuihelps_variant.iby	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,11 @@
+#ifndef __CSCHELPS_VARIANT_IBY__
+#define __CSCHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x1020E566\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x1020E566\contents.zip)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x1020E566\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x1020E566\index.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x1020E566\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x1020E566\keywords.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x1020E566\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x1020E566\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- a/convergedconnectionhandler/cchclientapi/cchuinotif/group/cchuinotif.mmp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/cchuinotif/group/cchuinotif.mmp	Mon Mar 15 12:39:55 2010 +0200
@@ -40,6 +40,7 @@
 HEADER
 TARGETPATH              APP_RESOURCE_DIR
 // LANG                 SC
+LANGUAGE_IDS
 END // RESOURCE
 
 USERINCLUDE     		../inc
--- a/convergedconnectionhandler/cchclientapi/group/cch.mmp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/group/cch.mmp	Mon Mar 15 12:39:55 2010 +0200
@@ -41,6 +41,7 @@
 SOURCE                  cchuiglobalqueryhandler.cpp
 SOURCE                  cchuiclientobserver.cpp
 SOURCE                  cchuitimer.cpp
+SOURCE			cchserviceimplasynchroniser.cpp
 
 USERINCLUDE             ../inc
 USERINCLUDE             ../../inc           // CCH's internal headers
--- a/convergedconnectionhandler/cchclientapi/inc/cchserviceimpl.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/inc/cchserviceimpl.h	Mon Mar 15 12:39:55 2010 +0200
@@ -30,7 +30,7 @@
 
 class CCchClientObserver;
 class CCchImpl;
-
+class CCchServiceImplAsynchroniser;
 #ifdef CCHAPI_USE_CCHUI
 class CCchUiPrivateApi;
 #else 
@@ -269,6 +269,11 @@
 	 * CCH connectivity UI handling private API
 	 */	
 	CCchUiPrivateApi& iCchUi;
+	
+	/**
+	 * CCH server request handler
+	 */	
+	CCchServiceImplAsynchroniser* iAsynchroniser;
 
 #ifdef CCHUNITTEST
     friend class UT_CCchService;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchclientapi/inc/cchserviceimplasynchroniser.h	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+#ifndef CCHSERVICEIMPLASYNCHRONISER_H
+#define CCHSERVICEIMPLASYNCHRONISER_H
+
+#include <e32base.h>	// For CActive, link against: euser.lib
+#include <e32std.h>		// For RTimer, link against: euser.lib
+//from cchclient
+#include <cchtypes.h>
+#include "cchimpl.h"
+#include "cch.h"
+
+class CCchImpl;
+
+#ifdef CCHAPI_USE_CCHUI
+class CCchUiPrivateApi;
+#else 
+#define CCchUiPrivateApi TInt 
+#endif
+
+
+
+NONSHARABLE_CLASS ( CCchServiceImplAsynchroniser) : public CActive
+    {
+public:
+
+    enum TCchServiceImplState
+        {
+        EIdle = 0,
+        EEnabling = 1,
+        EDisabling = 2 
+        };
+    // Cancel and destroy
+    ~CCchServiceImplAsynchroniser();
+
+    // Two-phased constructor.
+    static CCchServiceImplAsynchroniser* NewL(CCchImpl& aCch, TInt iServiceId, CCchUiPrivateApi& aCchUi);
+
+    // Two-phased constructor.
+    static CCchServiceImplAsynchroniser* NewLC(CCchImpl& aCch, TInt iServiceId, CCchUiPrivateApi& aCchUi);
+
+    void Enable( TCCHSubserviceType aType );
+    
+    void Disable( TCCHSubserviceType aType );
+
+private:
+    // C++ constructor
+    CCchServiceImplAsynchroniser(CCchImpl& aCch, TInt iServiceId, CCchUiPrivateApi& aCchUi);
+
+    // Second-phase constructor
+    void ConstructL();
+
+private:
+    // From CActive
+    // Handle completion
+    void RunL();
+
+    // How to cancel me
+    void DoCancel();
+
+    // Override to handle leaves from RunL(). Default implementation causes
+    // the active scheduler to panic.
+    TInt RunError(TInt aError);
+
+private:
+    CCchImpl& iCch;
+    TInt iServiceId;
+    CCchUiPrivateApi& iCchUi; 
+    TCchServiceImplState iState;
+    };
+
+#endif // CCHSERVICEIMPLASYNCHRONISER_H
--- a/convergedconnectionhandler/cchclientapi/inc/cchuiconnectionhandler.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/inc/cchuiconnectionhandler.h	Mon Mar 15 12:39:55 2010 +0200
@@ -120,6 +120,14 @@
      * @param aIapId access point id to be removed
      */            
     void RemoveConnectionL( const TDesC& aServiceName, TInt aIapId );
+    
+    /**
+     * Returns ETrue if wlan search (query) is ongoing.
+     *
+     * @since S60 5.0
+     * @return ETrue if wlan search ongoing.
+     */ 
+    TBool SearchWlanOngoing();
        
 private:
 
@@ -234,6 +242,11 @@
      */
     RConnectionMonitor iConnMon;
     
+    /**
+     * Flag for determining if search wlan search (query) is ongoing
+     */
+    TBool iSearchWlanOngoing;
+    
     CCHUI_UNIT_TEST( UT_CchUi )
     };
 
--- a/convergedconnectionhandler/cchclientapi/src/cchserviceimpl.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/src/cchserviceimpl.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -24,6 +24,7 @@
 #include "cchimpl.h"
 #include "cchclientobserver.h"
 #include "cchclientserverinternal.h"
+#include "cchserviceimplasynchroniser.h"
 
 #ifdef CCHAPI_USE_CCHUI
 #include "cchuiprivateapi.h"
@@ -79,6 +80,7 @@
     	RemoveObserver();
     	}
     delete iObserver;
+    delete iAsynchroniser;
     }
 
 // ---------------------------------------------------------------------------
@@ -90,6 +92,7 @@
     {
     CCHLOGSTRING( "CCchServiceImpl::ConstructL: IN" );
     iObserver = CCchClientObserver::NewL( *this );
+    iAsynchroniser = CCchServiceImplAsynchroniser::NewL(iCch, iServiceId, iCchUi );
     CCHLOGSTRING( "CCchServiceImpl::ConstructL: OUT" );
     }
 // ---------------------------------------------------------------------------
@@ -134,26 +137,9 @@
     {
     CCHLOGSTRING( "CCchServiceImpl::Enable: IN" );
 	
-    TRequestStatus status = KErrNone;
-	TServiceSelection selection( iServiceId, aType );
-    iCch.CchClient().EnableService( selection, status, EFalse );
-    //even the cchclient api seems to be asynchronous, 
-	//this method is completed immediately
-	User::WaitForRequest( status );
-    CCHLOGSTRING( "CCchServiceImpl::Enable: OUT" );
-    
-    if ( iCch.ConnectivityDialogsAllowed() )
-        {        
-        TRAPD( err, iCchUi.ManualEnableResultL( 
-            iServiceId, status.Int() ) );
-        
-        if( err != KErrNone )
-            {
-            return KErrNotReady;
-            }
-        }
-    
-    return status.Int();
+    iAsynchroniser->Enable(aType);
+	CCHLOGSTRING( "CCchServiceImpl::Enable: OUT" );
+    return KErrNone;
     }
 
 // ---------------------------------------------------------------------------
@@ -163,15 +149,10 @@
 TInt CCchServiceImpl::Disable( TCCHSubserviceType aType )
     {
     CCHLOGSTRING( "CCchServiceImpl::Disable: IN" );
-    
-    TRequestStatus status = KErrNone;
-	TServiceSelection selection( iServiceId, aType );
-    iCch.CchClient().DisableService( selection, status );
-    //even the cchclient api seems to be asynchronous, 
-	//this method is completed immediately
-	User::WaitForRequest( status );
+  
+    iAsynchroniser->Disable(aType);
     CCHLOGSTRING( "CCchServiceImpl::Disable: OUT" );
-    return status.Int();
+    return KErrNone;
     }
 
 // ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convergedconnectionhandler/cchclientapi/src/cchserviceimplasynchroniser.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  cch client api implementation
+*
+*/
+
+
+#include "cchserviceimplasynchroniser.h"
+#include "cchlogger.h"
+
+CCchServiceImplAsynchroniser::CCchServiceImplAsynchroniser(CCchImpl& aCch, TInt aServiceId, CCchUiPrivateApi& aCchUi) :
+    CActive(EPriorityStandard),// Standard priority
+    iCch( aCch ),
+    iServiceId( aServiceId ),
+    iCchUi( aCchUi ),
+    iState ( EIdle )
+
+    {
+    }
+
+CCchServiceImplAsynchroniser* CCchServiceImplAsynchroniser::NewLC(CCchImpl& aCch, TInt aServiceId, CCchUiPrivateApi& aCchUi)
+    {
+    CCchServiceImplAsynchroniser* self =
+            new (ELeave) CCchServiceImplAsynchroniser(aCch, aServiceId, aCchUi );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+CCchServiceImplAsynchroniser* CCchServiceImplAsynchroniser::NewL(CCchImpl& aCch, TInt aServiceId, CCchUiPrivateApi& aCchUi)
+    {
+    CCchServiceImplAsynchroniser* self =
+            CCchServiceImplAsynchroniser::NewLC(aCch, aServiceId, aCchUi );
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+void CCchServiceImplAsynchroniser::Enable( TCCHSubserviceType aType )
+    {
+    CCHLOGSTRING( "CCchServiceImplAsynchroniser::Enable IN" );
+    if (iState == EIdle)
+        {
+        iState = EEnabling;
+        TServiceSelection selection( iServiceId, aType );
+        SetActive();
+        iCch.CchClient().EnableService( selection, iStatus, EFalse );
+        }
+    else
+        {
+        CCHLOGSTRING( "CCchServiceImplAsynchroniser already active" );
+        }
+    CCHLOGSTRING( "CCchServiceImplAsynchroniser::Enable OUT" );
+    }
+
+void CCchServiceImplAsynchroniser::Disable( TCCHSubserviceType aType )
+    {
+    CCHLOGSTRING( "CCchServiceImplAsynchroniser::Disable IN" );
+    if (iState == EIdle)
+        {
+        iState = EDisabling;
+        TRequestStatus status = KErrNone;
+        TServiceSelection selection( iServiceId, aType );
+        SetActive();
+        iCch.CchClient().DisableService( selection, iStatus );
+        }
+    else
+        {
+        CCHLOGSTRING( "CCchServiceImplAsynchroniser already active" );
+        }
+    CCHLOGSTRING( "CCchServiceImplAsynchroniser::Disable OUT" );
+    }
+
+
+void CCchServiceImplAsynchroniser::ConstructL()
+    {
+       CActiveScheduler::Add(this); // Add to scheduler
+    }
+
+CCchServiceImplAsynchroniser::~CCchServiceImplAsynchroniser()
+    {
+    Cancel(); // Cancel any request, if outstanding
+    // Delete instance variables if any
+    }
+
+void CCchServiceImplAsynchroniser::DoCancel()
+    {
+
+    }
+
+void CCchServiceImplAsynchroniser::RunL()
+    {
+	CCHLOGSTRING( "CCchServiceImplAsynchroniser::RunL IN" );
+    if (iStatus.Int() != KErrCancel)
+        {
+        switch (iState)
+            {
+            case EEnabling:
+                {
+                if ( iCch.ConnectivityDialogsAllowed() )
+                    {
+                    iCchUi.ManualEnableResultL( iServiceId, iStatus.Int() );
+                    }
+                CCHLOGSTRING( "CCchServiceImplAsynchroniser::RunL EEnabling done" );
+                iState = EIdle;
+                break;
+                }
+            case EDisabling:
+                {
+				CCHLOGSTRING( "CCchServiceImplAsynchroniser::RunL EDisabling done" );
+                iState = EIdle;
+                break;
+                }
+            default:
+                {
+                break;
+                }
+
+            }
+        }
+    iState = EIdle;
+    CCHLOGSTRING( "CCchServiceImplAsynchroniser::RunL OUT" );
+    }
+
+TInt CCchServiceImplAsynchroniser::RunError(TInt aError)
+    {
+    return aError;
+    }
--- a/convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/src/cchuiapiimpl.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -1142,9 +1142,10 @@
         }
     
     // Check that dialog showing is allowed.
-    __ASSERT_ALWAYS( StateIsAllowed( state ) || 
-            KCCHErrorInvalidSettings == aServiceStatus.Error(),
-        User::Leave( KErrNotSupported ) );
+    __ASSERT_ALWAYS( ( StateIsAllowed( state ) || 
+       KCCHErrorInvalidSettings == aServiceStatus.Error() ) &&
+       !iConnectionHandler->SearchWlanOngoing(),
+       User::Leave( KErrNotSupported ) );
     
     switch ( aServiceStatus.Error() )
         {
--- a/convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchclientapi/src/cchuiconnectionhandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -42,7 +42,8 @@
     CCchUiCchHandler& aCchHandler,
     CCchUiSpsHandler& aSpsHandler ):
     iCCHHandler( aCchHandler ),
-    iSpsHandler( aSpsHandler )
+    iSpsHandler( aSpsHandler ),
+    iSearchWlanOngoing( EFalse )
     {
     }
 
@@ -108,9 +109,14 @@
     CCHUIDEBUG( 
         "CCchUiConnectionHandler::SearchAccessPointsL - begin search wlan" );
         
+    // Set flag which indicates that search wlan query is open
+    iSearchWlanOngoing = ETrue;
+    
     TBool ret = iConnUiUtils->SearchWLANNetwork( 
         ssid, connectionMode, securityMode );
         
+    iSearchWlanOngoing = EFalse;
+    
     if ( !ret )
         {        
         //ret is ETrue if user pressed OK softkey. Otherwise leave
@@ -717,6 +723,19 @@
     }
 
 // ---------------------------------------------------------------------------
+// Returns ETrue if wlan search (query) is ongoing.
+// ---------------------------------------------------------------------------
+//
+TBool CCchUiConnectionHandler::SearchWlanOngoing()
+    {    
+    CCHUIDEBUG2( "CCchUiConnectionHandler::SearchWlanOngoing ongoing=%d",
+        iSearchWlanOngoing );
+    
+    return iSearchWlanOngoing;
+    }
+
+
+// ---------------------------------------------------------------------------
 // Creates service snap
 // ---------------------------------------------------------------------------
 //
--- a/convergedconnectionhandler/cchserver/group/cchserver.mmp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/group/cchserver.mmp	Mon Mar 15 12:39:55 2010 +0200
@@ -31,7 +31,7 @@
 VENDORID                VID_DEFAULT
 SOURCEPATH              ../src
 SOURCE                  cchconnmonhandler.cpp
-SOURCE			cchcommdbwatcher.cpp
+SOURCE                  cchcommdbwatcher.cpp
 SOURCE                  cchrequeststorage.cpp
 SOURCE                  cchspshandler.cpp
 SOURCE                  cchserverbase.cpp
@@ -50,7 +50,6 @@
 SOURCE                  cchwakeupeventnotifier.cpp
 SOURCE                  cchstartupcounter.cpp
 SOURCE                  cchactivescheduler.cpp
-SOURCE                  cchphonestartupmonitor.cpp
 
 START RESOURCE ../data/cch.rss
 HEADER
@@ -67,7 +66,7 @@
 LIBRARY                 euser.lib
 LIBRARY                 flogger.lib         // for logging purposes
 LIBRARY                 connmon.lib
-LIBRARY			cmmanager.lib
+LIBRARY                 cmmanager.lib
 LIBRARY                 ecom.lib            // for plug-ins
 LIBRARY                 serviceprovidersettings.lib
 LIBRARY                 aknnotify.lib
--- a/convergedconnectionhandler/cchserver/inc/cchservicehandler.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/inc/cchservicehandler.h	Mon Mar 15 12:39:55 2010 +0200
@@ -29,7 +29,6 @@
 #include "cchservicenotifier.h"
 #include "cchclientserver.h"
 #include "cchcommdbwatcherobserver.h"
-#include "cchphonestartupmonitor.h"
 
 // CONSTANTS
 // None
@@ -48,7 +47,6 @@
 class CCchUIHandler;
 class CCchWlanExtension;
 class CCCHCommDbWatcher;
-class CCCHPhoneStartupMonitor;
 
 // DATA TYPES
 typedef RPointerArray<CCCHServiceInfo> RServiceArray;
@@ -392,16 +390,38 @@
     void CancelPluginUnloadTimer();
     
     /**
+     * Starts handle notify delay timer
+     * @param aFunction The function to call after the time out
+     */
+    void StartHandleNotifyDelayTimer();
+
+    /**
+     * Cancels the handler notify delay timer
+     */
+    void CancelHandleNotifyDelayTimer();
+    
+    /**
      * Plugin unload callback
      * @param aSelf this object
      */
     static TInt PluginUnloadEvent( TAny* aSelf );
     
     /**
+     * Handle notify event callback
+     * @param aSelf this object
+     */
+    static TInt HandleNotifyEvent( TAny* aSelf );
+    
+    /**
      * Handles plugin unload event
      */
     void HandlePluginUnload();
-        
+    
+    /**
+     * Handles delayed notify event
+     */
+    void HandleDelayedNotifyEvent();
+    
     /**
      * From MCCHCommDbWatcherObserver, handles commsdb events
      */
@@ -455,11 +475,6 @@
     CCchUIHandler*                  iCchUIHandler;
     
     /**
-     * Phone startup monitor. Owned.
-     */
-    CCchPhoneStartupMonitor *       iPhoneStartupMonitor;
-    
-    /**
      * Connection recovery timer. Owned.
      */
     CPeriodic* iConnectionRecoveryTimer;
@@ -470,6 +485,11 @@
     CPeriodic* iPluginUnloadTimer;
     
     /**
+     * Handle notify delay timer. Owned.
+     */
+    CPeriodic* iHandleNotifyDelayTimer;
+    
+    /**
      * Recovery trial counter
      */
     TInt iConnectionRecoveryTry;
@@ -498,6 +518,11 @@
      * Disable SPSettings notifications
      */
     TBool iCancelNotify;
+    
+    /**
+     * Service id of delayed handle notify event
+     */
+    TServiceId iDelayedHandleNotifyServiceId;
     };
 
 #endif // C_CCHSERVICEHANDLER_H
--- a/convergedconnectionhandler/cchserver/inc/cchuihandler.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/inc/cchuihandler.h	Mon Mar 15 12:39:55 2010 +0200
@@ -192,11 +192,6 @@
      * Note handler
      */
     CCchNoteHandler* iNoteHandler;
-
-    /**
-     * Are we out of cs network?
-     */
-    TBool iVoIPEmergencyNoteState;
     
     /**
      * ETel observer
--- a/convergedconnectionhandler/cchserver/src/cchservicehandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchservicehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -48,6 +48,9 @@
 const TInt KCCHFifthRecovery    = 60000000;
 
 const TInt KCCHPluginUnloadTimeout = 5000000;
+
+const TInt KCCHHandleNotifyDelay = 1000000;
+
 // MACROS
 // None
 
@@ -89,10 +92,10 @@
     {
     iNotifier = CSPNotifyChange::NewL( *this );
     iCchUIHandler = CCchUIHandler::NewL( iServer, *this );
-    iPhoneStartupMonitor = CCchPhoneStartupMonitor::NewL( *iCchUIHandler );
     iConnectionRecoveryTimer = CPeriodic::NewL( CPeriodic::EPriorityStandard );
     iCommDbWatcher = CCCHCommDbWatcher::NewL( *this );
     iPluginUnloadTimer = CPeriodic::NewL( CPeriodic::EPriorityStandard );
+    iHandleNotifyDelayTimer = CPeriodic::NewL( CPeriodic::EPriorityStandard );
     iRecoveryInterval.Append( KCCHFirstRecovery );
     iRecoveryInterval.Append( KCCHSecondRecovery );
     iRecoveryInterval.Append( KCCHThirdRecovery );
@@ -134,10 +137,10 @@
         iCchUIHandler->Destroy();
         }
 
-    delete iPhoneStartupMonitor;
     delete iWlanExtension;
     delete iConnectionRecoveryTimer;
     delete iPluginUnloadTimer;
+    delete iHandleNotifyDelayTimer;
     delete iCommDbWatcher;
 
     if( iNotifier )
@@ -523,6 +526,44 @@
     }
 
 // -----------------------------------------------------------------------------
+// CCCHServiceHandler::StartHandleNotifyDelayTimer
+// -----------------------------------------------------------------------------
+//
+void CCCHServiceHandler::StartHandleNotifyDelayTimer( )
+    {
+    CCHLOGSTRING2( "CCCHServiceHandler[0x%x]::StartHandleNotifyDelayTimer; IN", this );
+    
+    CancelHandleNotifyDelayTimer();
+    if( !iHandleNotifyDelayTimer->IsActive() )
+        {
+        iHandleNotifyDelayTimer->Start( 
+            KCCHHandleNotifyDelay , 
+            0, 
+            TCallBack( CCCHServiceHandler::HandleNotifyEvent, this ) );
+        
+        CCHLOGSTRING( "CCCHServiceHandler::StartHandleNotifyDelayTimer; timer started");
+        }
+    
+    CCHLOGSTRING( "CCCHServiceHandler::StartHandleNotifyDelayTimer; OUT" );   
+    }
+
+// -----------------------------------------------------------------------------
+// CCCHServiceHandler::CancelHandleNotifyDelayTimer
+// -----------------------------------------------------------------------------
+//
+void CCCHServiceHandler::CancelHandleNotifyDelayTimer()
+    {
+    CCHLOGSTRING2( "CCCHServiceHandler[0x%x]::CancelHandleNotifyDelayTimer; IN", this );
+
+    if( iHandleNotifyDelayTimer->IsActive() )
+        {
+        iHandleNotifyDelayTimer->Cancel();
+        }
+    
+    CCHLOGSTRING( "CCCHServiceHandler::CancelHandleNotifyDelayTimer; OUT" );        
+    }
+
+// -----------------------------------------------------------------------------
 // CCCHServiceHandler::PluginUnloadEvent
 // -----------------------------------------------------------------------------
 //
@@ -536,6 +577,21 @@
     }
 
 // -----------------------------------------------------------------------------
+// CCCHServiceHandler::HandleNotifyEvent
+// -----------------------------------------------------------------------------
+//
+TInt CCCHServiceHandler::HandleNotifyEvent( TAny* aSelf )
+    {
+    CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyEvent; IN" );
+  
+    CCHLOGSTRING( "CCCHServiceHandler::PluginUnloadEvent; IN" );
+    CCCHServiceHandler* self = static_cast<CCCHServiceHandler*>( aSelf );
+    self->HandleDelayedNotifyEvent();
+    CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyEvent; OUT" );
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
 // CCCHServiceHandler::HandlePluginUnload
 // -----------------------------------------------------------------------------
 //
@@ -549,6 +605,63 @@
     CCHLOGSTRING( "CCCHServiceHandler::HandlePluginUnload OUT" );
     }
 
+// -----------------------------------------------------------------------------
+// CCCHServiceHandler::HandleDelayedNotifyEvent
+// -----------------------------------------------------------------------------
+//
+void CCCHServiceHandler::HandleDelayedNotifyEvent()
+    {
+    CCHLOGSTRING2( "CCCHServiceHandler[0x%x]::HandleDelayedNotifyEvent IN",
+                   this );
+    
+    iDelayedHandleNotifyServiceId = 0;
+    CancelHandleNotifyDelayTimer();
+    
+    TServiceSelection selection;
+    selection.iServiceId = iDelayedHandleNotifyServiceId;
+    TInt index( ServiceExist( selection ) );
+
+    TRAPD( err, 
+        {
+        if ( KErrNotFound != index )
+            {
+            iServices[ index ]->UpdateL( ETrue );
+            }
+        else
+            {
+            TCCHService service;
+            iServer.SPSHandler().GetServiceInfoL( 
+                iDelayedHandleNotifyServiceId, service );
+            AddServiceL( service );
+            } 
+        } );
+
+    //Check if service is already marked as enabled, and enable it
+    if ( KErrNone == err )
+        {
+        index = ServiceExist( selection );
+        if ( KErrNotFound != index )
+            {
+            if( iServices[ index ]->StartupFlagSet() && 
+                ECCHEnabled != iServices[ index ]->GetState() )
+                {
+                iCancelNotify = EFalse;
+                EnableService( selection, EFalse );
+                iCancelNotify = ETrue;
+                }
+            }
+        }
+        
+     // If service has removed, err must be other than none 
+     // and we have to update all services
+    if ( KErrNone != err )
+        {
+        TRAP_IGNORE( UpdateL( ETrue ) );
+        }
+                
+    CCHLOGSTRING( "CCCHServiceHandler::HandleDelayedNotifyEvent OUT" );
+    }
+
 // ---------------------------------------------------------------------------
 // CCCHServiceHandler::Exists
 // (other items were commented in a header).
@@ -1522,49 +1635,11 @@
 //
 void CCCHServiceHandler::HandleNotifyChange( TServiceId aServiceId )
     {
-    CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyChange: IN" );
-    TServiceSelection selection;
-    selection.iServiceId = aServiceId;
-    TInt index( ServiceExist( selection ) );
-    TRAPD( err, 
-        {
-        if ( KErrNotFound != index )
-            {
-            iServices[ index ]->UpdateL( ETrue );
-            }
-        else
-            {
-            TCCHService service;
-            iServer.SPSHandler().GetServiceInfoL( aServiceId, service );
-            AddServiceL( service );
-            } 
-        } );
+    CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyChange IN" );
     
-    //Check if service is already marked as enabled, and enable it
-    if ( KErrNone == err )
-        {
-        index = ServiceExist( selection );
-        if ( KErrNotFound != index )
-            {
-            CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyChange: service found" );
-            if( iServices[ index ]->StartupFlagSet() && 
-                ECCHEnabled != iServices[ index ]->GetState() )
-                {
-                CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyChange: enabling..." );
-                iCancelNotify = EFalse;
-                EnableService( selection, EFalse );
-                iCancelNotify = ETrue;
-                }
-            }
-        }
-    
-    // If service has removed, err must be other than none 
-    // and we have to update all services
-    if ( KErrNone != err )
-        {
-        TRAP_IGNORE( UpdateL( ETrue ) );
-        }
-    CCHLOGSTRING( "CCCHServiceHandler::HandleNotifyChange: OUT" );
+    CancelHandleNotifyDelayTimer();
+    StartHandleNotifyDelayTimer();
+    iDelayedHandleNotifyServiceId = aServiceId;
     }
 
 // ---------------------------------------------------------------------------
--- a/convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchsubserviceinfo.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -149,10 +149,9 @@
 // ---------------------------------------------------------------------------
 //
 TCCHSubserviceType CCCHSubserviceInfo::Type()
-    {
-    GetServiceNetworkInfo();
-    return iType;
-    }
+    { 
+	return iType;
+	}
     
 // ---------------------------------------------------------------------------
 // CCCHSubserviceInfo::SetState
--- a/convergedconnectionhandler/cchserver/src/cchuihandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/cchserver/src/cchuihandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -172,7 +172,6 @@
 void CCchUIHandler::MobileNetworkNoService(  )
     {
     CCHLOGSTRING( "CCchUIHandler::MobileNetworkNoService" );
-    TRAP_IGNORE( ShowEmergencyWarningNoteL( EFalse ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -205,19 +204,10 @@
              KCCHVoIPEmergencyWarningShown, emergencyWarningShown );
         if( err == KErrNone )
             {
-            if ( !iVoIPEmergencyNoteState )
-                {
-                iVoIPEmergencyNoteState = 
-                    iCchEtelNetworkStatusNotifier->IsNetworkStatusNoService();    
-                }
             if( !emergencyWarningShown )
                 {
                 ShowEmergencyWarningNoteL( ETrue );
                 }
-            else if( iVoIPEmergencyNoteState )
-                {
-                ShowEmergencyWarningNoteL( EFalse );
-                }
             }
         }
     else if ( !aStatus && iVoIPSmallIndicatorShown )
@@ -302,20 +292,7 @@
                 SecondaryDisplay::ECmdShowVoipEmergencyCallReadinessQuery );
             iServer.SetVoIPEmergencyNoteShown( ETrue );
             }
-        else
-            {
-            TInt voIPEmergencyNoteDoNotShow( 0 );
-            iCchRepository->Get( 
-                KCCHVoIPShowEmergencyWarningOnOff, voIPEmergencyNoteDoNotShow );
-            if ( voIPEmergencyNoteDoNotShow && !iServer.VoIPEmergencyNoteShown() )
-                {
-                iServer.SetVoIPEmergencyNoteShown( ETrue );
-                iNoteHandler->LaunchGlobalNoteL(
-                    R_QTN_VOIP_EM_CALL_ERROR_NOTE_NO_CS, 
-                    R_AVKON_SOFTKEYS_OK_EMPTY,
-                    SecondaryDisplay::ECmdShowVoipEmergencyCallErrorNoteNoCsQuery );
-                }
-            }
+
         }
     } 
 
--- a/convergedconnectionhandler/group/bld.inf	Fri Mar 12 15:42:09 2010 +0200
+++ b/convergedconnectionhandler/group/bld.inf	Mon Mar 15 12:39:55 2010 +0200
@@ -22,9 +22,7 @@
 PRJ_EXPORTS
 ../rom/cch.iby CORE_APP_LAYER_IBY_EXPORT_PATH( cch.iby )
 
-// Temporarily move resource iby to core due missing localization
-//../rom/cchresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH( cchresources.iby )
-../rom/cchresources.iby CORE_APP_LAYER_IBY_EXPORT_PATH( cchresources.iby )
+../rom/cchresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH( cchresources.iby )
 
 #include "../cchserver/group/bld.inf"
 #include "../cchclient/group/bld.inf"
--- a/sipvoipprovider/src/svpsessionbase.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/sipvoipprovider/src/svpsessionbase.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -284,7 +284,13 @@
             }
         
         ExecCbCallStateChanged( MCCPCallObserver::ECCPStateDisconnecting );
-        ExecCbCallStateChanged( MCCPCallObserver::ECCPStateIdle );
+
+        TRAPD( errTimer, StartTimerL( KSVPTerminatingTime, KSVPRemoteEndDiedExpired ));
+	    if ( errTimer )
+		    {
+			SVPDEBUG2("CSVPSessionBase::No Answer timer leave with error code %d",
+			        errTimer )
+            }
         }
     
     if ( KSVPTerminationTimerExpired == aTimerId )
--- a/voipplugins/accountcreationplugin/data/accountcreationplugin.rss	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/accountcreationplugin/data/accountcreationplugin.rss	Mon Mar 15 12:39:55 2010 +0200
@@ -109,11 +109,13 @@
           {
           command = EAknSoftkeySelect;
           txt = qtn_voip_option_service_details;
+          flags = EEikMenuItemSpecific;
           },
         MENU_ITEM
           {
           command = EAcpDownload;
           txt = qtn_voip_option_service_download_service;
+          flags = EEikMenuItemSpecific;
           },
         MENU_ITEM 
           { 
--- a/voipplugins/accountcreationplugin/engine/src/acphttphandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/accountcreationplugin/engine/src/acphttphandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -273,7 +273,7 @@
     TCommDbConnPref pref;
     pref.SetDirection( ECommDbConnectionDirectionOutgoing );
     pref.SetBearerSet( KCommDbBearerLAN | KCommDbBearerCSD |
-        KCommDbBearerWcdma );
+        KCommDbBearerWcdma | KCommDbBearerWLAN );
     
     // Show connection prompt only once.
     if ( !iPromptShown )
--- a/voipplugins/accountcreationplugin/src/acpproviderlistview.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/accountcreationplugin/src/acpproviderlistview.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -467,7 +467,7 @@
     switch ( aEventType )
         {
         case EEventEnterKeyPressed:
-        case EEventItemDoubleClicked:
+        case EEventItemSingleClicked:
             HandleCommandL( EAknSoftkeySelect );
             break;
         default:
--- a/voipplugins/sipconnectionprovider/inc/scppresencehandler.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scppresencehandler.h	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-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"
@@ -104,6 +104,14 @@
     void HandleSipConnectionEvent( const TUint32 aProfileId,
                                    TScpConnectionEvent aSipEvent );
     
+    /**
+     * Query is starting to ALR allowed.
+     * Client can start ALR later if needed to do something first
+     * 
+     * @return ETrue if allowed.
+     */
+    TBool IsSipProfileAllowedToStartAlr();
+    
 public: // From MScpSubServiceObserver
     /**
      * Handle SubService state change.
--- a/voipplugins/sipconnectionprovider/inc/scpprofilehandler.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scpprofilehandler.h	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-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"
@@ -206,6 +206,13 @@
                                   const TDesC8& aPassword,
                                   TBool aSetPassword );
     
+    /**
+     * Informs SIP to allow ALR migration
+	 *
+     * @param aProfileId SIP profile ID
+     */    
+    void StartAlrMigration( TUint32 aProfileId );
+    
 #ifdef _DEBUG
     void GetDebugInfo( TDes& aInfo ) const;
 #endif                                          
@@ -286,6 +293,14 @@
      */  
     void HandleSipConnectionEvent( TUint32 aProfileId,
                                    TScpConnectionEvent aSipEvent );
+    
+    /**
+     * Query is starting to ALR allowed.
+     * Client can start ALR later if needed to do something first
+     * 
+     * @return ETrue if allowed.
+     */
+    TBool IsSipProfileAllowedToStartAlr();
    
 private:
 
@@ -350,6 +365,16 @@
      */
     CIpVmbxInterface* iVmbxInterface;
 
+    /**
+	 * New IapId received in ALR event
+	 */
+    TUint iNewAlrIapId;
+    
+    /**
+     * Is ALR Migration Allowed To Start Immediately
+     */
+    TBool iAlrAllowedToStartImmediately;
+    
 // This need to be cleaned to separate macro/header
 #ifdef _DEBUG
     friend class T_CScpServiceManager;
--- a/voipplugins/sipconnectionprovider/inc/scpservicehandlerbase.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scpservicehandlerbase.h	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-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"
@@ -105,7 +105,16 @@
      */
     virtual void HandleSipConnectionEvent( const TUint32 aProfileId,
                                            TScpConnectionEvent aSipEvent ) = 0;
-
+    
+    /**
+     * From base class MScpSipConnectionObserver
+     * Query is starting to ALR allowed.
+     * Client can start ALR later if needed to do something first
+     * 
+     * @return ETrue if allowed.
+     */
+    virtual TBool IsSipProfileAllowedToStartAlr();
+    
     /**
      * Forced sip profile disable call back
      * @param aSelf this object
--- a/voipplugins/sipconnectionprovider/inc/scpsipconnectionobserver.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/inc/scpsipconnectionobserver.h	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-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"
@@ -39,7 +39,15 @@
      */
     virtual void HandleSipConnectionEvent( TUint32 aProfileId,
                                            TScpConnectionEvent aEvent ) = 0;
-        
+      
+    /**
+     * Query is starting to ALR allowed.
+     * Client can start ALR later if needed to do something first
+     * 
+     * @return ETrue if allowed.
+     */
+    virtual TBool IsSipProfileAllowedToStartAlr() = 0;
+    
     };
 
 /**
--- a/voipplugins/sipconnectionprovider/src/scppresencehandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scppresencehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-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"
@@ -39,7 +39,7 @@
 #include <ximpcontext.h>
 #include <ximpstatus.h>
 #include <pressettingsapi.h> //presence settings
-#include <XdmSettingsApi.h>
+#include <xdmsettingsapi.h>
 #include <cvimpstsettingsstore.h>
 
 #include "scppresencehandler.h"
@@ -322,6 +322,14 @@
     SCPLOGSTRING( "CScpPresenceHandler::HandleSipConnectionEvent OUT" );
     }    
 
+// -----------------------------------------------------------------------------
+// CScpPresenceHandler::HandleSipConnectionEvent
+// -----------------------------------------------------------------------------
+//
+TBool CScpPresenceHandler::IsSipProfileAllowedToStartAlr()
+    {
+    return EFalse;
+    }
 
 // ======================= From MXIMPContextObserver ===========================
 
@@ -695,7 +703,6 @@
     
     MPresenceInfoFieldValueEnum* enumField2 = 
         iFeature->PresenceObjectFactory().NewEnumInfoFieldLC();
-    
     TInt availabilityEnum(0);
     RBuf customMessage;
     CleanupClosePushL( customMessage );
@@ -910,8 +917,19 @@
     // Unbind request complete
     else if ( reqType == EUnBindReq && EUnBinding == iPresenceState )
         {
-        SCPLOGSTRING( "CScpPresenceHandler::HandleRequestCompleteEvent status offline" );       
-        DeregisterNow();
+        SCPLOGSTRING( "CScpPresenceHandler::HandleRequestCompleteEvent status offline" );
+        
+        // Do not send info to our client if roaming is ongoing 
+        if ( !iSubService.IsRoaming() )
+            {
+            DeregisterNow();
+            }
+		// Inform SIP to start ALR migration
+        else
+            {
+            iSubService.ProfileHandler().StartAlrMigration( iSubService.SipProfileId() );
+            }
+        
         SCPLOGSTRING( "CScpPresenceHandler::HandleRequestCompleteEvent status offline end" );
         }
     
--- a/voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpprofilehandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-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"
@@ -459,6 +459,26 @@
     }
 
 // -----------------------------------------------------------------------------
+// CScpProfileHandler::StartAlrMigration
+// -----------------------------------------------------------------------------
+//
+void CScpProfileHandler::StartAlrMigration( TUint32 aProfileId )
+    {
+    SCPLOGSTRING2( "CScpProfileHandler::StartMigrtion profile: %i", aProfileId );
+    SCPLOGSTRING2( "CScpProfileHandler::StartMigrtion iNewAlrIapId: %i", iNewAlrIapId );
+    
+    TRAP_IGNORE(
+       iAlrController->AllowMigrationL( aProfileId, iNewAlrIapId ) );
+    
+    CScpSipConnection* sipConnection( NULL );
+    
+    sipConnection = GetSipConnection( aProfileId );
+    sipConnection->SetProfileCurrentlyRoaming();
+    
+    SCPLOGSTRING( "CScpProfileHandler::StartMigrtion -exit" );
+    }
+
+// -----------------------------------------------------------------------------
 // CScpProfileHandler::AlrEvent
 // -----------------------------------------------------------------------------
 //
@@ -502,13 +522,29 @@
                     }
                 else
                     {
-                    sipConnection->SetProfileCurrentlyRoaming();
+                    iAlrAllowedToStartImmediately = ETrue;
 
-                    TRAP_IGNORE(
-                        iAlrController->AllowMigrationL( aProfileId, aIapId ) );
+                    for ( TInt i = 0; i < iObservers.Count(); i++ )
+                        {
+                        if ( !iObservers[ i ]->IsSipProfileAllowedToStartAlr() )
+                            {
+                            iAlrAllowedToStartImmediately = EFalse;
+                            break;
+                            }
+                        }
+                    if ( iAlrAllowedToStartImmediately )
+                        {
+                        TRAP_IGNORE(
+                            iAlrController->AllowMigrationL( aProfileId, aIapId ) );
+                        sipConnection->SetProfileCurrentlyRoaming();
+                        }
+                    else
+                        {
+                        iNewAlrIapId = aIapId;
+                        sipConnection->HandleMigrationStarted();
+                        }
                     }
                 }
-
             break;
             }
 
@@ -519,11 +555,10 @@
             {
             sipConnection = GetSipConnection( aProfileId );
             
-            if( sipConnection )
+            if( sipConnection && iAlrAllowedToStartImmediately )
                 {
                 sipConnection->HandleMigrationStarted();
                 }
-            
             break;
             }
         
@@ -597,6 +632,15 @@
     }
 
 // -----------------------------------------------------------------------------
+// CScpProfileHandler::IsSipProfileAllowedToStartAlr
+// -----------------------------------------------------------------------------
+//
+TBool CScpProfileHandler::IsSipProfileAllowedToStartAlr()
+    {
+    return ETrue;
+    }
+    
+// -----------------------------------------------------------------------------
 // CScpProfileHandler::VmbxInterfaceL
 // -----------------------------------------------------------------------------
 //
--- a/voipplugins/sipconnectionprovider/src/scpservicehandlerbase.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpservicehandlerbase.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-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"
@@ -66,6 +66,16 @@
     }
 
 // -----------------------------------------------------------------------------
+// From base class MScpSipConnectionObserver
+// CScpServiceHandlerBase::IsSipProfileAllowedToStartAlr
+// -----------------------------------------------------------------------------
+//
+TBool CScpServiceHandlerBase::IsSipProfileAllowedToStartAlr()
+    {
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
 // CScpServiceHandlerBase::RegisterProfileL
 // -----------------------------------------------------------------------------
 //
--- a/voipplugins/sipconnectionprovider/src/scpservicemanager.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/sipconnectionprovider/src/scpservicemanager.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -984,7 +984,7 @@
             }
         }
     
-    if ( aSetUsername )
+    if ( service && aSetUsername )
         {
         iSettingHandler->UpdateXdmUsernameL( 
             *service,
@@ -992,7 +992,7 @@
             aUsername );
         }
     
-    if ( aSetPassword )
+    if ( service && aSetPassword )
         {
         iSettingHandler->UpdateXdmPasswordL(
             *service, 
--- a/voipplugins/svtmatching/inc/svturiparser.h	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/svtmatching/inc/svturiparser.h	Mon Mar 15 12:39:55 2010 +0200
@@ -63,6 +63,16 @@
     TInt DisplayNameFromUri( const TDesC& aData, RBuf& aDisplayname ) const;
     
     /**
+     * Parses displayname part from uri.
+     * @leave Leaves with system wide error.
+     * @param aData - Original uri.
+     * @param aDisplayname - Uris displayname part if found from
+     *                       original uri.
+     * @param aResult - Result of operation, KErrNone if success.
+     */ 
+    void DisplayNameFromUriL( const TDesC& aData, RBuf& aDisplayname, TInt& aResult ) const;
+    
+    /**
      * Checks sip uri for spaces in begin and end of string.
      * @leave Leaves on failure.
      * @param aOriginal - Original sip uri.
--- a/voipplugins/svtmatching/src/svturiparser.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/svtmatching/src/svturiparser.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -95,81 +95,114 @@
         const TDesC& aData, 
         RBuf& aDisplayname ) const
     {
-    TInt ret( KErrNotFound );
+    TInt result = KErrNotFound;
+
+    TRAPD( err, DisplayNameFromUriL( aData, aDisplayname, result ) );
+    if ( err )
+        {
+        result = err;
+        }
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// The inner logic for resolving display name from sip uri
+// ---------------------------------------------------------------------------
+//
+void CSvtUriParser::DisplayNameFromUriL(
+        const TDesC& aData,
+        RBuf& aDisplayname,
+        TInt& aResult ) const
+    {
+    aResult = KErrNotFound;
     
-    TPtrC resultStr( aData );
+    TPtrC preResultStr( aData );
     aDisplayname.Close();
     
-    // resolves potential SIP Display info and removes it from uri
-    // also possible "<" and ">" character are removed around the SIP uri
-    TInt uriStartIndex = resultStr.LocateReverse( KStartBracket );      
-    TInt uriEndIndex = resultStr.LocateReverse( KEndBracket );       
+    HBufC* tempBuffer = preResultStr.AllocLC(); // CS:1
+    tempBuffer->Des().TrimAll();
     
-    if ( uriStartIndex > uriEndIndex )
+    if ( tempBuffer->Length() )
         {
-        // Start and end separators in wrong order: "xxxx>xxxx<xxx"
-        return KErrArgument;
-        }
-        
-    if ( KErrNotFound != uriStartIndex && KErrNotFound != uriEndIndex )
-        {
-        // brackets found so modify descriptor and save the display info
+        TPtrC resultStr( tempBuffer->Des() );
+
+        // resolves potential SIP Display info and removes it from uri
+        // also possible "<" and ">" character are removed around the SIP uri
+        TInt uriStartIndex = resultStr.LocateReverse( KStartBracket );      
+        TInt uriEndIndex = resultStr.LocateReverse( KEndBracket );       
         
-        // check if there is anything before "<" if there is use
-        // it as displayname if match op fails.
-        if ( uriStartIndex > 1 )
-            {        
-            TPtrC tempStr( resultStr.Left( uriStartIndex ) );          
-            // remove possible quotation marks from displayname
-            TInt index = tempStr.Locate( KQuotationMark );
-            if ( KErrNotFound != index )
+        if ( KErrNotFound != uriStartIndex && KErrNotFound != uriEndIndex )
+            {
+            if ( uriStartIndex < uriEndIndex )
                 {
-                // marks have to be removed
-                tempStr.Set( tempStr.Mid( ++index ) );    
-                if ( tempStr[tempStr.Length() - 1] == KQuotationMark )
-                    {
-                    tempStr.Set( tempStr.Left( tempStr.Length() - 1 ) );
-                    }
+                // brackets found so modify descriptor and save the display info
+                
+                // check if there is anything before "<" if there is use
+                // it as displayname if match op fails.
+                if ( uriStartIndex > 1 )
+                    {        
+                    TPtrC tempStr( resultStr.Left( uriStartIndex ) );          
+                    // remove possible quotation marks from displayname
+                    TInt index = tempStr.Locate( KQuotationMark );
+                    if ( KErrNotFound != index )
+                        {
+                        // marks have to be removed
+                        tempStr.Set( tempStr.Mid( ++index ) );    
+                        if ( tempStr[tempStr.Length() - 1] == KQuotationMark )
+                            {
+                            tempStr.Set( tempStr.Left( tempStr.Length() - 1 ) );
+                            }
+                        }
+                    aResult = aDisplayname.Create( tempStr );
+                    }                      
+                }
+            else
+                {
+                // Start and end separators in wrong order: "xxxx>xxxx<xxx"
+                aResult = KErrArgument;
                 }
-            ret = aDisplayname.Create( tempStr );
-            }                      
-        }        
-    else 
-        {
-        // it is also possible that displayname is included 
-        // in, in case that there is no brackets around the uri. So if there is something
-        // inside quotationMarks it should be used as displayname
-
-        // check if displayname is found
-        TInt displayNameStart = resultStr.Locate( KQuotationMark );
-        TInt displayNameEnd = resultStr.LocateReverse( KQuotationMark );
-
-        if ( displayNameStart != KErrNotFound 
-            && displayNameEnd != KErrNotFound 
-            && displayNameStart < displayNameEnd )
+            }        
+        else 
             {
-            // displayname is included
-            // ++, to remove quotationMark from the start
-            ret = aDisplayname.Create( resultStr.Mid( ++displayNameStart, 
-                // -1, to remove quotationMark from the end
-                displayNameEnd - displayNameStart - 1 ) );  
-            }                                
-        else
-            {
-            // check if there is spaces in the uri, if there is
-            // everything before it belongs to display name                
-            TInt index = resultStr.LocateReverse( KSpaceMark );
-            
-            if ( KErrNotFound != index )            
+            // it is also possible that displayname is included 
+            // in, in case that there is no brackets around the uri. So if there is something
+            // inside quotationMarks it should be used as displayname
+    
+            // check if displayname is found
+            TInt displayNameStart = resultStr.Locate( KQuotationMark );
+            TInt displayNameEnd = resultStr.LocateReverse( KQuotationMark );
+    
+            if ( displayNameStart != KErrNotFound 
+                && displayNameEnd != KErrNotFound 
+                && displayNameStart < displayNameEnd )
+                {
+                // displayname is included
+                // ++, to remove quotationMark from the start
+                aResult = aDisplayname.Create( resultStr.Mid( ++displayNameStart, 
+                    // -1, to remove quotationMark from the end
+                    displayNameEnd - displayNameStart - 1 ) );  
+                }                                
+            else
                 {
-                // set displayname
-                ret = aDisplayname.Create( resultStr.Left( index ) );
-                }            
+                // check if there is spaces in the uri, if there is
+                // everything before it belongs to display name                
+                TInt index = resultStr.LocateReverse( KSpaceMark );
+                
+                if ( KErrNotFound != index )            
+                    {
+                    // set displayname
+                    aResult = aDisplayname.Create( resultStr.Left( index ) );
+                    }            
+                }
+             }
+        }
+    else
+        {
+        // Invalid data length
+        aResult = KErrArgument;
+        }
 
-            }
-        }
-    
-    return ret;
+    CleanupStack::PopAndDestroy( tempBuffer ); // CS:0
     }
 
 // ---------------------------------------------------------------------------
--- a/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPAdapter.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/voipadapters/cpvoipadapter/src/CWPVoIPAdapter.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -986,7 +986,6 @@
     TLex8 lex( aStorageIdValue );
     User::LeaveIfError( lex.Val( storageId, EDecimal ) );
 
-
     const TInt itemCount = iDatas.Count();
 
     //lint -e{961} No need for else statement here
@@ -999,9 +998,7 @@
 
             TBuf8<KTempStringlength> userAgentHeader;
             iDatas[itemIndex]->GetUserAgentHeaderL( userAgentHeader );
-            // SIPProfileId must be bigger than 1 because otherwise
-            // cSIPManagedProfileRegistry->ProfileL will leave.
-            if ( setOk && storageId > 1 )
+            if ( setOk && storageId > 0 )
                 {
                 TUint32 itemId = iDatas[itemIndex]->ItemId();
                 if ( TUint( KNotSaved ) != itemId )
@@ -1021,7 +1018,6 @@
                     rcseReg->UpdateL( itemId, *rcseProf );
                     CleanupStack::PopAndDestroy( 2, rcseReg );
                     }
-                
 
                 // Then set SIP user-agent header
                 DBG_PRINT(
@@ -1051,7 +1047,7 @@
                     User::LeaveIfError( cSIPManagedProfile->SetParameter( 
                         KSIPHeaders, *uahArray ) );
                     }
-                
+
                 cSIPManagedProfileRegistry->SaveL( *cSIPManagedProfile );
                 uahArray->Reset();
                 CleanupStack::PopAndDestroy( uahArray ); // CS:5
@@ -1067,7 +1063,6 @@
                 } // if ( matches ... )
             } // for
         }
-
     else if ( KErrNone == KSCCPAppID8().CompareF( tmpAppId->Des() ) )
         {
         for ( TInt itemIndex = 0; itemIndex < iDatas.Count(); itemIndex++ )
@@ -1076,7 +1071,6 @@
                 aAppRef );
             }
         }
-
     else if ( KErrNone == KNATFWAppID8().CompareF( tmpAppId->Des() ) )
         {
         for ( TInt itemIndex = 0; itemIndex < iDatas.Count(); itemIndex++ )
@@ -1085,7 +1079,6 @@
                 aAppRef );
             }
         }
-
     else if ( KErrNone == KPresenceAppId8().CompareF( tmpAppId->Des() ) )
         {
         for ( TInt itemIndex = 0; itemIndex < iDatas.Count(); itemIndex++ )
@@ -1094,7 +1087,6 @@
                 storageId, aAppRef );
             }
         }
-
     else if ( KErrNone == KSNAPAppID8().CompareF( tmpAppId->Des() ) )
         {
         for ( TInt itemIndex = 0; itemIndex < iDatas.Count(); itemIndex++ )
--- a/voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/voipadapters/dmvoipadapter/src/nsmldmvoipadapter.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -1585,8 +1585,7 @@
         else if ( KNSmlDMVoIPUsedSIPProfileId() == uriSeg )
             {
             TUint32 profileId = SetSipRefL( aObject ); 
-            // SIP profile ID's start from 2.
-            if ( profileId > 1 )
+            if ( profileId > 0 )
                 {
                 if ( KErrNotFound == spSettingsId )
                     {
--- a/voipplugins/voipadapters/voipxmlprovisioning/group/bld.inf	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/group/bld.inf	Mon Mar 15 12:39:55 2010 +0200
@@ -22,6 +22,8 @@
 DEFAULT
 
 PRJ_EXPORTS
+../rom/voipxmlprovisioning.iby CORE_APP_LAYER_IBY_EXPORT_PATH( voipxmlprovisioning.iby )
+../rom/voipxmlprovisioningresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH( voipxmlprovisioningresources.iby )
 
 PRJ_MMPFILES
 #include "../voipxmlprocessor/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/rom/voipxmlprovisioning.iby	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*       IBY file for voipxmlprovisioning
+*
+*
+*/
+
+#ifndef VOIPXMLPROVISIONING_IBY
+#define VOIPXMLPROVISIONING_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+    file=ABI_DIR\BUILD_DIR\voipxmlprocessor.dll SHARED_LIB_DIR\voipxmlprocessor.dll
+
+    ECOM_PLUGIN( voipprovrec.dll,20026FE1.rsc )
+
+    S60_APP_EXE(voipprovisioningapp)
+    S60_UPGRADABLE_APP_REG_RSC(voipprovisioningapp)
+
+#endif // VOIPXMLPROVISIONING_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/voipadapters/voipxmlprovisioning/rom/voipxmlprovisioningresources.iby	Mon Mar 15 12:39:55 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*       IBY file for voipxmlprovisioning
+*
+*
+*/
+
+#ifndef VOIPXMLPROVISIONINGRESOURCES_IBY
+#define VOIPXMLPROVISIONINGRESOURCES_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+    DATA=DATAZ_\RESOURCE_FILES_DIR\VoIPProvRec.rsc	RESOURCE_FILES_DIR\VoIPProvRec.rsc
+    S60_APP_RESOURCE(VoIPProvisioningApp)
+//    S60_APP_CAPTION(VoIPProvisioningApp)
+
+#endif // VOIPXMLPROVISIONINGRESOURCES_IBY
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmliaphandler.cpp	Fri Mar 12 15:42:09 2010 +0200
+++ b/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmliaphandler.cpp	Mon Mar 15 12:39:55 2010 +0200
@@ -640,13 +640,19 @@
             DBG_PRINT( "   EapType none" );
             User::LeaveIfError( wpaSecSettings->SetWPAPreSharedKey( 
                 aTempIap.iPreSharedKey->Des() ));
+            wpaSecSettings->SaveL( wlanId, *db, ESavingBrandNewAP, 0 );
             }
         else if ( EAPSettings::EEapLeap == aTempIap.iEapType )
             {
             DBG_PRINT( "   eapType Leap" );
+
             TBuf8<KMaxNodeValueLength> eapId;
             eapId.Copy( KEapLeapId, KEapChars );
-            CEapType* eapType = CEapType::NewL( eapId, ELan, iapServiceId );
+            User::LeaveIfError( 
+                wpaSecSettings->SetWPAEnabledEAPPlugin( eapId ) );
+            wpaSecSettings->SaveL( wlanId, *db, ESavingBrandNewAP, 0 );
+
+            CEapType* eapType = CEapType::NewL( eapId, ELan, wlanId );
             CleanupStack::PushL( eapType ); // CS:3
             EAPSettings* eapSettings = new (ELeave) EAPSettings();
             CleanupStack::PushL( eapSettings ); // CS:4
@@ -656,10 +662,8 @@
             eapSettings->iPassword.Copy( aTempIap.iEapPassword->Des() );
             eapSettings->iPasswordPresent = ETrue;
             eapType->SetConfigurationL( *eapSettings );
-            CleanupStack::PopAndDestroy( 2, eapType );
-            wpaSecSettings->SetWPAEnabledEAPPlugin( eapId );
+            CleanupStack::PopAndDestroy( 2, eapType ); // CS:2
             }
-        wpaSecSettings->SaveL( wlanId, *db, ESavingBrandNewAP, 0 );
         // wpaSecSettings, db
         CleanupStack::PopAndDestroy( 2, db ); // CS:0
         }