Revision: 201011
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 15:21:37 +0300
changeset 18 fcbbe021d614
parent 4 77415202bfc8
child 20 9c97ad6591ae
Revision: 201011 Kit: 201015
accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.h
alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp
alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp
apengine/apeng/src/APNetworks.cpp
apengine/apeng/src/APSelect.cpp
apengine/apeng/src/ApProtHandler.cpp
apengine/apeng/src/VpnApEngine.cpp
apengine/apsettingsplugin/inc/APSettingsPlugin.h
apengine/apsettingsplugin/src/APSettingsPlugin.cpp
bearermanagement/S60MCPR/inc/s60mcpractivities.h
bearermanagement/S60MCPR/inc/s60mcprstates.h
bearermanagement/S60MCPR/inc/s60mpmrequests.h
bearermanagement/S60MCPR/inc/s60tiermanagerselector.h
bearermanagement/S60MCPR/src/s60mcpr.cpp
bearermanagement/S60MCPR/src/s60mcpractivities.cpp
bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp
bearermanagement/S60MCPR/src/s60mcprsimpleselectactivity.cpp
bearermanagement/S60MCPR/src/s60mcprstates.cpp
bearermanagement/S60MCPR/src/s60mpmrequests.cpp
bearermanagement/S60MCPR/src/s60tiermanagerselector.cpp
bearermanagement/mpm/group/mpmserver.mmp
bearermanagement/mpm/inc/mpmconnmonevents.h
bearermanagement/mpm/inc/mpmcsidwatcher.h
bearermanagement/mpm/inc/mpmdatausagewatcher.h
bearermanagement/mpm/inc/mpmiapselection.h
bearermanagement/mpm/inc/mpmlauncher.h
bearermanagement/mpm/inc/mpmroamingwatcher.h
bearermanagement/mpm/inc/mpmserver.h
bearermanagement/mpm/inc/mpmwlanavailability.h
bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp
bearermanagement/mpm/src/mpmconnmonevents.cpp
bearermanagement/mpm/src/mpmconnmonreqs.cpp
bearermanagement/mpm/src/mpmdatausagewatcher.cpp
bearermanagement/mpm/src/mpmiapselection.cpp
bearermanagement/mpm/src/mpmlauncher.cpp
bearermanagement/mpm/src/mpmroamingwatcher.cpp
bearermanagement/mpm/src/mpmserver.cpp
bearermanagement/mpm/src/mpmserversession.cpp
bearermanagement/mpm/src/mpmwlanavailability.cpp
bearermanagement/mpm/src/rmpm.cpp
cmmanager/cmmgr/Framework/Inc/cmdlg.h
cmmanager/cmmgr/Framework/Inc/uncatdlg.h
cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp
cmmanager/cmmgr/Framework/Src/uncatdlg.cpp
cmmanager/cmmgr/Framework/SrcData/cmmanager.rss
cmmanager/cmmgr/Framework/conf/cmmanager_10207376.crml
cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp
cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp
cmmanager/cmmgr/database/src/cmmanagertableformats.cpp
cmmanager/gsconnsettingsplugin/data/gsconnsettingspluginrsc.rss
cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.h
cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.hrh
cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugincontainer.h
cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugin.cpp
cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugincontainer.cpp
cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h
connectionmonitoring/cellularindicatorplugin/cellularindicatorplugin.pro
connectionmonitoring/cellularindicatorplugin/inc/cellularindicatorplugin.h
connectionmonitoring/cellularindicatorplugin/rom/cellularindicatorplugin.iby
connectionmonitoring/cellularindicatorplugin/rom/cellularindicatorplugin_resources.iby
connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp
connectionmonitoring/cellularindicatorplugin/traces/OstTraceDefinitions.h
connectionmonitoring/connectionmonitoring.pro
connectionmonitoring/connectionmonitorplugin/inc/connectionmonitorplugin.h
connectionmonitoring/connectionmonitorplugin/src/connectionmonitorplugin.cpp
connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp
connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp
connectionmonitoring/connectionview/connectionview.pro
connectionmonitoring/connectionview/inc/connectionview.h
connectionmonitoring/connectionview/inc/scrollareawidget.h
connectionmonitoring/connectionview/res/connectionview.css
connectionmonitoring/connectionview/res/connectionview.qrc
connectionmonitoring/connectionview/rom/connectionview.iby
connectionmonitoring/connectionview/rom/connectionview_resources.iby
connectionmonitoring/connectionview/src/connectionview.cpp
connectionmonitoring/connectionview/src/main.cpp
connectionmonitoring/connectionview/src/scrollareawidget.cpp
connectionmonitoring/connectionview/traces/OstTraceDefinitions.h
connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp
connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp
connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp
connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp
connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp
connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp
connectionmonitoring/indicatorobserver/inc/indicatorobserver.h
connectionmonitoring/indicatorobserver/indicatorobserver.pro
connectionmonitoring/indicatorobserver/rom/indicatorobserver.iby
connectionmonitoring/indicatorobserver/src/indicatorobserver.cpp
connectionmonitoring/indicatorobserver/src/main.cpp
connectionmonitoring/indicatorobserver/traces/OstTraceDefinitions.h
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/ConfirmationQuery.h
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/ConfirmationQueryNotif.h
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/cellulardataconfirmation.h
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/devicedialogobserver.h
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQuery.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQueryNotif.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConnUiUtilsNotif.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/cellulardataconfirmation.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/connectionerrordiscreetpopup.cpp
connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/devicedialogobserver.cpp
connectionutilities/ConnectionDialogs/group/ConnUiUtilsNotif.mmp
connectionutilities/confirmqueries/confirmqueries.pro
connectionutilities/confirmqueries/inc/cellularpromptdialog.h
connectionutilities/confirmqueries/inc/cellularpromptdialogplugin.h
connectionutilities/confirmqueries/res/promptdialog.qrc
connectionutilities/confirmqueries/rom/promptdialogplugin.iby
connectionutilities/confirmqueries/rom/promptdialogplugin_resources.iby
connectionutilities/confirmqueries/src/cellularpromptdialog.cpp
connectionutilities/confirmqueries/src/cellularpromptdialogplugin.cpp
connectionutilities/confirmqueries/traces/OstTraceDefinitions.h
connectionutilities/connectionutilities.pro
data/cccccc00_emulator.cre
dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp
dbcreator/commsdatcreator/Src/cdcwlandevicesettings.cpp
dbcreator/commsdatcreator/bwins/commsdatcreatoru.def
dbcreator/conf/commsdatcreator.confml
dbcreator/inc/cdccommsdatcreator.h
ipcm_plat/access_point_engine_misc_api/inc/ApProtHandler.h
ipcm_plat/access_point_engine_misc_api/inc/VpnAPEngine.h
ipcm_plat/access_point_engine_misc_api/inc/VpnAPItem.h
ipcm_pub/access_point_engine_api/inc/APAccessPointItem.h
ipcm_pub/access_point_engine_api/inc/APDataHandler.h
ipcm_pub/access_point_engine_api/inc/APNetworks.h
ipcm_pub/access_point_engine_api/inc/APSelect.h
ipcm_pub/access_point_engine_api/inc/APUtils.h
ipcm_pub/access_point_engine_api/inc/ActiveApDb.h
ipcm_pub/access_point_engine_api/inc/ApEngineConsts.h
ipcm_pub/access_point_engine_api/inc/ApEngineVer.h
ipcm_pub/access_point_engine_api/inc/ApListItem.h
ipcm_pub/access_point_engine_api/inc/ApNetworkItem.h
ipcm_pub/access_point_engine_api/inc/ApNetworkItemlist.h
ipcm_pub/access_point_engine_api/inc/Aplistitemlist.h
ipcm_pub/access_point_settings_handler_api/inc/ApSettingsHandlerCommons.h
ipcm_pub/access_point_settings_handler_api/inc/Apsettingshandlerui.h
ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h
ipconnmgmt.pro
layers.sysdef.xml
package_definition.xml
sysdef_1_4_0.dtd
sysdef_1_5_1.dtd
--- a/accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/accesspointcontrol/apcontrollistplugin/inc/apcontrollistplugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 
 // System includes
 #include <eikclb.h>
-#include <GSPluginInterface.h>
+#include <gsplugininterface.h>
 #include <ConeResLoader.h>
 
 // This UID is used for both the view UID and the ECOM plugin implementation UID.
--- a/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/alwayson_net_plugin/pdpcontextmanager2/src/caoconnectionmonitorimpl.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 // INCLUDE FILES
-#include <NIFVAR.H>
+#include <nifvar.h>
 #include "caoconnectionmonitorimpl.h"
 #include "maosettings.h"
 #include "logger.h"
--- a/alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/alwayson_net_plugin/pdpcontextmanager2/src/caoserver.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -432,9 +432,9 @@
     // Create property subscriber
     iPDPPropertySubscriber = CAOAsyncWrapper<CAOServer>::NewL(
         this,
-        &PDPPropertySubscriptionIssueRequest,
-        &PDPPropertySubscriptionRunL,
-        &PDPPropertySubscriptionDoCancel,
+        &CAOServer::PDPPropertySubscriptionIssueRequest,
+        &CAOServer::PDPPropertySubscriptionRunL,
+        &CAOServer::PDPPropertySubscriptionDoCancel,
         NULL );
         
     // Subscribe
--- a/apengine/apeng/src/APNetworks.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apeng/src/APNetworks.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -26,7 +26,7 @@
 #include <ApEngineConsts.h>
 
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <ProtectDb.h>
+#include <ProtectDB.h>
 #else
 #include <comms-infras/commdb/protection/protectdb.h>
 #endif
--- a/apengine/apeng/src/APSelect.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apeng/src/APSelect.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -24,7 +24,7 @@
 #include <featmgr.h>
 
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <ProtectDb.h>
+#include <ProtectDB.h>
 #else
 #include <comms-infras/commdb/protection/protectdb.h>
 #endif
@@ -70,7 +70,7 @@
 
 
 // LOCAL CONSTANTS AND MACROS
-
+#define VPN_SERVICE_SNAP    _S("HomeSNAP")
 
 // LOCAL FUNCTION PROTOTYPES
 
@@ -856,9 +856,39 @@
                     CApUtils* util = CApUtils::NewLC( *iDb );
                     for ( i = 0; i < count; i++ )
                         {
-                        // get home wap id first
-                        pos = PosInArray( ipiapid, 
-                                          vpnArray->At( i ).iHomeIapId );
+                        if ( vpnArray->At( i ).iHomeIapId != 0 )
+                            {
+                            // get home wap id first
+                            pos = PosInArray( ipiapid, 
+                                             vpnArray->At( i ).iHomeIapId );
+                            
+                            }
+                        else if ( vpnArray->At( i ).iHomeSnapId != 0 )
+                            {
+                            // VPN IAP points to a SNAP. Just mark it available.
+                            pos = PosInArray( iapArrays[KVPN][1], vpnArray->At( i ).iVpnIapId );
+                            if ( pos != KErrNotFound )
+                                { // now get VPN IAP ID
+                                TUint32 tempvpniapid = iapArrays[KVPN][0]->At( pos );
+                                TUint32 tempvpnwapid ( 0 );
+                                TRAP( err, tempvpnwapid = 
+                                        util->WapIdFromIapIdL( 
+                                                tempvpniapid ) );
+                                                    
+                                item = CApListItem::NewLC
+                                    (
+                                    EIspTypeInternetAndWAP,
+                                    tempvpnwapid,
+                                    *vpnArray->At( i ).iName,                                   
+                                    EApBearerTypeAllBearers
+                                    );
+                                item->SetVpnFlag( ETrue );
+                                iApList->AppendL( item );
+                                CleanupStack::Pop( item );
+                                continue;
+                                }                                                          
+                            }                                                                                                              
+                        
                         TInt foundpos( KErrNotFound );
                         if ( pos!= KErrNotFound )
                             { // now we have the index in the
@@ -2216,7 +2246,8 @@
         if ( err != KErrNotFound )
             {
             TUint32 tempvpn( 0 );
-            TUint32 temphome( 0 );
+            TUint32 temphomeiap( 0 );
+            TUint32 temphomesnap( 0 );
             HBufC*  tempname = NULL;
             TVpnData data;
             TBool goon( ETrue );
@@ -2226,10 +2257,20 @@
                                             tempvpn );
                 if ( ( err == KErrNone ) && ( tempvpn ) )
                     {
+                    // First try to check if VPN IAP uses another IAP directly
                     err = ApCommons::ReadUintL( aTable, 
-                                                TPtrC(VPN_SERVICE_IAP),
-                                                temphome );
-                    if ( ( err == KErrNone ) && ( temphome ) )
+                                                TPtrC(VPN_SERVICE_IAP),                                                
+                                                temphomeiap );
+                    
+                    if ( (err != KErrNone ) || ( !tempvpn ) )
+                        {
+                        // IAP field was empty. VPN IAP must point to SNAP.
+                        err = ApCommons::ReadUintL( aTable, 
+                                TPtrC(VPN_SERVICE_SNAP),                                                
+                                temphomesnap );                                                         
+                        }
+                    
+                    if ( ( err == KErrNone ) && ( temphomeiap || temphomesnap ) )
                         {
                         // now get the name
 
@@ -2238,7 +2279,16 @@
                                                           TPtrC(COMMDB_NAME) );
                         
                         // everything is O.K., we can add the item
-                        data.iHomeIapId = temphome;
+                        if ( temphomesnap )
+                            {
+                            data.iHomeSnapId = temphomesnap;
+                            data.iHomeIapId = 0;
+                            }
+                        else
+                            {
+                            data.iHomeSnapId = 0;
+                            data.iHomeIapId = temphomeiap;                            
+                            }                       
                         data.iVpnIapId = tempvpn;
                         data.iName = tempname;
                         aVpnArray->AppendL( data ); // array owns it...
--- a/apengine/apeng/src/ApProtHandler.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apeng/src/ApProtHandler.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -22,8 +22,8 @@
 #include <ApEngineConsts.h>
 
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <ProtectDb.h>
-#include <ProtectcpDb.h>
+#include <ProtectDB.h>
+#include <protectcpdb.h>
 #else
 #include <comms-infras/commdb/protection/protectdb.h>
 #include <comms-infras/commdb/protection/protectcpdb.h>
--- a/apengine/apeng/src/VpnApEngine.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apeng/src/VpnApEngine.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -880,10 +880,11 @@
 
     CleanupStack::PopAndDestroy( buf ); // buf
 
-    t->ReadUintL( TPtrC(VPN_SERVICE_IAP), aVpnApItem.iRealIapId );    
-
-    t->ReadUintL( TPtrC(VPN_SERVICE_NETWORKID), aVpnApItem.iHomeNetwork );
-
+    // These fields might be missing from CommsDat.
+    // ApEngine does not support SNAPs, use CmManager API to get full support.
+    TRAP_IGNORE( t->ReadUintL( TPtrC(VPN_SERVICE_IAP), aVpnApItem.iRealIapId ) )
+    TRAP_IGNORE( t->ReadUintL( TPtrC(VPN_SERVICE_NETWORKID), aVpnApItem.iHomeNetwork ) )
+    
     CleanupStack::PopAndDestroy( t );   // t
 
     // Get real IAP name !!!!!
--- a/apengine/apsettingsplugin/inc/APSettingsPlugin.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apsettingsplugin/inc/APSettingsPlugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -22,7 +22,7 @@
 // System includes
 #include <e32def.h>
 #include <e32cmn.h>
-#include <GSPluginInterface.h>
+#include <gsplugininterface.h>
 #include <ConeResLoader.h>
 
 // Forward declaration
@@ -110,4 +110,4 @@
     };
 
 #endif //__AP_SETTINGS_PLUGIN_H__
-//End of file
\ No newline at end of file
+//End of file
--- a/apengine/apsettingsplugin/src/APSettingsPlugin.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/apengine/apsettingsplugin/src/APSettingsPlugin.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -32,7 +32,7 @@
 #include <ApSettingsPluginRsc.rsg>
 #include <data_caging_path_literals.hrh>
 #include <apsettingsplugin.mbg>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
 #include <centralrepository.h>
 
 
--- a/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mcpractivities.h	Fri Apr 16 15:21:37 2010 +0300
@@ -560,12 +560,12 @@
     /**
      * FORK/DECISION: Decides if needs cancel or not.
      */
-    DECLARE_SMELEMENT_HEADER( TInformMigrationAvailableOrCancelTag, 
+    DECLARE_SMELEMENT_HEADER( TInformMigrationAvailableOrErrorOrCancelTag, 
                               MeshMachine::TStateFork<TContext>, 
                               NetStateMachine::MStateFork, 
                               TContext )
     virtual TInt TransitionTag();
-    DECLARE_SMELEMENT_FOOTER( TInformMigrationAvailableOrCancelTag )
+    DECLARE_SMELEMENT_FOOTER( TInformMigrationAvailableOrErrorOrCancelTag )
 
     /**
      * FORK/DECISION: Decides what happens after IPCPR application completes the 
@@ -601,7 +601,7 @@
      * 1. Continue with handshake to select new AP for MCPR.
      * 2. Return back to migration-phase with new preferred IAP.
      * 3. Close down the system in case of mobilityerror.
-     * @return  //TODO Cancel from IPCPR.
+     * @return
      */
     DECLARE_SMELEMENT_HEADER( TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel, 
                               MeshMachine::TStateFork<TContext>, 
@@ -611,6 +611,21 @@
     DECLARE_SMELEMENT_FOOTER( TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel )
 
     /**
+     * FORK/DECISION: 
+     * 1. Inform that the migration complete or go to error
+     * 2. Error
+     * @return
+     */
+    DECLARE_SMELEMENT_HEADER( TInformMigrationCompletedOrError, 
+                              MeshMachine::TStateFork<TContext>, 
+                              NetStateMachine::MStateFork, 
+                              TContext )
+    virtual TInt TransitionTag();
+    DECLARE_SMELEMENT_FOOTER( TInformMigrationCompletedOrError )
+
+        
+    
+    /**
      * Class that is responsible for managing mobility on MCPR side.
      * CS60MobilityActivity is the S60 version of the CMobilityActivity -class
      */
@@ -767,12 +782,12 @@
              * STATE: Waits for preferred carrier message.
              * @return ETrue if preferred carrier notification is received.
              */
-            DECLARE_SMELEMENT_HEADER( TAwaitingPreferredCarrierOrCancelOrRejected, 
+            DECLARE_SMELEMENT_HEADER( TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification, 
                                       MeshMachine::TState<TContext>, 
                                       NetStateMachine::MState, 
                                       CS60MobilityActivity::TContext)
             virtual TBool Accept();
-            DECLARE_SMELEMENT_FOOTER( TAwaitingPreferredCarrierOrCancelOrRejected )
+            DECLARE_SMELEMENT_FOOTER( TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification )
             
             /**
              * FORK/DECISION: Decides what happens after IPCPR responds to migration offer.
@@ -789,6 +804,21 @@
             DECLARE_SMELEMENT_FOOTER( TNoTagOrApplicationRejectedMigrationOrCancel )
 
             /**
+             * FORK/DECISION: 
+             * 1. Proceed to reconnection
+             * 2. Re-establish connection to the same IAP, inform data client that migration is complete
+             * 3. Error
+             * @return
+             */
+            DECLARE_SMELEMENT_HEADER( TNoTagOrRequestReConnectToCurrentSPOrErrorTag, 
+                                      MeshMachine::TStateFork<TContext>, 
+                                      NetStateMachine::MStateFork, 
+                                      TContext )
+            virtual TInt TransitionTag();
+            DECLARE_SMELEMENT_FOOTER( TNoTagOrRequestReConnectToCurrentSPOrErrorTag )
+            
+            
+            /**
              * Mutex protected TRANSITION.
              * Mopility scenario should wait until the connection recovery finishes.
              */
@@ -820,16 +850,6 @@
 
         private: // Member variables.
             
-            /**
-             * Pointer to IPProtocoMCPR which is currently active 
-             */
-            ESock::RMetaServiceProviderInterface* iCurrent;
-
-            /**
-             * Pointer to IPProtocoMCPR which is about to become the active. 
-             */
-            ESock::RMetaServiceProviderInterface* iPreferred;
-
             TUint iCurrentAssumedAPId;  // Current IAP Id
             TUint iPreferredAPId;       // New IAP Id system should roam to.
             TBool iIsUpgrade;           // If the active iPreferredAPId is upgrade to old one.
--- a/bearermanagement/S60MCPR/inc/s60mcprstates.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mcprstates.h	Fri Apr 16 15:21:37 2010 +0300
@@ -56,6 +56,9 @@
     const TInt KInformMigrationAvailable = 11052;
     const TInt KSendInitialApplicationReject = 11053; 
     const TInt KConsumeRejectedMsg = 11054;
+    const TInt KInformMigrationCompleted = 11055;
+    const TInt KRequestReConnectToCurrentSP = 11056;
+    
     /**
      * Execution context
      */
@@ -105,6 +108,17 @@
     DECLARE_SMELEMENT_FOOTER( TRequestReConnect )
 
     /**
+     * TRANSITION/ACTION: Starts ReConnect -activity to current service provider
+     */
+    DECLARE_SMELEMENT_HEADER( TRequestReConnectToCurrentSP, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition, 
+                              TContext )
+    virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TRequestReConnectToCurrentSP )
+    
+    
+    /**
      * TRANSITION/ACTION: Requests Policy Server to process the error.
      * The error is taken from the error context or activity error in that order.
      */
--- a/bearermanagement/S60MCPR/inc/s60mpmrequests.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60mpmrequests.h	Fri Apr 16 15:21:37 2010 +0300
@@ -38,6 +38,12 @@
 // Forward declaration
 class CMPMPolicyNotifications;
 
+// Initial reconnect timeout is 100 000 microseconds (0.1 sec), 
+// which is doubled upon issuing the first timer request
+const TInt KMPMReconnectTimeoutMultiplier = 2;
+const TInt KMPMInitialReconnectTimeout = 100000 / KMPMReconnectTimeoutMultiplier;
+const TInt KMPMMaxReconnectTimeout = 800000;
+
 /**
 *  S60 NetMCPR MPM interface management Class inherits from CActive
 */
@@ -257,7 +263,7 @@
         * @since 5.2
         */
         void IssueDeleteRequest();
-
+        
     private:
         // policy request list
         RArray<PolicyRequest>       iPolicyRequests;
@@ -269,6 +275,11 @@
         TBool                       iCommitedToDeleteItself;
         CMPMPolicyNotifications*    iPolicyNotifications;
         MMPMPolicyNotificationUser* iPolicyNotificationsUser;
+        
+        // Reconnect timer related variables
+        RTimer                      iReconnectTimer;
+        TBool                       iReconnectTimerRunning;
+        TInt                        iReconnectTimeout;
     };
 
 #endif // S60MPMREQUESTS_H
--- a/bearermanagement/S60MCPR/inc/s60tiermanagerselector.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/inc/s60tiermanagerselector.h	Fri Apr 16 15:21:37 2010 +0300
@@ -60,6 +60,7 @@
     ESock::CMetaConnectionProviderBase* FindOrCreateProviderL( TUint aAccessPoint );
 private:
     TUint32 iDefaultAp;    
+    TSubSessionUniqueId iSubSessionUniqueId;    
     };
 
 #endif // S60IPTIERMANAGERSELECTOR_H
--- a/bearermanagement/S60MCPR/src/s60mcpr.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcpr.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -300,31 +300,21 @@
 
             //HandlePreferredIAPAvailable( const_cast<TMpmNotificationPrefIAPAvailable&>( notification ) );
 
-            // Check if the TPrefIAPNotifInfo contains new or old IAP. 
-            //
-            if ( ServiceProvider() &&
-                 ((RMetaServiceProviderInterface*)ServiceProvider())->ProviderInfo().APId() != notification.iNewIapId )
-                {
-                S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMPreferredIAPAvailable IAP %d",(TInt*)this,notification.iNewIapId);
+            S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMPreferredIAPAvailable IAP %d",(TInt*)this,notification.iNewIapId);
+
 
-                // Store PolicyNotification
-                // This could happen if PolicyServer sends notification too early.
-                //
-                StorePolicyNotification( aNotification );
-                
-                // Send preferred carrier message into meshmachine.
-                //
-                RNodeInterface ni;
-                ni.OpenPostMessageClose( NodeId(), 
-                                         NodeId(), 
-                                         TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg( (TAny*)&notification ).CRef() );
-                }
-#ifdef _DEBUG
-            else
-                {
-                S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMPreferredIAPAvailable SAME IAP %d",(TInt*)this,notification.iNewIapId );
-                }
-#endif
+            // Store PolicyNotification
+            // This could happen if PolicyServer sends notification too early.
+            //
+            StorePolicyNotification( aNotification );
+            
+            // Send preferred carrier message into meshmachine.
+            //
+            RNodeInterface ni;
+            ni.OpenPostMessageClose( NodeId(), 
+                                     NodeId(), 
+                                     TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg( (TAny*)&notification ).CRef() );
+
             break;
             }
         case EMPMMobilityErrorNotification:
@@ -398,11 +388,9 @@
                     notification.iInfo.iIap == 0 )) 
                 {
                 S60MCPRLOGSTRING2("S60MCPR<%x>::PolicyNotification() EMPMStopIAPNotification IAP %d",(TInt*)this,notification.iInfo.iIap);
-
-                //TODO migrate to use MCPR's TStop and vertical msg down. Not supported at the moment.
-                /*PostToClients<TDefaultClientMatchPolicy>( TNodeCtxId( 0, Id() ),
-                                                          TCFServiceProvider::TStop( KErrCancel ).CRef(),
-                                                          TClientType( TCFClientType::EData) );*/
+                PostToClients<TDefaultClientMatchPolicy>( TNodeCtxId( 0, Id() ),
+                                                          TCFServiceProvider::TStop( KErrDisconnected ).CRef(),
+                                                          TClientType( TCFClientType::EServProvider) );
                 }
 #ifdef _DEBUG
             else
@@ -464,14 +452,11 @@
     // Store PolicyNotification
     // This could happen if PolicyServer sends notification too early.
     //
-    S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification()",(TInt*)this);
     if ( iPendingNotification.Length() == 0 )
         {
         S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() iPendingNotification.Length() == 0",(TInt*)this);
         Mem::Copy((TAny*)iPendingNotification.Ptr(), &aNotification, KMpmMessageLength);
-        S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() Mem::Copy",(TInt*)this);
         iPendingNotification.SetLength( KMpmMessageLength );
-        S60MCPRLOGSTRING1("S60MCPR<%x>::StorePolicyNotification() iPendingNotification.SetLength",(TInt*)this);
         }
 #ifdef _DEBUG
     else
--- a/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcpractivities.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -265,8 +265,8 @@
     // Clear handshake status and wait for preferred carrier or mobility API close.
     NODEACTIVITY_ENTRY( MobilityMCprStates::KStartMobilityHandshake, 
                         CS60MobilityActivity::TClearHandshakingFlag,
-                        CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected, // Ok. Error is fatal.
-                        S60MCprMobilityActivity::TInformMigrationAvailableOrCancelTag )
+                        CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification, // Ok. Error is fatal.
+                        S60MCprMobilityActivity::TInformMigrationAvailableOrErrorOrCancelTag )
     // Application rejected active carrier
     THROUGH_NODEACTIVITY_ENTRY( S60MCprStates::KSendInitialApplicationReject, 
                                 S60MCprMobilityActivity::TSendInitialApplicationReject, 
@@ -289,34 +289,31 @@
                         S60MCprMobilityActivity::TDoNothingOrReSendPendingNotification,
                         CS60MobilityActivity::TAwaitingPreferredCarrierOrStartIAPNotificationOrErrorNotificationOrCancel, // Ok. Error is fatal
                         S60MCprMobilityActivity::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel )
+    
     // Select the next layer MCPR.
     NODEACTIVITY_ENTRY( KNoTag, 
                         MCprStates::TSelectNextLayer,
                         MCprStates::TAwaitingSelectNextLayerCompleted, // Ok. Error is fatal.
-                        MeshMachine::TNoTagOrErrorTag )
-                        //S60MCprStates::TAwaitingSelectNextLayerCompletedOrError, // Not required Error is fatal. MPM should only give valid IAPs.
-                        //MeshMachine::TNoTagOrErrorTag )// Not required Error is fatal. MPM should only give valid IAPs.
+                        CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag )              
+                        
     // For the moment it is sufficient to use the re-connect activity, in the future we may want to
     // customise the behavior, for example start the new layer before rebinding it, etc.
     NODEACTIVITY_ENTRY( KNoTag, 
                         S60MCprStates::TRequestReConnect,
                         MCprStates::TAwaitingReConnectCompleteOrError,  // Ok. Error is fatal.
-                        MeshMachine::TNoTagOrErrorTag ) //Own error handling MPM must be informed when error happens.
-    // Select or activation failed, Ask MPM to decide if it it possible/sensible to ignore the error and continue.
-    // EDoReselect return will fall into EIgnoreError branch. MPM shouldn't return Reselect in this case.
-    // And if it does, then the use of startiapnotification in mobility scenarios should be
-    // removed and only reselect should be used.
-    /* Not required. PolicyServer should only give valid IAPs.
-    NODEACTIVITY_ENTRY( KErrorTag,
-                        S60MCprStates::TProcessError,
-                        S60MCprStates::TAwaitingProcessErrorCompleteOrError,  
-                        S60MCprMobilityActivity::TWaitPolicyServerResponseBackwardOrErrorTag )
-                        */
+                        S60MCprMobilityActivity::TInformMigrationCompletedOrError ) //Own error handling MPM must be informed when error happens.
+
+    NODEACTIVITY_ENTRY( S60MCprStates::KRequestReConnectToCurrentSP,
+                        S60MCprStates::TRequestReConnectToCurrentSP,
+                        MCprStates::TAwaitingReConnectCompleteOrError,
+                        S60MCprMobilityActivity::TInformMigrationCompletedOrError )
+                        
     // If the migration was acepted we loop again waiting for a new, preferred one
-    NODEACTIVITY_ENTRY( KNoTag, 
+    NODEACTIVITY_ENTRY( S60MCprStates::KInformMigrationCompleted, 
                         CS60MobilityActivity::TInformMigrationCompleted, 
                         S60MCprMobilityActivity::TAwaitingMigrationAcceptedOrRejectedOrStartupErrorIgnoredOrCancel,
                         S60MCprMobilityActivity::TNoTagOrErrorTagOrApplicationRejectedOrConsumeRejected )
+
     // Informs policy server that application has accepted the carrier
     THROUGH_NODEACTIVITY_ENTRY( KNoTag,
                                 CS60MobilityActivity::TSendApplicationAccept,
--- a/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -194,12 +194,29 @@
             {
             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel::TransitionTag() TMPMPreferredCarrierAvailableMsg",(TInt*)&iContext.Node())    
             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EBackward;
-            }
+            }            
         // else cancel
         return KCancelTag | NetStateMachine::EForward;
         }
 
-
+    // -----------------------------------------------------------------------------
+    // S60MCprMobilityActivity::TInformMigrationCompletedOrError::TransitionTag
+    // -----------------------------------------------------------------------------
+    //
+    DEFINE_SMELEMENT( TInformMigrationCompletedOrError, NetStateMachine::MStateFork, TContext )
+    TBool TInformMigrationCompletedOrError::TransitionTag()
+        {    
+        // Error notification falls into the error -case.
+        if ( iContext.iNodeActivity->Error() ) 
+            {   
+            return MeshMachine::KErrorTag | NetStateMachine::EForward;
+            }
+        else
+            {
+            return S60MCprStates::KInformMigrationCompleted;
+            }
+        }
+        
     // -----------------------------------------------------------------------------
     // S60MCprMobilityActivity::TStartMobilityHandshakeBackwardsOrError::TransitionTag
     // -----------------------------------------------------------------------------
@@ -221,23 +238,29 @@
     // S60MCprMobilityActivity::TInformMigrationAvailableOrCancelTag::TransitionTag
     // -----------------------------------------------------------------------------
     //
-    DEFINE_SMELEMENT( TInformMigrationAvailableOrCancelTag, NetStateMachine::MStateFork, TContext )
-    TBool TInformMigrationAvailableOrCancelTag::TransitionTag()
-        {
-        if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
+    DEFINE_SMELEMENT( TInformMigrationAvailableOrErrorOrCancelTag, NetStateMachine::MStateFork, TContext )
+    TBool TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag()
+        {        
+        if ( iContext.iNodeActivity->Error() )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
+            return MeshMachine::KErrorTag | NetStateMachine::EForward;
+            }
+
+        else if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
+            {
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
             return KCancelTag | NetStateMachine::EForward;
             }
         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KSendInitialApplicationReject",
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KSendInitialApplicationReject",
                     (TInt*)&iContext.Node())
             return S60MCprStates::KSendInitialApplicationReject | NetStateMachine::EForward;
             }
         else
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KInformMigrationAvailable",(TInt*)&iContext.Node())
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KInformMigrationAvailable",(TInt*)&iContext.Node())
             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EForward;
             }
         }
@@ -341,16 +364,6 @@
         //in this implementation.
         __ASSERT_DEBUG(activity.iPreferredAPId, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
 
-        //Compute all this here to keep EvaluatePreference() as fast as possible
-        activity.iCurrent = static_cast<RMetaServiceProviderInterface*>(
-                iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(
-                        TClientType( TCFClientType::EServProvider, TCFClientType::EStarted )));
-
-        __ASSERT_DEBUG(activity.iCurrent, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
-/*  Not valid ASSERT
-        __ASSERT_DEBUG(activity.iCurrent->ProviderInfo().APId() == activity.iCurrentAssumedAPId, 
-                       User::Panic(KS60MCprPanic, KPanicInConsistentMCPRState));
-*/
         // Activity received the necessary information from the policy server earlier 
         // and now holds that information which we'll send to IPCPR.
         TCFMobilityControlClient::TMigrationNotification msg( activity.iCurrentAssumedAPId,
@@ -498,14 +511,14 @@
 			TClientType(TCFClientType::EData, TCFClientType::ELeaving));
 		iContext.iNodeActivity->PostRequestTo(*dc, TCFDataClient::TStop(iContext.iNodeActivity->Error()).CRef());
 		}
-	
+    
     // -----------------------------------------------------------------------------
-    // CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected::Accept
+    // CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept
     // -----------------------------------------------------------------------------
     //
-    DEFINE_SMELEMENT( CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected, 
+    DEFINE_SMELEMENT( CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification, 
                       NetStateMachine::MState, TContext )
-    TBool CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected::Accept()
+    TBool CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept()
         {
         TBool result( EFalse );
         
@@ -518,7 +531,7 @@
 
             TMpmNotificationPrefIAPAvailable* notif = (TMpmNotificationPrefIAPAvailable*)msg->iPtr;
 
-            S60MCPRLOGSTRING4("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TMPMPreferredCarrierAvailableMsg %d -> %d upgrade=%d",
+            S60MCPRLOGSTRING4("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMPMPreferredCarrierAvailableMsg %d -> %d upgrade=%d",
                        (TInt*)&iContext.Node(), notif->iOldIapId, notif->iNewIapId, notif->iIsUpgrade)
             // notif must be there.
             ASSERT(notif);
@@ -538,18 +551,28 @@
             }
         else if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TCancel", 
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TCancel", 
                     (TInt*)&iContext.Node())
             
             result = ETrue;
             }
         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
             {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TMigrationRejected", 
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMigrationRejected", 
                     (TInt*)&iContext.Node())
             
             result = ETrue;
             }
+        else if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMErrorNotificationMsg>() )
+            {
+            CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
+            TCFS60MCPRMessage::TMPMErrorNotificationMsg* msg = 
+                message_cast<TCFS60MCPRMessage::TMPMErrorNotificationMsg>( &iContext.iMessage );
+            S60MCPRLOGSTRING2("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMPMErrorNotificationMsg %d",(TInt*)&iContext.Node(),msg->iValue)
+            ASSERT( msg->iValue != KErrNone );
+            activity.SetError( msg->iValue );
+            result = ETrue;
+            }
 
         return result;
         }
@@ -666,29 +689,40 @@
 
             return MeshMachine::KCancelTag | NetStateMachine::EForward;
             }
-/*        else
-            {
-            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedMigrationOrCancel::TransitionTag() Generating ApplicationIgnoredTheCarrier", (TInt*)&iContext.Node() );
-
-            // Need to put MPM in consistent state and continue.
-            CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
-            CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
-            TRAP_IGNORE( node.Policy()->ApplicationIgnoredTheCarrierL( activity.iPreferredAPId ) );
-            
-            if ( iContext.iNodeActivity->Error() == KErrNone )
-                {
-                ASSERT(EFalse); // should not happend
-                iContext.iNodeActivity->SetError( KErrGeneral ); // doesn't have effect if already set.
-                return MeshMachine::KErrorTag | NetStateMachine::EForward;
-                }
-            
-            return MeshMachine::KErrorTag | NetStateMachine::EForward;
-            }*/
         S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrApplicationRejectedMigrationOrCancel::TransitionTag() KErrorTag ESock_IP Panic",(TInt*)&iContext.Node())
         ASSERT(EFalse); // error, IPCPR should not send TError in this case.
         return MeshMachine::KErrorTag | NetStateMachine::EForward;
         }
 
+    // -----------------------------------------------------------------------------
+    // CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::DoL
+    // -----------------------------------------------------------------------------
+    //
+    DEFINE_SMELEMENT( CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag, 
+                      NetStateMachine::MStateFork, CS60MobilityActivity::TContext )
+    TInt CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::TransitionTag()
+        {
+        CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
+        RMetaServiceProviderInterface* sp = (RMetaServiceProviderInterface*)node.ServiceProvider();
+
+        if ( iContext.iNodeActivity->Error() )
+            {
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
+            return MeshMachine::KErrorTag | NetStateMachine::EForward;
+            }
+            // Check whether we're bound to a provider for the given IAP ID already
+        else if (sp && sp->ProviderInfo().APId() == node.PolicyPrefs().IapId())
+            {
+            // Restart the whole layer
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() Re-establishment",(TInt*)&iContext.Node());
+            return S60MCprStates::KRequestReConnectToCurrentSP | NetStateMachine::EForward;
+            }
+        else
+            {
+            S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KNoTag",(TInt*)&iContext.Node())
+            return MeshMachine::KNoTag | NetStateMachine::EForward;
+            }
+        }    
     
     // -----------------------------------------------------------------------------
     // CS60MobilityActivity::ClearHandshakingFlag
--- a/bearermanagement/S60MCPR/src/s60mcprsimpleselectactivity.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprsimpleselectactivity.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -155,12 +155,11 @@
 
 		TSelectionPrefs prefs;
 
-		ESock::RConnPrefList::TIter<TConnCSRPref> iterCSR = node.ConnPrefList().getIter<TConnCSRPref>();
-		//There should be one and only one CSR pref
-		ASSERT(iterCSR[0] != NULL && iterCSR[1] == NULL);
-		TConnCSRPref* csrprefs = iterCSR[0];
-
-		prefs.SetSubSessionUniqueId(csrprefs->SubSessionUniqueId());
+        ESock::RConnPrefList::TIter<TConnCSRPref> iterCSR = node.ConnPrefList().getIter<TConnCSRPref>();
+        //There should be one and only one CSR pref
+        ASSERT(iterCSR[0] != NULL && iterCSR[1] == NULL);
+        TConnCSRPref* csrprefs = iterCSR[0];
+		prefs.SetSubSessionUniqueId(node.SubSessionUniqueId());
 		prefs.SetFlags(csrprefs->Flags());
 		prefs.SetScope(csrprefs->Scope());
 
@@ -172,7 +171,6 @@
 		node.ConnPrefList().AppendL(nextAP);
 		CleanupStack::Pop();
 		/* END OF HACK */
-
 		
         // Attach. 399 attach shouldn't be visible here.
         if ( prefs.Scope()&TSelectionPrefs::ESelectFromExisting )
@@ -185,6 +183,7 @@
         else
             {
             S60MCPRLOGSTRING1("S60MCPR<%x>::TSelectNextLayer::DoL() Start",(TInt*)&iContext.Node())
+
             TCommDbConnPref ippprefs;
             ippprefs.SetIapId( node.PolicyPrefs().IapId() );
             ippprefs.SetNetId( node.PolicyPrefs().NetId() );
@@ -195,10 +194,6 @@
             newPrefs.SetPrefs( ippprefs );
             TCFSelector::TSimpleSelect msg(newPrefs);
             iContext.iNodeActivity->PostRequestTo(ac.iTierManager, msg);
-
-            //TODO Clarify, if the SelectionChoices is actually needed...
-            //if (ac.SelectionChoices().Count() == 0)
-            //ac.SelectionChoices().Append(node.iIAPList[0]);
             }
         }
     }
@@ -296,11 +291,15 @@
             }
 #endif //_DEBUG
 
+        TSelectionPrefs newPrefs;
+        newPrefs = node.SelectionPrefs();
+        newPrefs.SetSubSessionUniqueId( node.SubSessionUniqueId() );
+        
         // Attach. 399 attach shouldn't be visible here.
         if ( node.SelectionPrefs().Scope()&TSelectionPrefs::ESelectFromExisting )
             {
             S60MCPRLOGSTRING1("S60MCPR<%x>::TSelectNextLayer::DoL() Attach ",(TInt*)&iContext.Node())
-            TCFSelector::TSimpleSelect msg( node.SelectionPrefs() );
+            TCFSelector::TSimpleSelect msg( newPrefs );
             iContext.iNodeActivity->PostRequestTo( ac.iTierManager, msg );
             }
         // Start
@@ -312,15 +311,9 @@
             ippprefs.SetNetId( node.PolicyPrefs().NetId() );
             //node.MapPolicyPrefsToConnPrefL( node.PolicyPrefs(), tmppref );
             // don't use reference we want to preserve the original TSelectionPrefs.
-            TSelectionPrefs newPrefs;
-            newPrefs = node.SelectionPrefs();
             newPrefs.SetPrefs( ippprefs );
             TCFSelector::TSimpleSelect msg(newPrefs);
             iContext.iNodeActivity->PostRequestTo(ac.iTierManager, msg);
-
-            //TODO Clarify, if the SelectionChoices is actually needed...
-            //if (ac.SelectionChoices().Count() == 0)
-            //ac.SelectionChoices().Append(node.iIAPList[0]);
             }
         }
 
@@ -349,16 +342,7 @@
         CleanupStack::PushL( cb );
 
         // Resolve application uid.
-        TSubSessionUniqueId subSessionUniqueId = node.SelectionPrefs().SubSessionUniqueId();
-
-		if ( !node.ConnPrefList().Count() )
-			{
-            subSessionUniqueId = node.SelectionPrefs().SubSessionUniqueId();
-            }
-        else
-            {
-            subSessionUniqueId = node.SubSessionUniqueId();
-            }
+        TSubSessionUniqueId subSessionUniqueId = node.SubSessionUniqueId();
 
         TSecureId secureId( 0 );
         
--- a/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprstates.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -54,7 +54,6 @@
               node.RequestPermissionToSendStarted() )
         {
         S60MCPRLOGSTRING2("S60MCPR<%x>::THandleMPMStatusChange::DoL() calling IAPConnectionStartedL IAP %d",(TInt*)&iContext.Node(),iapid)
-        // TODO use progress notification KLinkLayerOpen once Symbian provides them.
         node.Policy()->IAPConnectionStartedL( iapid );  // codescanner::leave
         }
     else if ( msg.iValue == TCFControlProvider::TDataClientStatusChange::EStopped &&
@@ -114,28 +113,46 @@
     RNodeInterface* stoppingSP = NULL;
     RNodeInterface* startingSP = NULL;
 
-    // The one that will be started is the one MPM selected.
-    // Both must be present in the MCPR -plane.
+    // Get the MCPR
+    CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
+    
+    // At this point MCPR has selected two active IPProtoMCPRs.
+    // The one that will be started is the one MPM selected and
+    // the one which doesn't match the policy preferences is the
+    // old selection and needs to be disconnected.
+    //
+    TUint32 newAP = node.PolicyPrefs().IapId();
+    ASSERT( newAP > 0 );
 
     // Choose Service Providers to work on
     TClientIter<TDefaultClientMatchPolicy> iter = 
         iContext.Node().GetClientIter<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EServProvider));
-
-    RNodeInterface* itf = NULL;
-    for ( itf = iter++; ( itf != NULL && ( stoppingSP == NULL || startingSP == NULL ) ); itf = iter++ )
+    
+    RMetaServiceProviderInterface* itf = NULL;
+    //RNodeInterface* itf = NULL;
+    
+    for ( itf = (RMetaServiceProviderInterface*)iter++;
+             ( itf != NULL && ( stoppingSP == NULL || startingSP == NULL ) );
+             itf = (RMetaServiceProviderInterface*)iter++ )
         {
-        // Only one of the selected MCPRs can be EStarted.
-        //
-        if ( itf->Flags() & TCFClientType::EStarted )
+        if ( itf->Flags() & TCFClientType::EActive )
             {
-            stoppingSP = itf; //Our current started Service Provider.
-            itf->ClearFlags( TCFClientType::EActive );
-            }
-        // The other which is not EStarted must be EActive.
-        //
-        else if ( itf->Flags() & TCFClientType::EActive )
-            {
-            startingSP = itf; //And the new one to try next
+            // Select one that shall be stopped.
+            //
+            if ( itf->ProviderInfo().APId() != newAP )
+                {
+                stoppingSP = itf;
+                itf->ClearFlags( TCFClientType::EActive );
+                }
+            // Select one that shall be started
+            //
+            else if ( itf->ProviderInfo().APId() == newAP )
+                {
+                startingSP = itf;
+                itf->ClearFlags( TCFClientType::EActive );
+                }
+            // no else.
+            //
             }
         }
     // One must be started since this is already a reconnection
@@ -147,10 +164,6 @@
         User::Leave( KErrCorrupt );  // codescanner::leave
         }
 
-    //Sanity check.
-    //The new provider must not be started, there can be only one started at a time.
-    ASSERT( startingSP == NULL || ( startingSP->Flags() & TCFClientType::EStarted ) == 0 );
-
     //If there is no other Service Provider to try, return KErrNotFound
     if ( startingSP == NULL )
         {
@@ -167,7 +180,28 @@
                                                                 startingSP->RecipientId()).CRef() );
     }
 
+// -----------------------------------------------------------------------------
+// TRequestReConnectToCurrentSP::DoL
+// -----------------------------------------------------------------------------
+//
+DEFINE_SMELEMENT( TRequestReConnectToCurrentSP, NetStateMachine::MStateTransition, TContext )
+void TRequestReConnectToCurrentSP::DoL() // codescanner::leave
+    {
+    __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KS60MCprPanic, KPanicNoActivity));
+    S60MCPRLOGSTRING1("S60MCPR<%x>::TRequestReConnectToCurrentSP::DoL()",(TInt*)&iContext.Node())
+    RNodeInterface* currentSP = iContext.Node().ServiceProvider();
 
+    // There MUST be a service provider
+    __ASSERT_DEBUG( currentSP != NULL, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
+    
+    // Diagnostic - there must be a data client or we cannot be here
+    __ASSERT_DEBUG(iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EData)),
+                   User::Panic(KS60MCprPanic, KPanicNoDataClient));    
+    
+    iContext.iNodeActivity->PostRequestTo( iContext.NodeId(),
+                                           TCFMcpr::TReConnect( currentSP->RecipientId(), 
+                                                                currentSP->RecipientId()).CRef() );
+    }
 // -----------------------------------------------------------------------------
 // TProcessError::DoL
 // -----------------------------------------------------------------------------
--- a/bearermanagement/S60MCPR/src/s60mpmrequests.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60mpmrequests.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -86,7 +86,9 @@
 //
 CMPMPolicyRequests::CMPMPolicyRequests() :
                                     CActive( EPriorityStandard ),
-                                    iCommitedToDeleteItself( EFalse )
+                                    iCommitedToDeleteItself( EFalse ),
+                                    iReconnectTimerRunning( EFalse ),
+                                    iReconnectTimeout( KMPMInitialReconnectTimeout )
     {
     S60MCPRLOGSTRING1( "S60MCPR::CMPMPolicyRequests<%x>::CMPMPolicyRequests()", this )
     CActiveScheduler::Add( this );
@@ -129,6 +131,12 @@
         S60MCPRLOGSTRING1( "S60MCPR::CMPMPolicyRequests<%x>::~CMPMPolicyRequests() closing MPM session", this )
         iMpm.Close();
         }
+    
+    if ( iReconnectTimerRunning )
+        {
+        Cancel();
+        iReconnectTimer.Close();
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -458,8 +466,6 @@
 //
 void CMPMPolicyRequests::IssueRequest()
     {
-    //__ASSERT_ALWAYS(IsActive() || iPolicyRequests.Count() > 0,User::Panic(KNetMCprPanic, KPanicInvalidCActiveUsage));
-
     // If we have a pending request, back off.
     //
     if ( IsActive() || iPolicyRequests.Count() == 0 )
@@ -621,10 +627,22 @@
     {
     S60MCPRLOGSTRING2( "S60MCPR::CMPMPolicyRequests<%x>::RunL() iStatus %d", this, iStatus.Int() )
 
-    // If there's a request waiting and is now completed
-    //
-    if ( iPolicyRequests.Count() > 0 && !iCommitedToDeleteItself)
+    // At first, check if this is a timer activity
+    if ( iReconnectTimerRunning )
         {
+        // iMpm.Connect() failed at least once. Timeout has expired, try again.
+#ifdef _DEBUG    
+        TBool isConnected = iMpm.Connected();
+        __ASSERT_DEBUG( !isConnected,  User::Panic( KS60MCprPanic, KErrGeneral ) );
+#endif
+        iReconnectTimerRunning = EFalse;
+        iReconnectTimer.Close();
+        iMpm.Connect( iStatus );
+        SetActive();
+        } 
+    else if ( iPolicyRequests.Count() > 0 && !iCommitedToDeleteItself)
+        {
+        // there's a request waiting and is now completed
         S60MCPRLOGSTRING1( "S60MCPR::CMPMPolicyRequests<%x>::RunL() Standard processing", this )
         PolicyRequest& policydata = iPolicyRequests[0];
         // Process the response
@@ -635,9 +653,9 @@
                 {
                 if ( iStatus.Int() != KErrNone )
                     {
-                    //-jl- MPM connection failed, set MPM connection required again.
+                    // MPM connection failed, set MPM connection required again.
                     iMpm.Close();
-                    //-jl- Go to RunError
+                    // Go to RunError
                     User::Leave( iStatus.Int() );
                     }
                 else
@@ -755,9 +773,16 @@
 //
 void CMPMPolicyRequests::DoCancel()
     {
-    // Not allowed! Cancel() may cause deadlock!
     _LIT( KPanicMsg, "CMPMPolicyRequests::DoCancel" );
-    User::Panic( KPanicMsg, KErrNotSupported );
+    if ( iReconnectTimerRunning )
+        {
+        iReconnectTimer.Cancel();
+        }
+    else
+        {
+        // Not allowed! Cancel() may cause deadlock!
+        User::Panic( KPanicMsg, KErrNotSupported );
+        }
     }
 
 
@@ -769,20 +794,33 @@
     {
     S60MCPRLOGSTRING1( "S60MCPR::CMPMPolicyRequests<%x>::RunError()", this )
     // Connect has failed, cleanup and deliver errors
-    TInt count = iPolicyRequests.Count();
-    for ( TInt i = 0; i < count; i++ )
+    if ( aError != KErrServerBusy || iReconnectTimeout >= KMPMMaxReconnectTimeout )
         {
-        if ( iPolicyRequests[i].iUser )
+        TInt count = iPolicyRequests.Count();
+        for ( TInt i = 0; i < count; i++ )
             {
-            S60MCPRLOGSTRING2( "S60MCPR::CMPMPolicyRequests<%x>::RunError() Sending error %d in PolicyResponse", this, aError )
-            iPolicyRequests[i].iStatus = aError;
-            iPolicyRequests[i].iUser->PolicyResponse( iPolicyRequests[i] );
+            if ( iPolicyRequests[i].iUser )
+                {
+                S60MCPRLOGSTRING2( "S60MCPR::CMPMPolicyRequests<%x>::RunError() Sending error %d in PolicyResponse", this, aError )
+                iPolicyRequests[i].iStatus = aError;
+                iPolicyRequests[i].iUser->PolicyResponse( iPolicyRequests[i] );
+                }
+            
+            // Delete prefs
+            iPolicyRequests[i].Cleanup();
             }
-        
-        // Delete prefs
-        iPolicyRequests[i].Cleanup();
+        iPolicyRequests.Reset();
         }
-    iPolicyRequests.Reset();
+    else
+        {
+        // KErrServerBusy received, try reconnecting after a brief pause
+        iReconnectTimeout *= KMPMReconnectTimeoutMultiplier;
+        TTimeIntervalMicroSeconds32 timeout( iReconnectTimeout );
+        iReconnectTimer.CreateLocal();
+        iReconnectTimer.After( iStatus, timeout );
+        iReconnectTimerRunning = ETrue;
+        SetActive();
+        }
 
     return KErrNone;
     }
@@ -885,5 +923,4 @@
     IssueRequest();
     }
 
-
 // End of file
--- a/bearermanagement/S60MCPR/src/s60tiermanagerselector.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/S60MCPR/src/s60tiermanagerselector.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -97,6 +97,8 @@
     //Legacy Attach -case handling is in NetMCPR and IPProtoTM
     // 399 Attach is not supported
     const TConnPref& prefs = iSelectionPrefs.Prefs();
+    iSubSessionUniqueId = iSelectionPrefs.SubSessionUniqueId();
+    
     switch ( prefs.ExtensionId() )
         {
         case TConnPref::EConnPrefCommDbMulti:
@@ -130,8 +132,8 @@
             break;
             }
         }
-    // We do the default behavior. AP is only needed to get proper UIds for TM etc..
-    // TODO: change to use AP.
+    // We use default AP always. If some variation is needed in APs, then
+    // this must be changed to use specific APs instead of the default one.
     aSelectionNotify.SelectComplete( this, FindOrCreateProviderL( iDefaultAp ));
     aSelectionNotify.SelectComplete( this, NULL );
     }
@@ -164,6 +166,7 @@
     
     // Provision selection preferences to S60 NetMCPR.
     prov->SetSelectionPrefs( iSelectionPrefs );
+    prov->SetSubSessionUniqueId( iSubSessionUniqueId );
 
     // Change the provider info so that this provider is never found by other selections
     const TProviderInfo& pi = provider->ProviderInfo();
--- a/bearermanagement/mpm/group/mpmserver.mmp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/group/mpmserver.mmp	Fri Apr 16 15:21:37 2010 +0300
@@ -54,7 +54,7 @@
 SOURCE            mpmiapselection.cpp
 SOURCE            mpmcsidwatcher.cpp
 SOURCE            mpmdialogbase.cpp
-SOURCE            mpmwlanavailability.cpp
+SOURCE            mpmdatausagewatcher.cpp
 
 USERINCLUDE       ../inc
 
--- a/bearermanagement/mpm/inc/mpmconnmonevents.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmconnmonevents.h	Fri Apr 16 15:21:37 2010 +0300
@@ -32,13 +32,11 @@
 #include <commsdat.h>
 #include <commsdat_partner.h>
 #endif
-#include <NIFVAR.H>
+#include <nifvar.h>
 #include "mpmserver.h"
 
 // FORWARD DECLARATIONS
 class CMPMConnMonReqs;
-class CWlanAvailability;
-class MWlanAvailability;
 
 // CONSTANTS
 
@@ -298,31 +296,10 @@
         /**
          * Creates preferred carrier available notification when needed.
          * @since 5.1
-         */
-        void IapAvailabilityChange();
-
-        /**
-         * Asks WLAN bearer availability info from Connection monitor.
-         * @since 5.2
-         * @param aObserver pointer to the caller
+         * @param aCaller Identifies the calling context
          */
-        void CheckWlanAvailabilityL( MWlanAvailability* aObserver );
-        
-        /**
-         * Cancels WLAN bearer availability check for an observer.
-         * @since 5.2
-         * @param aObserver pointer to the caller
-         */
-        void CancelCheckWlanWlanAvailability( MWlanAvailability* aObserver );
-    
-        /**
-         * Sets iWlanAvailability pointer to NULL because object has
-         * deleted itself.
-         * @since 5.2
-         */
-        void SetWlanAvailabilityPtrNull();
-
-        
+        void IapAvailabilityChange( const TPrefIAPNotifCaller aCaller );
+       
     public: // Functions from base classes
     
         /**
@@ -373,7 +350,6 @@
         void FilterAvailableIAPEvents( const TBool aVal ) { iFilterEvents = aVal; }
 #endif //_DEBUG
 
-       CWlanAvailability*               iWlanAvailability;
     };
 
 // -----------------------------------------------------------------------------
--- a/bearermanagement/mpm/inc/mpmcsidwatcher.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmcsidwatcher.h	Fri Apr 16 15:21:37 2010 +0300
@@ -18,6 +18,9 @@
 #ifndef MPMCSIDWATCHER_H
 #define MPMCSIDWATCHER_H
 
+//  INCLUDES
+#include <e32base.h>
+
 class CRepository;
 
 /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bearermanagement/mpm/inc/mpmdatausagewatcher.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* 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: Listen cellular data usage key changes in central repository.
+*
+*/
+
+#ifndef MPMDATAUSAGEWATCHER_H
+#define MPMDATAUSAGEWATCHER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+class CRepository;
+class CMPMServer;
+
+/**
+ *  Class for accessing central repository.
+ *  Follows KCurrentCellularDataUsage key in central repository.
+ *  @since 5.2
+ */
+class CMpmDataUsageWatcher : public CActive
+    {
+
+public:
+
+    /**
+    * New for calling the two-phased constructor.
+    */
+    static CMpmDataUsageWatcher* NewL( CMPMServer* aServer );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CMpmDataUsageWatcher();
+
+    /**
+     * Start to listen for events.
+     */
+    void StartL();
+    
+    /**
+    * Active object's RunL.
+    */
+    void RunL();
+
+    /**
+    * Active object's RunError.
+    */
+    TInt RunError( TInt aError );
+
+    /**
+    * Active object's DoCancel.
+    */
+    void DoCancel();
+
+private:
+
+    /**
+    * C++ default constructor.
+    */
+    CMpmDataUsageWatcher( CMPMServer* aServer );
+
+    /**
+    * Symbian 2nd phase constructor.
+    */
+    void ConstructL();
+
+private: // data
+
+    /**
+     * Central repository handle.
+     * Own.
+     */
+    CRepository* iRepository;
+
+    /**
+     * Data usage value.
+     */
+    TInt iCellularDataUsage;     // type: TCmCellularDataUsage
+
+    /**
+     * Pointer to the MPM Server object.
+     * Not own.
+     */
+    CMPMServer* iServer;
+
+    };
+
+#endif // MPMDATAUSAGEWATCHER_H
--- a/bearermanagement/mpm/inc/mpmiapselection.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmiapselection.h	Fri Apr 16 15:21:37 2010 +0300
@@ -22,12 +22,10 @@
 
 #include "mpmserversession.h"
 #include "mpmcommsdataccess.h"
-#include "mpmwlanavailability.h"
 
 class CMPMDialog;
 class CMPMWlanQueryDialog;
 class CMPMConfirmDlgStarting;
-class MWlanAvailability;
 class TMpmConnPref;
 
 enum TOfflineNoteResponse
@@ -45,8 +43,7 @@
  *  @lib mpmserver.exe
  *  @since S60 v3.2
  */
-class CMPMIapSelection : public CBase,
-                         public MWlanAvailability
+class CMPMIapSelection : public CBase
     {
 
 public:
@@ -240,13 +237,6 @@
      * @since 3.2
      */
     void ConnectionStarted();
-    
-    /**
-     * Triggers an information note. Note disappears automatically. 
-     *
-     * @since 5.2
-     */
-    void TriggerInformationNoteL();
 
     /**
      * Get original MPM connection preferences
@@ -307,18 +297,6 @@
      */
     void ImplicitConnectionWlanNoteL();
     
-private: // from MWlanAvailability
-
-       /**
-       * WLAN availability check response
-       * @since 3.2
-       * @param aError generic Symbian error response code
-       * @param aResult Result of WLAN availability check
-       * @return void
-       */
-       void WlanAvailabilityResponse( const TInt  aError, 
-                                      const TBool aResult );
-
 private:
 
     /**
--- a/bearermanagement/mpm/inc/mpmlauncher.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmlauncher.h	Fri Apr 16 15:21:37 2010 +0300
@@ -26,6 +26,9 @@
 //  INCLUDES
 #include <e32std.h>
 
+// CONSTANTS
+_LIT( KMPMLauncherSemaphore, "MPMLauncherSemaphore" );
+
 // CLASS DECLARATION
 /**
 *  Mobility Policy Manager server laucher for client.
--- a/bearermanagement/mpm/inc/mpmroamingwatcher.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmroamingwatcher.h	Fri Apr 16 15:21:37 2010 +0300
@@ -77,11 +77,6 @@
         */
         TMPMRoamingStatus RoamingStatus() const;
         
-        TBool AskCellularDataUsageAbroad() const;
-        
-        void SetAskCellularDataUsageAbroad(TBool aAskUsage);
-        
-        
     protected: // Constructors and destructor
         	    
 	    /**
@@ -148,14 +143,6 @@
         * Current country
         */
         RMobilePhone::TMobilePhoneNetworkCountryCode iCurrentCountryCode;
-        
-        /**
-         * This variable indicates wheather cellular data usage abroad must be confirmed from the user
-         * This variable is set to TRUE when roaming to visitor network happens and it is set to FALSE when
-         * Confirm Dialog is presented first time in current foreign country. It is also set to FALSE every
-         * time when mobile comes back to home network or moves to other foreign country
-         */
-        TBool iAskCellularDataUsageAbroad;
 	};
 
 #endif // MPMROAMINGWATCHER_H
--- a/bearermanagement/mpm/inc/mpmserver.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/inc/mpmserver.h	Fri Apr 16 15:21:37 2010 +0300
@@ -37,6 +37,7 @@
 
 class CMPMCommsDatAccess;
 class CMpmCsIdWatcher;
+class CMpmDataUsageWatcher;
 
 // CONSTANTS
 _LIT( KMPMPanicCategory, "Mobility Policy Manager Server" );
@@ -124,7 +125,8 @@
 // Which component initiated sending preferred IAP notifications
 enum TPrefIAPNotifCaller
     {
-    EConnMon = 0, 
+    EConnMon = 0,
+    EConnMonEvent,
     EBearerMan, 
     EConfirmDlgRoaming, 
     EConfirmDlgStarting
@@ -436,9 +438,11 @@
         /**
         * Notify each session about IAP availability change.
         * @since 3.1
-        * @param aIapInfo Info about available IAPs 
+        * @param aIapInfo Info about available IAPs
+        * @param aCaller Identifies the calling context 
         */
-        void NotifyBMPrefIapL( const TConnMonIapInfo& aIapInfo );
+        void NotifyBMPrefIapL( const TConnMonIapInfo& aIapInfo,
+                               const TPrefIAPNotifCaller aCaller );
 
         /**
         * Update Connection dialog of each session
@@ -488,17 +492,6 @@
         /**
         * Handling of unblacklisting all IAPs for certain category.
         * @since 3.2
-        * @param aConnId Connection Id
-        * @param aCategory Either connection lifetime or temporary. 
-        * @return KErrNone if successful, otherwise one of the
-        * system-wide error codes 
-        */
-        TInt HandleServerUnblackListIap( const TConnectionId aConnId, 
-                                         TBlacklistCategory  aCategory );
-
-        /**
-        * Handling of unblacklisting all IAPs for certain category.
-        * @since 3.2
         * @param aCategory Either connection lifetime or temporary. 
         */
         void HandleServerUnblackListIap( TBlacklistCategory  aCategory );
@@ -834,6 +827,12 @@
         */
         CMPMServerSession* GetServerSession( TConnectionId aConnId ) const;
         
+        /**
+        * Stops cellular connections, except MMS
+        * @since 5.2
+        */
+        void StopCellularConns();
+
     private:
 
         /**
@@ -938,6 +937,11 @@
          */
         CMpmCsIdWatcher* iMpmCsIdWatcher;
 
+        /**
+         * Handle to another central repository watcher
+         */
+        CMpmDataUsageWatcher* iMpmDataUsageWatcher;
+
         // Iap id of the active connection
         TUint32 iActiveIapId;
         
--- a/bearermanagement/mpm/inc/mpmwlanavailability.h	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/*
-* 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: WLAN availability check.
-*
-*/
-
-/**
-@file mpmwlanavailability.h
-WLAN availability check definition.
-*/
-
-#ifndef MPMWLANAVAILABILITY_H
-#define MPMWLANAVAILABILITY_H
-
-// INCLUDES
-#include <e32base.h>
-#include <rconnmon.h>
-#include "mpmconnmonevents.h"
-
-// FORWARD DECLARATIONS
-class CMPMConnMonEvents;
-
-// CLASS DECLARATION
-/**
-*  WLAN availability check
-*
-*  @lib MPMServer.exe
-*  @since 5.2
-*/
-class MWlanAvailability
-    {
-    public:
-        /**
-        * WLAN availability check response
-        * @since 5.2
-        * @param aError generic Symbian error response code
-        * @param aResult Result of WLAN availability check
-        * @return void
-        */
-        virtual void WlanAvailabilityResponse( const TInt  aError, 
-                                               const TBool aResult ) = 0;
-    };
-
-// CLASS DECLARATION
-/**
-*  WLAN availability check implementation
-*
-*  @lib MPMServer.exe
-*  @since 5.2
-*/
-NONSHARABLE_CLASS( CWlanAvailability ) : public CActive
-    {
-    public:
-
-        /**
-        * Two-phased constructor.
-        */
-        static CWlanAvailability* NewL( CMPMConnMonEvents*  aConnMonEvents,
-                                        RConnectionMonitor& aConnMon );
-
-        /**
-        * Destructor.
-        */
-        virtual ~CWlanAvailability();
-
-        /**
-        * For starting the active object.
-        * @since 5.2
-        */
-        void Start( MWlanAvailability* aObserver );
-        
-        /**
-         * For cancelling the request for an observer.
-         * @since 5.2
-         */
-        void CancelObserver( MWlanAvailability* aObserver );
-        
-    private:
-
-        /**
-        * C++ default constructor.
-        */
-        CWlanAvailability( CMPMConnMonEvents*  aConnMonEvents,
-                           RConnectionMonitor& aConnMon );
-
-        /**
-        * 2nd phase constructor.
-        */
-        void ConstructL();
-
-    private: // from CActive
-
-        /**
-        * Active Object RunL.
-        */
-        void RunL();
-
-        /**
-        * Active Object DoCancel.
-        */
-        void DoCancel();
-
-    private:
-        
-        CMPMConnMonEvents*                  iConnMonEvents;
-        RConnectionMonitor&                 iConnMon;
-        RPointerArray< MWlanAvailability >  iObserver;
-        TRequestStatus                      iRequestStatus;
-        TBool                               iResult;
-    };
-
-#endif // MPMWLANAVAILABILITY_H
--- a/bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmconfirmdlgstarting.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -266,13 +266,6 @@
             TRAP_IGNORE(iServer.CommsDatAccess()->WriteGenConnSettingsL( genConnSettings )); 
             }
         } 
-    else
-        {
-        //In foreign country connect automatically is not stored in commsdat
-        //even user selected so. We just do not ask confirmation for the cellular
-        //connection again in this country:
-        iServer.RoamingWatcher()->SetAskCellularDataUsageAbroad( false );            
-        }
     
     TBool wlanNeeded( EFalse );
     TRAPD( err, wlanNeeded = iIapSelection.StartWlanQueryIfNeededL( iIAP ) )
--- a/bearermanagement/mpm/src/mpmconnmonevents.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmconnmonevents.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -26,7 +26,6 @@
 #include "mpmserver.h"
 #include "mpmserversession.h"
 #include "mpmlogger.h"
-#include "mpmwlanavailability.h"
 
 // ============================= LOCAL FUNCTIONS ===============================
 
@@ -68,8 +67,6 @@
     iConnMon.Close();
     iReqPtrs.ResetAndDestroy();
     iConnInfoArray.Close();
-    delete iWlanAvailability;
-    iWlanAvailability = NULL;
     }
 
 
@@ -464,7 +461,7 @@
 // CMPMConnMonEvents::IapAvailabilityChange
 // -----------------------------------------------------------------------------
 // 
-void CMPMConnMonEvents::IapAvailabilityChange()
+void CMPMConnMonEvents::IapAvailabilityChange( const TPrefIAPNotifCaller aCaller )
     {
     if ( ( iAvailableIAPs.Count() > 0 ) && 
          !DiscardAvailabilityNotification() )
@@ -478,7 +475,7 @@
         // or Connection Monitor CConnMonEventHandler::RunL() 
         // will also leave, which will make mpmserver.exe CRASH.
         // 
-        TRAP_IGNORE( iMyServer.NotifyBMPrefIapL( iAvailableIAPs ) )
+        TRAP_IGNORE( iMyServer.NotifyBMPrefIapL( iAvailableIAPs, aCaller ) )
         }
     else
         {
@@ -537,7 +534,7 @@
 
             iAvailableIAPs = eventIap->IapAvailability();
             UpdateIAPRefreshTime();
-            IapAvailabilityChange();
+            IapAvailabilityChange( EConnMonEvent );
             
             TRAPD( err, iMyServer.UpdateSessionConnectionDlgL() )
             if( err != KErrNone )
@@ -697,52 +694,5 @@
     {
     }
 
-// -----------------------------------------------------------------------------
-// CMPMConnMonEvents::CheckWlanAvailabilityL
-// -----------------------------------------------------------------------------
-// 
-void CMPMConnMonEvents::CheckWlanAvailabilityL( MWlanAvailability* aObserver )
-    {
-    MPMLOGSTRING( "CMPMConnMonEvents::CheckWlanAvailabilityL" )
-    // Sanity check null pointer 
-    ASSERT( aObserver != NULL );
-
-    // Request for WLAN bearer availability info
-    //
-    if ( !iWlanAvailability )
-        {
-        iWlanAvailability = CWlanAvailability::NewL( this, iConnMon );
-        }
-    
-    iWlanAvailability->Start( aObserver );
-    }
-
-// -----------------------------------------------------------------------------
-// CMPMConnMonEvents::CancelCheckWlanWlanAvailability
-// -----------------------------------------------------------------------------
-//
-void CMPMConnMonEvents::CancelCheckWlanWlanAvailability( MWlanAvailability* aObserver )
-    {
-    MPMLOGSTRING( "CMPMConnMonEvents::CancelCheckWlanWlanAvailability" )
-    // Sanity check null pointer 
-    ASSERT( aObserver != NULL );
-
-    // Cancel WLAN bearer availability check for this observer
-    //
-    if ( iWlanAvailability )
-        {
-        iWlanAvailability->CancelObserver( aObserver );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CMPMConnMonEvents::SetWlanAvailabilityPtrNull
-// -----------------------------------------------------------------------------
-//
-void CMPMConnMonEvents::SetWlanAvailabilityPtrNull()
-    {
-    iWlanAvailability = NULL;
-    }
-
 //  End of File
 
--- a/bearermanagement/mpm/src/mpmconnmonreqs.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmconnmonreqs.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -342,7 +342,7 @@
                         MPMLOGSTRING( "CMPMConnMonReqs::RunL: iWlanScanCallback EWlanScanCallbackGenerateEvent" )
                         // Generate event only if not 
                         //
-                        iParent.IapAvailabilityChange();
+                        iParent.IapAvailabilityChange( EConnMon );
                         }
                     }
                 // check which callback function to use
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bearermanagement/mpm/src/mpmdatausagewatcher.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,149 @@
+/*
+ * 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: Listen cellular data usage key changes in central repository.
+ *
+ */
+
+#include <e32base.h>
+#include <centralrepository.h>
+#include <cmmanagerkeys.h>
+#include <cmgenconnsettings.h>
+
+#include "mpmlogger.h"
+#include "mpmserver.h"
+#include "mpmdatausagewatcher.h"
+
+// ---------------------------------------------------------------------------
+// Default C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CMpmDataUsageWatcher::CMpmDataUsageWatcher( CMPMServer* aServer ) :
+    CActive( EPriorityStandard ), iServer( aServer )
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::CMpmDataUsageWatcher" )
+
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor. Creates a central repository object.
+// ---------------------------------------------------------------------------
+//
+void CMpmDataUsageWatcher::ConstructL()
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::ConstructL" )
+
+    iRepository = CRepository::NewL( KCRUidCmManager );
+    }
+
+// ---------------------------------------------------------------------------
+// Creates a new object by calling the two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CMpmDataUsageWatcher* CMpmDataUsageWatcher::NewL( CMPMServer* aServer )
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::NewL" )
+
+    CMpmDataUsageWatcher* self = new( ELeave ) CMpmDataUsageWatcher( aServer );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CMpmDataUsageWatcher::~CMpmDataUsageWatcher()
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::~CMpmDataUsageWatcher" )
+
+    Cancel();
+    delete iRepository;
+    }
+
+// ---------------------------------------------------------------------------
+// Order notification from changes.
+// ---------------------------------------------------------------------------
+//
+void CMpmDataUsageWatcher::StartL()
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::StartL" )
+
+    // Request notification
+    User::LeaveIfError( iRepository->NotifyRequest( KCurrentCellularDataUsage,
+            iStatus ) );
+    SetActive();
+
+    // Get value from central repository
+    User::LeaveIfError( iRepository->Get( KCurrentCellularDataUsage,
+            iCellularDataUsage ) );
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Event is received when there is a change in central repository key.
+// ---------------------------------------------------------------------------
+//
+void CMpmDataUsageWatcher::RunL()
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::RunL" )
+
+    User::LeaveIfError( iStatus.Int() );
+
+    // Request new notification
+    User::LeaveIfError( iRepository->NotifyRequest( KCurrentCellularDataUsage,
+            iStatus ) );
+    SetActive();
+
+    TInt oldCellularDataUsage = iCellularDataUsage;
+
+    // Get the new value from central repository
+    User::LeaveIfError( iRepository->Get( KCurrentCellularDataUsage,
+            iCellularDataUsage ) );
+    
+    // Stop cellular connections if the setting changes into Disabled
+    if ( oldCellularDataUsage != ECmCellularDataUsageDisabled &&
+         iCellularDataUsage == ECmCellularDataUsageDisabled &&
+         iServer->RoamingWatcher()->RoamingStatus() != EMPMRoamingStatusUnknown )
+        {
+        iServer->StopCellularConns();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Nothing to do over here.
+// ---------------------------------------------------------------------------
+//
+TInt CMpmDataUsageWatcher::RunError( TInt /*aError*/ )
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::RunError" )
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CActive.
+// Cancel outstanding request.
+// ---------------------------------------------------------------------------
+//
+void CMpmDataUsageWatcher::DoCancel()
+    {
+    MPMLOGSTRING( "CMpmDataUsageWatcher::DoCancel" )
+
+    iRepository->NotifyCancel( KCurrentCellularDataUsage );
+    }
+
--- a/bearermanagement/mpm/src/mpmiapselection.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmiapselection.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -84,13 +84,6 @@
     //
     StopDisplayingStartingDlg();
     
-    // Cancel WLAN availability check in case it is active
-    //
-    if ( iSession )
-        {
-    	  iSession->MyServer().Events()->CancelCheckWlanWlanAvailability( this );	
-        }	
-    
     delete iConfirmDlgStarting;
     delete iDialog;
     delete iWlanDialog;
@@ -117,12 +110,6 @@
     
     iChooseIapPref = aChooseIapPref;
 
-    // Update iNewWlansAllowed information.
-    // No need to filter away cellular iaps here based on UI's Allow Cellular Usage
-    // setting, since ConnMon checks the setting and reports only correct IAPs
-    // available for MPM.
-    iSession->IsWlanOnlyL( iNewWlansAllowed );
-
     // Always use stored connection info.
     // If stored information doesn't exist, a normal sequence is used.
     TUint32 snap( 0 );
@@ -148,6 +135,9 @@
     MPMLOGSTRING2( "CMPMIapSelection::ChooseIapL: IapID: %i",
             iChooseIapPref.IapId() )
     
+    // Update WLAN only information and whether new WLAN network usage is allowed.
+    TBool wlanOnly = iSession->IsWlanOnlyL( iNewWlansAllowed );
+    
     // Check if direct IAP connection is tried to make
     if ( iChooseIapPref.IapId() != 0 )
         { 
@@ -156,11 +146,22 @@
 
         // Complete selection with error code if wlan only was set and cellular IAP other 
         // than MMS IAP was tried to access  
-        if ( ( iChooseIapPref.BearerSet() ==
-               TExtendedConnPref::EExtendedConnBearerWLAN ) && 
+        if ( wlanOnly && 
                 ( bearerType == EMPMBearerTypePacketData ) && 
                 ( iSession->IsMMSIap( iChooseIapPref.IapId() ) == EFalse ) ) 
-            {
+            {            
+            ChooseIapComplete( KErrPermissionDenied, NULL );
+            return;
+            }
+        }
+        
+           
+    if  ( iChooseIapPref.ConnSelectionDialog() )
+        {
+        // Complete selection with error code if wlan only was set and bearer set as cellular 
+        if ( wlanOnly && 
+             iChooseIapPref.BearerSet() == TExtendedConnPref::EExtendedConnBearerCellular ) 
+            {            
             ChooseIapComplete( KErrPermissionDenied, NULL );
             return;
             }
@@ -367,8 +368,7 @@
                 {
                 // Check if we are roaming and cellular data usage query has not yet been presented
                 // to the user in this country
-                if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming
-                    && iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true )
+                if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
                     {
                     // Check whether queries are enabled
                     if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) )
@@ -424,16 +424,7 @@
         if ( ( iChooseIapPref.BearerSet() & TExtendedConnPref::EExtendedConnBearerWLAN ) ||
              ( iChooseIapPref.BearerSet() == TExtendedConnPref::EExtendedConnBearerUnknown ) )
             {
-            if ( iNewWlansAllowed && 
-            	   ( iChooseIapPref.BearerSet() == 
-            	     TExtendedConnPref::EExtendedConnBearerWLAN ) )
-                {
-                // User allows only WLAN connections, check WLAN availability.
-                // A note will be shown if no WLANs are available.
-                //
-                iSession->MyServer().Events()->CheckWlanAvailabilityL( this );
-                }
-            else if( iCommsDatAccess->SnapContainsWlanL( snap, iapPath, KMPMNrWlansOne ) )
+            if( iCommsDatAccess->SnapContainsWlanL( snap, iapPath, KMPMNrWlansOne ) )
                 {
                 // Scan wlan networks. After that execution continues 
                 // in CompleteExplicitSnapConnectionL()
@@ -543,34 +534,17 @@
                 {
                 if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
                     {
-                    // Check if cellular data usage query has already been presented to the user in this country
-                    if ( iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true )
-                        {
-                        // International roaming
-                        iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( 
-                                *this, 
-                                connId,
-                                snap, 
-                                validateIapId, 
-                                CMPMConfirmDlg::EConfirmDlgVisitorNetwork,
-                                iChooseIapPref,
-                                iSession->MyServer(),
-                                *iSession,
-                                EExplicitConnection );
-                        }
-                    else
-                        {
-                        // If user has already been queried in this country just complete the IAP selection.
-    
-                        iSession->MyServer().AppendBMConnection( connId, 
-                                snap, 
-                                validateIapId, 
-                                EStarting,
-                                *iSession );
-    
-                        ChooseIapComplete( KErrNone, &iChooseIapPref );
-                        }
-    
+                    // International roaming
+                    iConfirmDlgStarting = CMPMConfirmDlgStarting::NewL( 
+                            *this, 
+                            connId,
+                            snap, 
+                            validateIapId, 
+                            CMPMConfirmDlg::EConfirmDlgVisitorNetwork,
+                            iChooseIapPref,
+                            iSession->MyServer(),
+                            *iSession,
+                            EExplicitConnection );    
                     }
                 else
                     {
@@ -748,7 +722,8 @@
     
     if ( ( aError == KErrNone ) &&
         !( iChooseIapPref.NoteBehaviour() &
-           TExtendedConnPref::ENoteBehaviourConnDisableNotes ) )
+           TExtendedConnPref::ENoteBehaviourConnDisableNotes ) &&
+         ( iSession->IsMMSIap( aPolicyPref->IapId() ) == EFalse ) )
         {
         TBool connectionAlreadyActive =
             iSession->MyServer().CheckIfStarted( aPolicyPref->IapId() );
@@ -874,28 +849,12 @@
         TMpmConnPref userPref;
         iUserSelectionSnapId = iCommsDatAccess->MapNetIdtoSnapAPL( aId );
         userPref.SetSnapId( iUserSelectionSnapId );
+        userPref.SetIapId( 0 );
 
-        
-// Agreed that MPM will be migrated to SNAP TAG ID SNAPS.
-//        if ( iUserSelectionSnapId < 0x1000 )  // TODO: remove when connection dialog return valid SNAP TAG ID.
-//            {
-//            // legacy snaps ok
-//            userPref.SetNetId( aId );
-//            iUserSelectionSnapId = aId;
-//            }
-//        else
-//            {
-//            // 5.2 snaps, MPM uses internally legacy snaps. Convert back. -jl- TODO: use CommsDat mapping in future.
-//            userPref.SetNetId( aId - 3000 );
-//            iUserSelectionSnapId = aId - 3000;
-//            }
-        
         MPMLOGSTRING2(
                 "CMPMIapSelection::HandleUserSelectionL: Snap = %i selected by the User", 
                 iUserSelectionSnapId )
 
-//        userPref.SetNetId( aId );
-        userPref.SetIapId( 0 );
 
         ChooseBestIAPL( userPref, iStoredAvailableIaps );
         iUserSelectionIapId = userPref.IapId();
@@ -951,8 +910,7 @@
             {
             // Check if we are roaming and cellular data usage query has not yet been presented
             // to the user in this country
-            if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming
-                && iSession->MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true )
+            if ( iSession->MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
                 {
                 // Check whether queries are enabled
                 if ( !( iChooseIapPref.NoteBehaviour() & TExtendedConnPref::ENoteBehaviourConnDisableQueries ) )
@@ -1343,62 +1301,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMPMIapSelection::TriggerInformationNote
-// -----------------------------------------------------------------------------
-//
-void CMPMIapSelection::TriggerInformationNoteL()
-    {
-    // ConnectioUiUtilities client side has a nonblocking active object 
-    // implementation
-    //
-    if ( !( iChooseIapPref.NoteBehaviour() &
-           TExtendedConnPref::ENoteBehaviourConnDisableNotes ) )
-        {           	
-        CConnectionUiUtilities* connUiUtils = CConnectionUiUtilities::NewL();        
-                            
-        connUiUtils->NoWLANNetworksAvailableNote();
-                            
-        delete connUiUtils;
-        }            
-    }
-
-// -----------------------------------------------------------------------------
-// CMPMIapSelection::WlanAvailabilityResponse
-// -----------------------------------------------------------------------------
-//
-void CMPMIapSelection::WlanAvailabilityResponse( const TInt  aError, 
-                                                 const TBool aResult )
-    {
-    if ( ( aError == KErrNone && aResult == EFalse )
-          || ( aError == KErrNotSupported ) )
-        {
-        // no WLANs are available and user allows only
-        // WLAN connections
-        TRAPD( err, TriggerInformationNoteL() );
-        
-        if ( err )
-            {
-            MPMLOGSTRING2( "TriggerInformationNoteL leaved %d", err )
-            }
-            
-        ChooseIapComplete( KErrNotFound, NULL );
-        }
-    else
-        {
-        // Some WLANs are available,
-        // or an error has occured while requesting available WLANs.
-        //
-        TRAPD( err, CompleteExplicitSnapConnectionL() );
-        
-        if ( err )
-            {
-            MPMLOGSTRING2( "CompleteExplicitSnapConnectionL leaved %d", err )
-            ChooseIapComplete( KErrCancel, NULL );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // CMPMIapSelection::MpmConnPref
 // -----------------------------------------------------------------------------
 //
--- a/bearermanagement/mpm/src/mpmlauncher.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmlauncher.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -40,18 +40,26 @@
     {
     MPMLOGSTRING("MPMLauncher::LaunchServer")
     const TUidType serverUid(KNullUid,aServerUid2,aServerUid3);
+    RSemaphore semaphore;
+    TInt err( KErrNone );
 
-    // We just create a new server process. Simultaneous
-    // launching of two such processes should be detected when the second one
-    // attempts to create the server object, failing with KErrAlreadyExists.
-    //
+    err = semaphore.CreateGlobal( KMPMLauncherSemaphore, 0 );
+    if ( err != KErrNone )
+        {
+        // Creating semaphore failed, which means some other thread is
+        // creating the server right. Propagate error KErrServerBusy
+        // to inform the client it should try connecting again.
+        return KErrServerBusy;
+        }
+    
     MPMLOGSTRING("Create a new server process")
     RProcess server;
     TInt r=server.Create(aServerFileName,KNullDesC,serverUid);
-
+    
     if ( r != KErrNone )
         {
         MPMLOGSTRING2("Server process creation returned error: %d", r)
+        semaphore.Close();
         return r;
         }
     TRequestStatus stat;
@@ -70,6 +78,7 @@
     // from KErrNone
     r = ( server.ExitType() == EExitPanic ) ? KErrGeneral : stat.Int();
     server.Close();
+    semaphore.Close();
     return r;
     }
 
--- a/bearermanagement/mpm/src/mpmroamingwatcher.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmroamingwatcher.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -58,8 +58,7 @@
       iMobilePhone( aMobilePhone ),
       iRegistrationStatus( RMobilePhone::ERegistrationUnknown ),
       iRoamingStatus( EMPMRoamingStatusUnknown ),
-      iCurrentCountryCode( 0 ),
-      iAskCellularDataUsageAbroad( true )
+      iCurrentCountryCode( 0 )
     {
     MPMLOGSTRING( "CMPMRoamingWatcher::CMPMRoamingWatcher" )
     CActiveScheduler::Add( this );
@@ -188,7 +187,6 @@
         case RMobilePhone::ERegisteredOnHomeNetwork:
             {
             roamingStatus = EMPMHomenetwork;
-            iAskCellularDataUsageAbroad = false;
             break;
             }
             
@@ -221,11 +219,6 @@
                     else
                         {
                         roamingStatus = EMPMInternationalRoaming;
-                        //
-                        if ( iCurrentCountryCode != countryCode )
-                            {
-                            iAskCellularDataUsageAbroad = ETrue;
-                            }                        
                         }
                     iCurrentCountryCode = countryCode; 
                     }                
@@ -256,20 +249,6 @@
     return iRoamingStatus;
     }
 
-
-TBool CMPMRoamingWatcher::AskCellularDataUsageAbroad() const
-    {
-    MPMLOGSTRING2( "CMPMRoamingWatcher::AskCellularDataUsageAbroad iAskCellularDataUsageAbroad: %d", iAskCellularDataUsageAbroad )
-    return iAskCellularDataUsageAbroad;
-    }
-
-void CMPMRoamingWatcher::SetAskCellularDataUsageAbroad(TBool aAskUsage)
-    {
-    iAskCellularDataUsageAbroad = aAskUsage;
-    MPMLOGSTRING2( "CMPMRoamingWatcher::SetAskCellularDataUsageAbroad iAskCellularDataUsageAbroad: %d", iAskCellularDataUsageAbroad )
-    }
-
-
 // ========================== OTHER EXPORTED FUNCTIONS =========================
 // None.
 
--- a/bearermanagement/mpm/src/mpmserver.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmserver.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -25,6 +25,7 @@
 #include <etel3rdparty.h>                // Voice call notification
 #include <mmtsy_names.h>                 // KMmTsyModuleName
 #include <centralrepository.h>
+#include <es_sock_partner.h>
 
 #include "mpmserver.h"
 #include "mpmserversession.h"
@@ -41,6 +42,8 @@
 #include "mpmdialog.h"
 #include "mpmprivatecrkeys.h"
 #include "mpmcsidwatcher.h"
+#include "mpmdatausagewatcher.h"
+#include "mpmpropertydef.h"
 
 // ============================= LOCAL FUNCTIONS ===============================
 
@@ -170,6 +173,20 @@
     iMpmCsIdWatcher = CMpmCsIdWatcher::NewL();
     iMpmCsIdWatcher->StartL();
 
+    // Create another central repository watcher and start it
+    // TODO: Trapped, because currently it may fatally leave in HW.
+    // (Possibly because of the capability updates of data usage watcher's CR-keys.)
+    TRAPD( duwErr, iMpmDataUsageWatcher = CMpmDataUsageWatcher::NewL( this ) );
+    if (duwErr == KErrNone)
+        {
+        iMpmDataUsageWatcher->StartL();
+        }
+    else
+        {
+        iMpmDataUsageWatcher = NULL;
+        MPMLOGSTRING( "CMPMServer::ConstructL: CMpmDataUsageWatcher::NewL() failed!" )
+        }
+
     // Define P&S keys (snap & iap) for the user connection
     TInt ret = RProperty::Define( KMPMUserConnectionCategory,
                                   KMPMPSKeyUserConnectionSnap,
@@ -326,6 +343,8 @@
     
     delete iMpmCsIdWatcher;    
     
+    delete iMpmDataUsageWatcher;    
+    
     iDedicatedClients.Close();
 
     delete iCommsDatAccess;    
@@ -955,7 +974,8 @@
 // CMPMServer::NotifyBMPrefIapL
 // -----------------------------------------------------------------------------
 //
-void CMPMServer::NotifyBMPrefIapL( const TConnMonIapInfo& aIapInfo )
+void CMPMServer::NotifyBMPrefIapL( const TConnMonIapInfo& aIapInfo, 
+                                   const TPrefIAPNotifCaller aCaller )
     {
     MPMLOGSTRING2( "CMPMServer::NotifyBMPrefIapL - IAPs count: %d", 
         aIapInfo.iCount)
@@ -984,7 +1004,7 @@
     for ( TInt i = 0; i < iSessions.Count(); i++ )
         {
         iapInfo = iSessions[i]->GetAvailableIAPs( );
-        iSessions[i]->PrefIAPNotificationL( iapInfo, EConnMon );
+        iSessions[i]->PrefIAPNotificationL( iapInfo, aCaller );
         }
 
     // If a session is displaying connection selection dialog 
@@ -1134,57 +1154,6 @@
         }
     }
 
-
-// -----------------------------------------------------------------------------
-// CMPMServer::HandleServerUnblackListIap
-// -----------------------------------------------------------------------------
-//
-TInt CMPMServer::HandleServerUnblackListIap( 
-    const TConnectionId aConnId,
-    TBlacklistCategory  aCategory )
-    {
-    MPMLOGSTRING3( "CMPMServer::HandleServerUnblackListIap -\
- aConnId = 0x%x, aCategory = %i", aConnId, aCategory )
-
-    TInt i;
-    TBool found = EFalse;
-
-    found = FindBlacklistedConnIndex( aConnId, i );
-    if ( found )
-        {
-        // found blacklisted Connection Id
-        TMPMBlackListConnId connIdInfo = iBlackListIdList[i];
-        iBlackListIdList.Remove( i ); // remove from the list 
-
-        found = EFalse;
-        for (TInt j = 0; j < connIdInfo.Count(); j++)
-            {
-            if ( connIdInfo.Category( j ) == aCategory ) 
-                {
-                // found and remove blacklisted iap
-                connIdInfo.Remove( j ); 
-                if ( connIdInfo.Count() == 0 )
-                    {
-                    return KErrNone;
-                    }
-
-                // reinsert connIdInfo at the beginning to reflect activeness
-                iBlackListIdList.Insert( connIdInfo, 0 ); 
-                return KErrNone;
-                }
-            }
-        // nothing found and reinsert at the beginning 
-        // connIdInfo to reflect activeness
-        iBlackListIdList.Insert( connIdInfo, 0 ); 
-        return KErrNotFound;
-        }
-    else
-        {
-        return KErrNotFound;
-        }
-    }
-
-
 // -----------------------------------------------------------------------------
 // CMPMServer::HandleServerUnblackListIap
 // -----------------------------------------------------------------------------
@@ -1784,7 +1753,7 @@
     RAvailableIAPList iapList;
     CleanupClosePushL( iapList );
 
-    for ( TInt index = 0; index < aIapInfo.iCount; index++ )
+    for ( TUint index = 0; index < aIapInfo.iCount; index++ )
         {
         if ( CommsDatAccess()->CheckWlanL( aIapInfo.iIap[index].iIapId ) != ENotWlanIap )
             {
@@ -1847,7 +1816,7 @@
     RArray<TUint32> packetDataIapIds;
     CleanupClosePushL( packetDataIapIds );
 
-    for ( TInt index = 0; index < aIapInfo.iCount; index++ )
+    for ( TUint index = 0; index < aIapInfo.iCount; index++ )
         {
         if ( CommsDatAccess()->GetBearerTypeL( aIapInfo.iIap[index].iIapId ) ==
             EMPMBearerTypePacketData )
@@ -1876,7 +1845,7 @@
             {
             // Check if used WLAN is still available
             TBool currentWlanIapAvailable = EFalse;
-            for ( TInt iapIndex = 0; iapIndex < aIapInfo.iCount; iapIndex++ )
+            for ( TUint iapIndex = 0; iapIndex < aIapInfo.iCount; iapIndex++ )
                 {
                 if ( aIapInfo.iIap[iapIndex].iIapId ==
                     iActiveBMConns[index].iConnInfo.iIapId )
@@ -2005,7 +1974,7 @@
     
                         MPMLOGSTRING2( "CMPMServer::NotifyDisconnectL: \
 Disconnected Connection Id = 0x%x", iSessions[sIndex]->ConnectionId() )
-                        iSessions[sIndex]->ClientErrorNotificationL( KErrDisconnected );
+                        iSessions[sIndex]->ClientErrorNotificationL( KErrForceDisconnected );
                         }
                     }
                 }
@@ -2063,6 +2032,49 @@
     return serverSession;
     }
 
+// ---------------------------------------------------------------------------
+// CMPMServer::StopCellularConns
+// Stop all cellular connections except MMS
+// ---------------------------------------------------------------------------
+//
+void CMPMServer::StopCellularConns()
+    {
+    MPMLOGSTRING( "CMPMServer::StopCellularConns" )
+
+    TUint32 iapId;
+	TMPMBearerType bearerType = EMPMBearerTypeNone;
+
+	// No cleanup stack used cause this function doesn't leave.
+    RArray<TUint32> stoppedIaps;
+
+    // Check through active connections
+    for (TInt i = 0; i < iActiveBMConns.Count(); i++)
+        {
+        iapId = iActiveBMConns[i].iConnInfo.iIapId;
+
+        // Don't stop the same IAP twice.
+        if (stoppedIaps.Find( iapId ) == KErrNotFound)
+            {
+            TRAPD( err, bearerType = CommsDatAccess()->GetBearerTypeL( iapId ) );
+            if (err == KErrNone &&
+                    iapId != 0 &&
+                    bearerType == EMPMBearerTypePacketData)
+                {
+                TInt mmsIap( 0 );
+                err = RProperty::Get( KMPMCathegory, KMPMPropertyKeyMMS, mmsIap );
+                // Check that it's not MMS IAP.
+                if (!(err == KErrNone && iapId == mmsIap))
+                    {
+                    // Stop the conn / IAP.
+                    StopConnections( iapId );
+                    stoppedIaps.Append( iapId );
+                    }
+                }
+            }
+        }
+    stoppedIaps.Close();
+    }
+
 // -----------------------------------------------------------------------------
 // TMPMBlackListConnId::Append
 // -----------------------------------------------------------------------------
--- a/bearermanagement/mpm/src/mpmserversession.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/mpmserversession.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -138,6 +138,9 @@
 User connection deactivated" )
         }   
 
+    // Clean up the blacklist table 
+    iMyServer.HandleServerUnblackListIap( iConnId, 0 );
+
     // Make sure the connection is removed from server's information array.
     iMyServer.RemoveBMConnection( iConnId, *this );
     }
@@ -445,6 +448,9 @@
     // 
     iAppUid = aMessage.Int2();
 
+    MPMLOGSTRING2( "CMPMServerSession::HandleServerChooseIapL: \
+Client UID = 0x%x", iAppUid )
+
     if ( !iIapSelection )
         {
         iIapSelection = CMPMIapSelection::NewL( iMyServer.CommsDatAccess(),
@@ -703,11 +709,6 @@
 
     iMyServer.AppendBMIAPConnectionL( startedIap, startedId, *this );
 
-    // Unblacklist all IAPs related to the connection error 
-    // when connection has started.
-    // 
-    iMyServer.HandleServerUnblackListIap( startedId, ETemporary );
-
     // Complete the message as soon as possible to avoid latency in BM
     // 
     aMessage.Complete( KErrNone );
@@ -933,22 +934,13 @@
                 {
                 if ( MyServer().RoamingWatcher()->RoamingStatus() == EMPMInternationalRoaming )
                     {
-                    //Check if cellular data usage query has already been presented to the user in this country
-                    if ( MyServer().RoamingWatcher()->AskCellularDataUsageAbroad() == true )
-                        {
-                        //International roaming
-                        iConfirmDlgRoaming = CMPMConfirmDlgRoaming::NewL( 
-                                *this, 
-                                snapId, 
-                                iMigrateIap, 
-                                CMPMConfirmDlg::EConfirmDlgVisitorNetwork, 
-                                reconnect );
-                        }
-                    else
-                        {
-                        //Handle like user would have answered "Connect this time" to dialog
-                        RoamingConfirmationCompletedL( KErrNone, EMsgQueryThisTime, reconnect );
-                        }
+                    //International roaming
+                    iConfirmDlgRoaming = CMPMConfirmDlgRoaming::NewL( 
+                            *this, 
+                            snapId, 
+                            iMigrateIap, 
+                            CMPMConfirmDlg::EConfirmDlgVisitorNetwork, 
+                            reconnect );
                     }
                 else
                     {
@@ -1105,13 +1097,6 @@
                     TRAP_IGNORE(MyServer().CommsDatAccess()->WriteGenConnSettingsL( genConnSettings )); 
                     }
                 } 
-            else
-                {
-                //In foreign country connect automatically is not stored in commsdat
-                //even user selected so. We just do not ask confirmation for the cellular
-                //connection again in this country:
-                MyServer().RoamingWatcher()->SetAskCellularDataUsageAbroad( false );            
-                }
             }
         
         //user selected connect this time
@@ -2671,8 +2656,8 @@
         // Required notifications must go through whenever MPM decides
         // to initiate them.
         //
-        if( ( iStoredIapInfo.HoldPrefIapNotif() && aCaller == EConnMon )  ||
-                ( state == ERoaming && aCaller == EConnMon ) )
+        if( ( aCaller == EConnMon || aCaller == EConnMonEvent ) && 
+                ( iStoredIapInfo.HoldPrefIapNotif() || state == ERoaming) )
             {
             MPMLOGSTRING( "CMPMServerSession::PrefIAPNotificationL - \
 Mobility ongoing, notification will be handled later" )
@@ -2714,7 +2699,8 @@
         tempMpmConnPref.SetSnapId( snap );
         IapSelectionL()->ChooseBestIAPL( tempMpmConnPref, availableIAPList );
         validateIapId = tempMpmConnPref.IapId();
-        if ( ( validateIapId == 0 ) && ( aCaller == EConnMon ) )
+        if ( ( validateIapId == 0 ) 
+                && ( aCaller == EConnMon || aCaller == EConnMonEvent ) )
             {
             // Since Connection Monitor is the only component which 
             // is unaware of Connection Id and SNAP, it can't send 
@@ -2724,8 +2710,19 @@
             // All the other components take responsibility of 
             // sending the error notification. 
             // 
-            TRAP_IGNORE( ErrorNotificationL( KErrNotFound,
-                                             EMPMMobilityErrorNotification ) )
+            // Do not send the error if this call came from ConnMon Event.
+            // This will prevent unnecessary mobility errors.
+            // For example if there is two WLAN networks in Internet destination
+            // and we get weak indication for the one to which we are connected.
+            // Then connmon signals us with IAPAvailabilityChange which results
+            // to no available IAPs. We should not report error in that case.
+            if ( aCaller == EConnMon )
+                {
+                TRAP_IGNORE( ErrorNotificationL( KErrNotFound,
+                                             EMPMMobilityErrorNotification ) );
+                }
+            CleanupStack::PopAndDestroy( &availableIAPList );
+            return;                                                                   
             }
 
         TUint32 retNetId = 0;
--- a/bearermanagement/mpm/src/mpmwlanavailability.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
-* 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: WLAN bearer availability check
-*
-*/
-
-/**
-@file mpmwlanavailability.cpp
-WLAN bearer availability check
-*/
-
-// INCLUDE FILES
-#include "mpmwlanavailability.h"
-#include "mpmlogger.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::NewL
-// -----------------------------------------------------------------------------
-//
-CWlanAvailability* CWlanAvailability::NewL( CMPMConnMonEvents*  aConnMonEvents,
-                                            RConnectionMonitor& aConnMon )
-    {
-    CWlanAvailability* self = new ( ELeave ) CWlanAvailability( aConnMonEvents,
-                                                                aConnMon );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::CWlanAvailability
-// -----------------------------------------------------------------------------
-//
-CWlanAvailability::CWlanAvailability( CMPMConnMonEvents*  aConnMonEvents,
-                                      RConnectionMonitor& aConnMon )
-    : CActive( CActive::EPriorityStandard ),
-      iConnMonEvents( aConnMonEvents ),
-      iConnMon( aConnMon )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CWlanAvailability::ConstructL()
-    {
-    iObserver.Reset();
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::Start
-// -----------------------------------------------------------------------------
-//
-void CWlanAvailability::Start( MWlanAvailability* aObserver )
-    {
-    MPMLOGSTRING( "CWlanAvailability::Start" )
-
-    iObserver.Append( aObserver );
-
-    if ( !IsActive() )
-        {
-        iConnMon.GetBoolAttribute( EBearerIdWLAN, 
-                                   0, 
-                                   KBearerAvailability,
-                                   iResult,
-                                   iStatus );
-        SetActive();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::CancelObserver
-// -----------------------------------------------------------------------------
-//
-void CWlanAvailability::CancelObserver( MWlanAvailability* aObserver )
-    {
-    MPMLOGSTRING( "CWlanAvailability::CancelObserver" )
-    
-    for ( TInt i=0; i < iObserver.Count(); i++ )
-        {
-        if ( iObserver[ i ] == aObserver )
-            {
-            iObserver.Remove( i );        
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::~CWlanAvailability
-// -----------------------------------------------------------------------------
-//
-CWlanAvailability::~CWlanAvailability()
-    {
-    MPMLOGSTRING( "CWlanAvailability::~CWlanAvailability" )
-
-    Cancel();
-
-    iObserver.Close();
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::RunL
-// -----------------------------------------------------------------------------
-//
-void CWlanAvailability::RunL()
-    {
-    if ( iStatus.Int() != KErrNone )
-        {
-        MPMLOGSTRING2( "CWlanAvailability::RunL status %d", iStatus.Int() )
-        }
-
-    for ( TInt i=0; i < iObserver.Count(); i++ )
-        {
-        iObserver[ i ]->WlanAvailabilityResponse( iStatus.Int(), iResult );
-        }
-
-    iObserver.Reset();
-
-    // we are done
-    iConnMonEvents->SetWlanAvailabilityPtrNull();
-    delete this;
-    }
-
-// -----------------------------------------------------------------------------
-// CWlanAvailability::DoCancel
-// -----------------------------------------------------------------------------
-//
-void CWlanAvailability::DoCancel()
-    {
-    MPMLOGSTRING( "CWlanAvailability::DoCancel" )
-
-    iConnMon.CancelAsyncRequest( KBearerAvailability );
-
-    for ( TInt i=0; i < iObserver.Count(); i++ )
-        {
-        iObserver[ i ]->WlanAvailabilityResponse( KErrCancel, iResult );
-        }
-    }
-
-// End of file
--- a/bearermanagement/mpm/src/rmpm.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/bearermanagement/mpm/src/rmpm.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -277,7 +277,7 @@
                                   TRequestStatus&      /*aStatus*/ )
     {
     __ASSERT_ALWAYS( EFalse, Panic( KErrNotSupported ) );
-    //-jl- TODO remove this function from the API.
+    // TODO remove this function from the API.
     }
 
 // -----------------------------------------------------------------------------
@@ -324,7 +324,7 @@
                                           const TConnectionId  /*aConnId*/ )
     {
     __ASSERT_ALWAYS( EFalse, Panic( KErrNotSupported ) );
-    //-jl- TODO remove this function from the API.
+    // TODO remove this function from the API.
     return NULL;
     }
 
--- a/cmmanager/cmmgr/Framework/Inc/cmdlg.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Inc/cmdlg.h	Fri Apr 16 15:21:37 2010 +0300
@@ -187,6 +187,11 @@
         
         virtual void ConstructCMArrayL( RArray<TUint32>& aCmIds );
 
+        /**
+         * Remove hidden Connection Methods from the Array
+         */
+        virtual void ClearHiddenCMsFromArrayL( RArray<TUint32>& aCmIds );
+                
     public:
         /**
          * From base class MCmdExec
@@ -214,11 +219,7 @@
          * Reorder connection methods according to underlying connection in case of vpn
          */
         void ReOrderCMsL();
-        
-        /**
-         * Remove hidden Connection Methods from the Array
-         */
-        void ClearHiddenCMsFromArrayL( RArray<TUint32>& aCmIds );
+               
         
         /**
          * Get a proper index in list for priority
--- a/cmmanager/cmmgr/Framework/Inc/uncatdlg.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Inc/uncatdlg.h	Fri Apr 16 15:21:37 2010 +0300
@@ -69,6 +69,11 @@
         */
         void ConstructCMArrayL( RArray<TUint32>& aCmIds );
         
+        /**
+        * Remove hidden Connection Methods from the Array
+        */
+        void ClearHiddenCMsFromArrayL( RArray<TUint32>& aCmIds );
+        
     public: // From MCmCommsDatWatcher
         
         /**
@@ -122,4 +127,4 @@
 
 #endif
 
-// End of File
\ No newline at end of file
+// End of File
--- a/cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Src/cmconnselectrbpage.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -381,8 +381,8 @@
                     		Cba()->DrawNow();
                     		CleanupStack::PopAndDestroy( text );
                     		}
+                		CAknRadioButtonSettingPage::SelectCurrentItemL();
                 		}
-		            CAknRadioButtonSettingPage::HandleListBoxEventL(aListBox, aEventType);
                 	}
                 break;
                 
--- a/cmmanager/cmmgr/Framework/Src/uncatdlg.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Framework/Src/uncatdlg.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -226,6 +226,7 @@
                     {
                     TCmCommonUi::ShowNoteL( R_QTN_NETW_CONSET_INFO_UNCAT_EMPTY,
                                             TCmCommonUi::ECmInfoNote );
+                    iCmManager->WatcherUnRegister();       
                     TryExitL( KDialogUserBack );                                
                     }
                 }
@@ -295,6 +296,7 @@
                             {
                             TCmCommonUi::ShowNoteL( R_QTN_NETW_CONSET_INFO_UNCAT_EMPTY,
                                                     TCmCommonUi::ECmInfoNote );
+                            iCmManager->WatcherUnRegister();       
                             TryExitL( KDialogUserBack );                                
                             }
                         }
@@ -389,6 +391,36 @@
     }
 
 // --------------------------------------------------------------------------
+// CCmDlg::ClearHiddenCMsFromArrayL
+// --------------------------------------------------------------------------
+//
+void CUncatDlg::ClearHiddenCMsFromArrayL( RArray<TUint32>& aCmIds )
+    {
+    TBool hidden( EFalse );
+    TInt err( KErrNone );
+    for ( TInt index = 0; index < aCmIds.Count(); index++ )
+        {
+        TUint recId = aCmIds[index];
+        TRAP( err, hidden = iCmManager->GetConnectionMethodInfoBoolL( recId, ECmHidden ) );
+        if ( err || hidden )
+            {
+            aCmIds.Remove( index );
+            index--;
+            // Remove the same item from iCmUncatItems array
+            for( TInt i = 0; i < iCmUncatItems.Count(); i++ )
+                {
+                if( iCmUncatItems[i].iCmId == recId )
+                    {
+                    iCmUncatItems.Remove( i );
+                    break;
+                    }
+                }
+            }
+        }
+    }
+
+
+// --------------------------------------------------------------------------
 // CUncatDlg::CleanupUncatArray
 // --------------------------------------------------------------------------
 //
--- a/cmmanager/cmmgr/Framework/SrcData/cmmanager.rss	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Framework/SrcData/cmmanager.rss	Fri Apr 16 15:21:37 2010 +0300
@@ -565,6 +565,7 @@
             {
             type = KDestListboxType;
             id = KDestListboxId;
+            itemflags = EEikDlgItemTakesEnterKey;
             control= LISTBOX { flags = EAknListBoxSelectionList;};
             }
         };
@@ -715,6 +716,7 @@
             {
             type = KCmListboxType;
             id = KCmListboxId;
+            itemflags = EEikDlgItemTakesEnterKey;
             control= LISTBOX { flags = EAknListBoxSelectionList;};
             }
         };
Binary file cmmanager/cmmgr/Framework/conf/cmmanager_10207376.crml has changed
--- a/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Plugins/cmpluginvpn/src/cmpluginvpn.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -31,7 +31,7 @@
 #include <cmpluginwlandef.h>
 // #include <vpnapi.h>
 #include <centralrepository.h>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
 #include <featmgr.h>
 #include <ConeResLoader.h>
 #include <bautils.h>
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpluginwlan.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -1922,6 +1922,12 @@
             // Pre-shared - go to step 7
             // EAP        - go to step 8
             case EWlanConnectionExtentedSecurityMode802d1x:
+                TCmCommonUi::ShowNoteL( *( StringLoader::LoadLC( 
+                    R_QTN_NETW_CONSET_INFO_EAP_SETTINGS_DEFAULT ) ),
+                    TCmCommonUi::ECmInfoNote );
+                CleanupStack::PopAndDestroy();
+                break;
+                
             case EWlanConnectionExtentedSecurityModeWpa:
             case EWlanConnectionExtentedSecurityModeWpaPsk:
             case EWlanConnectionExtentedSecurityModeWpa2:
--- a/cmmanager/cmmgr/database/src/cmmanagertableformats.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/cmmgr/database/src/cmmanagertableformats.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -133,7 +133,10 @@
                         | KCDTIdCellularDataUsageHome ),
       iCellularDataUsageVisitor( ( aElementId & KCDMaskShowRecordType ) 
                         | KCDTIdCellularDataUsageVisitor )
-    {};  	
+    {
+    iCellularDataUsageHome.SetAttributes(ECDProtectedWrite);
+    iCellularDataUsageVisitor.SetAttributes(ECDProtectedWrite);
+    };  	
 
 EXPORT_C TMDBElementId 
     CCDDefConnRecord::TableIdL( CMDBSession& aSession )
--- a/cmmanager/gsconnsettingsplugin/data/gsconnsettingspluginrsc.rss	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/data/gsconnsettingspluginrsc.rss	Fri Apr 16 15:21:37 2010 +0300
@@ -323,22 +323,6 @@
 
 //----------------------------------------------------
 //    
-// r_usage_of_new_wlan_setting_page
-// Resource for "Join new WLAN networks" setting page.
-//
-//----------------------------------------------------
-//
-RESOURCE AVKON_SETTING_PAGE r_usage_of_wlan_setting_page
-    {
-    number = EAknSettingPageNoOrdinalDisplayed; 
-    label = qtn_occ_sett_usage_of_wlan;
-    softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
-    type = EAknSetListBox;
-    editor_resource_id = r_setting_listbox;
-    }
-
-//----------------------------------------------------
-//    
 // r_usage_of_new_wlan_setting_page_lbx
 // Resource for "Join new WLAN networks" listbox items
 //
@@ -520,20 +504,4 @@
 //
 RESOURCE TBUF r_gs_conn_settings_rsk_label_exit { buf = text_softkey_exit; }
 
-
-RESOURCE ARRAY r_usage_of_wlan_info_popup_texts
-    {
-    items =
-        {
-        LBUF
-            {
-            txt = qtn_occ_info_popup_wlan_usage_known;
-            },
-        LBUF
-            {
-            txt = qtn_occ_info_popup_wlan_usage_manual;
-            }
-        };
-    }
-
 // End of file
--- a/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,8 +20,8 @@
 #define GSCONNSETTINGSPLUGIN_H
 
 // Includes
-#include <GSPluginLoader.h>
-#include <GSBaseView.h>
+#include <gspluginloader.h>
+#include <gsbaseview.h>
 #include "gsconnsettingsmskobserver.h"
 
 #include <aknview.h>
--- a/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.hrh	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugin.hrh	Fri Apr 16 15:21:37 2010 +0300
@@ -50,7 +50,8 @@
 enum {
     EDataUsageAbroadAutomatic = 0,
     EDataUsageAbroadConfirm = 1,
-    EDataUsageAbroadWlanOnly = 2
+    EDataUsageAbroadWlanOnly = 2,
+    EDataUsageAbroadDisabled = 3
     };
 
 //Indexes for data usage in home NW values
@@ -59,7 +60,8 @@
 enum {
     EDataUsageHomeNwAutomatic = 0,
     EDataUsageHomeNwConfirm = 1,
-    EDataUsageHomeNwWlanOnly = 2
+    EDataUsageHomeNwWlanOnly = 2,
+    EDataUsageHomeNwDisabled = 3
     };
 
 #endif //  GSCONNECTIVITYSETTINGSPLUGIN_HRH
--- a/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugincontainer.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/inc/gsconnsettingsplugincontainer.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include "gsconnsettingspluginmodel.h"
-#include <GSBaseContainer.h>
+#include <gsbasecontainer.h>
 
 
 // CONSTANTS
--- a/cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugin.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugin.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -28,11 +28,11 @@
 #include <gsconnsettingsplugin.mbg>
 
 // Includes from GS framework:
-#include <GSCommon.hrh>
-#include <GSFWViewUIDs.h>
-#include <GSPrivatePluginProviderIds.h>
-#include <GSTabHelper.h>
-#include <GSMainView.h>
+#include <gscommon.hrh>
+#include <gsfwviewuids.h>
+#include <gsprivatepluginproviderids.h>
+#include <gstabhelper.h>
+#include <gsmainview.h>
 
 #include <hlplch.h> // For HlpLauncher
 #include <featmgr.h>
@@ -115,7 +115,7 @@
     FeatureManager::InitializeLibL();
     iIsWlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
     // Unload FeatureManager
-    FeatureManager::UnInitializeLib();  
+    FeatureManager::UnInitializeLib();
     
     OpenLocalizedResourceFileL( KGSConnSettingsPluginResourceFileName,
                                 iResourceLoader ); 
@@ -384,7 +384,7 @@
 void CGSConnSettingsPlugin::GetHelpContext( TCoeHelpContext& aContext )
     {
     aContext.iMajor = KUidGS;
-    aContext.iContext = KHLP_OCC_CONN_SETTINGS;
+    aContext.iContext = KCP_HLP_ADMINISTRATIVE_SETTINGS;
     }
 
 // ---------------------------------------------------------------------------
@@ -456,35 +456,12 @@
 //
 void CGSConnSettingsPlugin::ShowUsageOfWlanSettingPageL()
     {
-
-    CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL(
-            R_USAGE_OF_WLAN_SETTING_PAGE_LBX );
-    CleanupStack::PushL( items );
-
-    TInt currentItem = iModel->UsageOfWlan();
-    TInt oldItem = currentItem;
-    
-    CGSConnSettingsSelectionDlg* dlg = CGSConnSettingsSelectionDlg::NewL(
-                                                R_USAGE_OF_WLAN_SETTING_PAGE,
-                                                currentItem,
-                                                items,
-                                                R_USAGE_OF_WLAN_INFO_POPUP_TEXTS );
-
-    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
-        {
-
-        if( currentItem != oldItem )
-            {
-            iModel->SetUsageOfWlan( currentItem );
-            UpdateListBoxL( EGSSettIdUsageOfWlan );
-            //Save current settings when the setting is changed
-            //If function leaves it is trapped and ignored as there is nothing that we can do about it
-            TRAP_IGNORE(iModel->SaveSettingsL());
-            }
-        }
-
-    CleanupStack::PopAndDestroy( items );
-
+    TBool currentItem = (TBool)iModel->UsageOfWlan();
+    iModel->SetUsageOfWlan( !currentItem );
+    UpdateListBoxL( EGSSettIdUsageOfWlan );
+    //Save current settings when the setting is changed
+    //If function leaves it is trapped and ignored as there is nothing that we can do about it
+    TRAP_IGNORE(iModel->SaveSettingsL());
     }
 
 // ---------------------------------------------------------------------------
@@ -511,6 +488,14 @@
     CleanupStack::PushL( items );
 
     TInt currentItem = iModel->DataUsageAbroad();
+    
+    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
+    // and the actual index number should be 2 in this case
+    if( !iIsWlanSupported && currentItem == EDataUsageAbroadDisabled )
+        {
+        currentItem --;
+        }
+    
     TInt oldItem = currentItem;
 
     CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage(
@@ -555,6 +540,14 @@
     CleanupStack::PushL( items );
 
     TInt currentItem = iModel->DataUsageInHomeNw();
+    
+    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
+    // and the actual index number should be 2 in this case
+    if( !iIsWlanSupported && currentItem == EDataUsageAbroadDisabled )
+        {
+        currentItem --;
+        }
+    
     TInt oldItem = currentItem;
 
     CAknSettingPage* dlg = new( ELeave ) CAknRadioButtonSettingPage(
--- a/cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugincontainer.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/src/gsconnsettingsplugincontainer.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -26,8 +26,8 @@
 
 #include <aknlists.h>
 #include <csxhelp/cp.hlp.hrh>
-#include <GSFWViewUIDs.h>     // for KUidGS
-#include <GSListbox.h>
+#include <gsfwviewuids.h>     // for KUidGS
+#include <gslistbox.h>
 
 
 // EXTERNAL DATA STRUCTURES
@@ -143,7 +143,9 @@
         MGSConnSettingsMskObserver& aMskObserver )
         : iMskObserver( aMskObserver )
     {
+    FeatureManager::InitializeLibL();
     iIsWlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
+    FeatureManager::UnInitializeLib();
     }
 
 void CGSConnSettingsPluginContainer::SetPluginArray ( 
@@ -311,6 +313,13 @@
 {
     TInt currValue = iModel->DataUsageAbroad();
     
+    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
+    // and the actual index number should be 2 in this case
+    if( !iIsWlanSupported && currValue == EDataUsageAbroadDisabled )
+        {
+        currValue --;
+        }
+    
     AppendListItemL( Index( EGSSettIdDataUsageAbroad ),
         iListItems->operator[]( Index( EGSSettIdDataUsageAbroad ) ),
         ( *iDataUsageAbroadItems )[currValue] );
@@ -326,6 +335,13 @@
 {
     TInt currValue = iModel->DataUsageInHomeNw();
     
+    // We may have to do in this way because EDataUsageAbroadDisabled is equal to 3
+    // and the actual index number should be 2 in this case
+    if( !iIsWlanSupported && currValue == EDataUsageAbroadDisabled )
+        {
+        currValue --;
+        }
+    
     AppendListItemL( Index( EGSSettIdDataUsageHomeNw ),
         iListItems->operator[]( Index( EGSSettIdDataUsageHomeNw ) ),
         ( *iDataUsageHomeNwItems )[currValue] );
@@ -449,7 +465,7 @@
 void CGSConnSettingsPluginContainer::GetHelpContext( TCoeHelpContext& aContext ) const
     {
     aContext.iMajor = KUidGS;
-    aContext.iContext = KHLP_OCC_CONN_SETTINGS;
+//    aContext.iContext = KCP_HLP_DISPLAY;
     }
 
 // ---------------------------------------------------------------------------
--- a/cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/cmmanager/gsconnsettingsplugin/traces/OstTraceDefinitions.h	Fri Apr 16 15:21:37 2010 +0300
@@ -1,3 +1,20 @@
+/*
+* 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: 
+*
+*/
+
 #ifndef __OSTTRACEDEFINITIONS_H__
 #define __OSTTRACEDEFINITIONS_H__
 #include <opensystemtrace.h>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/cellularindicatorplugin.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,44 @@
+#
+# 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:
+#
+
+TEMPLATE = lib
+CONFIG += plugin
+CONFIG += hb
+
+# Directories
+DEPENDPATH += .
+INCLUDEPATH += .\inc
+
+# Sources
+HEADERS += inc\cellularindicatorplugin.h \
+           traces\OstTraceDefinitions.h
+
+SOURCES += src\cellularindicatorplugin.cpp
+
+symbian*: {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002C3AB
+    SYMBIAN_PLATFORMS = WINSCW ARMV5
+    BLD_INF_RULES.prj_exports += "rom/cellularindicatorplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cellularindicatorplugin.iby)"
+    BLD_INF_RULES.prj_exports += "rom/cellularindicatorplugin_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(cellularindicatorplugin_resources.iby)"
+    pluginstub.sources = cellularindicatorplugin.dll
+    pluginstub.path = /resource/plugins/indicators
+    DEPLOYMENT += pluginstub
+}
+
+TRANSLATIONS = cellularindicatorplugin.ts
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/inc/cellularindicatorplugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,93 @@
+/*
+ * 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:
+ * 
+ */
+
+#ifndef CELLULARINDICATORPLUGIN_H
+#define CELLULARINDICATORPLUGIN_H
+
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+#include <QtCore/QProcess>
+#include <QtCore/QVariant>
+
+
+/**
+ * This class describes cellular indicator plug-in
+ */
+class CellularIndicatorPlugin : public HbIndicatorInterface,
+    public HbIndicatorPluginInterface
+{
+
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+
+    CellularIndicatorPlugin();
+    ~CellularIndicatorPlugin();
+
+public:
+
+    //from HbIndicatorPluginInterface
+    
+    // Return indicator type of indicator
+    QStringList indicatorTypes() const;
+    
+    // Access is allowed allways
+    bool accessAllowed(const QString &indicatorType,
+                       const HbSecurityInfo *securityInfo) const;
+    
+    // Create indicator. Currently installs translation.
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+    
+    // Return error if any
+    int error() const;
+
+public:
+
+    //from HbIndicatorInterface
+    
+    // Client requests are directed to here
+    bool handleClientRequest (RequestType type, const QVariant &parameter);
+    
+    // This called when item is selected in indicator menu
+    bool handleInteraction(InteractionType type);
+    
+    // Used to get indicator data (icon or text)
+    QVariant indicatorData(int role) const;
+
+private slots:
+    // handler for error codes
+    void processError(QProcess::ProcessError err);
+
+private: // data
+
+    // Disable copy constructor
+    Q_DISABLE_COPY(CellularIndicatorPlugin)
+    // Indicator type
+    QStringList mIndicatorTypes;
+    // Error stored to member variable
+    int mError;
+    // Used to store the connection info
+    QVariant mParameter;
+    // Process to start external programs
+    QProcess process;
+};
+
+
+
+
+#endif // CELLULARINDICATORPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/rom/cellularindicatorplugin.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,19 @@
+/*
+ * 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:
+ * 
+ */
+
+file=ABI_DIR\BUILD_DIR\cellularindicatorplugin.dll SHARED_LIB_DIR\cellularindicatorplugin.dll
+data=\epoc32\data\z\resource\plugins\indicators\cellularindicatorplugin.qtplugin RESOURCE_FILES_DIR\plugins\indicators\cellularindicatorplugin.qtplugin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/rom/cellularindicatorplugin_resources.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -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 "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 CELLULARINDICATORPLUGIN_RESOURCES_IBY
+#define CELLULARINDICATORPLUGIN_RESOURCES_IBY
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_for_iby.hrh> 
+
+data=DATAZ_/QT_TRANSLATIONS_DIR/cellularindicatorplugin.qm QT_TRANSLATIONS_DIR/cellularindicatorplugin.qm
+
+#endif // CELLULARINDICATORPLUGIN_RESOURCES_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,257 @@
+/*
+ * 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:
+ * 
+ */
+
+#include <QtPlugin>
+#include <QTranslator>
+#include <QLocale>
+#include <QList>
+#include <HbLabel>
+#include <HbDialog>
+#include <HbDocumentLoader>
+#include <HbPushButton>
+#include <HbView>
+#include <HbApplication>
+#include "cellularindicatorplugin.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cellularindicatorpluginTraces.h"
+#endif
+
+Q_EXPORT_PLUGIN(CellularIndicatorPlugin)
+
+const static char IndicatorType[] =
+    "com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0";
+
+/*!
+    CellularIndicatorPlugin::CellularIndicatorPlugin
+ */
+CellularIndicatorPlugin::CellularIndicatorPlugin() :
+    HbIndicatorInterface(IndicatorType, GroupPriorityAverage,
+        InteractionActivated),
+    mError(0)
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_CELLULARINDICATORPLUGIN_ENTRY );
+    mIndicatorTypes <<
+        "com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0";
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_CELLULARINDICATORPLUGIN_EXIT );
+}
+
+/*!
+    CellularIndicatorPlugin::~CellularIndicatorPlugin
+ */
+CellularIndicatorPlugin::~CellularIndicatorPlugin()
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_DCELLULARINDICATORPLUGIN_ENTRY );
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_DCELLULARINDICATORPLUGIN_EXIT );
+}
+
+/*!
+    CellularIndicatorPlugin::indicatorTypes
+ */
+QStringList CellularIndicatorPlugin::indicatorTypes() const
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_INDICATORTYPES_ENTRY );
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_INDICATORTYPES_EXIT );
+    return mIndicatorTypes;
+}
+
+/*!
+    CellularIndicatorPlugin::accessAllowed
+ */
+bool CellularIndicatorPlugin::accessAllowed(const QString &indicatorType,
+    const HbSecurityInfo *securityInfo) const
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_ACCESSALLOWED_ENTRY );
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_ACCESSALLOWED_EXIT );
+    return true;
+}
+
+/*!
+    CellularIndicatorPlugin::createIndicator
+ */
+HbIndicatorInterface* CellularIndicatorPlugin::createIndicator(
+    const QString &indicatorType)
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_CREATEINDICATOR_ENTRY );
+    
+    Q_UNUSED(indicatorType)
+    
+    // Install localization
+    QTranslator *translator = new QTranslator(this);
+
+    QString lang = QLocale::system().name(); 
+    QString path = "Z:/resource/qt/translations/"; 
+    translator->load("cellularindicatorplugin_" + lang, path);
+    qApp->installTranslator(translator);
+    
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_CREATEINDICATOR_EXIT );
+    return this;
+}
+
+/*!
+    CellularIndicatorPlugin::error
+ */
+int CellularIndicatorPlugin::error() const
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_ERROR_ENTRY );
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_ERROR_EXIT );
+    return mError;
+}
+
+/*!
+    CellularIndicatorPlugin::handleClientRequest
+ */
+bool CellularIndicatorPlugin::handleClientRequest(RequestType type,
+    const QVariant &parameter)
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_HANDLECLIENTREQUEST_ENTRY );
+    
+    bool handled(false);
+
+    switch (type) {
+    case RequestActivate:
+        if (mParameter != parameter) {
+            mParameter = parameter;
+            emit dataChanged();
+        }
+        handled =  true;
+        break;
+    
+    case RequestDeactivate:
+        mParameter.clear();
+        break;
+        
+    default:
+        // Do nothing
+        break;
+    }
+
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_HANDLECLIENTREQUEST_EXIT );
+    return handled;
+}
+
+/*!
+    CellularIndicatorPlugin::handleInteraction
+ */
+bool CellularIndicatorPlugin::handleInteraction(InteractionType type)
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_HANDLEINTERACTION_ENTRY );
+    
+    Q_UNUSED(type)
+    bool handled = false;
+    
+    switch(type) {
+    case InteractionActivated:
+        //connect error() to slot processError() to get error, 
+        QObject::connect( &process, SIGNAL(error(QProcess::ProcessError)),                       
+                          this, SLOT(processError(QProcess::ProcessError)));
+
+        // Show connection view
+        process.start("connview");
+        handled = true;
+        break;
+    
+    default:
+        break;
+    }
+
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_HANDLEINTERACTION_EXIT );
+    return handled;
+}
+
+/*!
+    CellularIndicatorPlugin::indicatorData
+*/
+QVariant CellularIndicatorPlugin::indicatorData(int role) const
+{
+    OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_INDICATORDATA_ENTRY );
+    QVariant ret = NULL;
+    
+    switch(role) {
+    case PrimaryTextRole:
+        ret = QString(hbTrId("txt_occ_dblist_cellular_data"));
+        break;
+
+    case SecondaryTextRole:
+        if (mParameter.isValid() && (mParameter.type() == QVariant::List)) {
+
+            QList<QVariant> indicatorInfo; 
+            indicatorInfo = mParameter.toList();
+
+            if (!indicatorInfo.count()) {
+                // No entries on the list -> don't even try to use this
+                break;
+            }
+            
+            if ( (indicatorInfo[0].toInt() > 1) && indicatorInfo.count() ) {
+                
+                // More than one connection -> show number of connections
+                QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_l1_connections"));
+                ret = str.arg(indicatorInfo[0].toInt());
+            }
+            else if ( indicatorInfo[0].toInt() && (indicatorInfo.count() >= 2)) {
+                
+                // Only one connection -> show name of the iap
+                QString iapName;
+                iapName = indicatorInfo[1].toString();
+                QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_1_connected"));
+                ret = str.arg(iapName);
+            }
+        }
+        break;
+
+    case IconNameRole:
+    case DecorationNameRole:
+        // Return the icon
+        ret = HbIcon("qtg_small_gprs");
+        break;
+    
+    default:
+        // Do nothing
+        break;
+    }
+    
+    OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_INDICATORDATA_EXIT );
+    return ret;
+}
+
+/*!
+    The processError is a handler for error codes.
+*/
+void CellularIndicatorPlugin::processError(QProcess::ProcessError err)
+    {
+    OstTraceFunctionEntry1(CELLULARINDICATORPLUGIN_PROCESSERROR_ENTRY, this);
+  
+    switch (err) {   
+        case QProcess::FailedToStart: 
+        case QProcess::Crashed: 
+        case QProcess::Timedout: 
+        case QProcess::ReadError: 
+        case QProcess::WriteError: 
+        case QProcess::UnknownError:
+            OstTrace1( CELLULARINDICATORPLUGIN_ERR,PROCESSERROR_KNOWN,"Process Error %u", err);
+            break;  
+        default:
+        OstTrace1( CELLULARINDICATORPLUGIN_ERR,PROCESSERROR_UNKNOWN,"Unknown Process Error %u", err);
+            break;
+        }
+    OstTraceFunctionExit1(CELLULARINDICATORPLUGIN_PROCESSERROR_EXIT, this);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/cellularindicatorplugin/traces/OstTraceDefinitions.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionmonitoring.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,28 @@
+#
+# 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:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS  += \
+    cellularindicatorplugin \
+    indicatorobserver \
+    connectionview
+            
+CONFIG += ordered
+
+symbian*: {
+    SYMBIAN_PLATFORMS = WINSCW ARMV5
+} 
--- a/connectionmonitoring/connectionmonitorplugin/inc/connectionmonitorplugin.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connectionmonitorplugin/inc/connectionmonitorplugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 // User includes
 
 // System includes
-#include <GSPluginInterface.h>
+#include <gsplugininterface.h>
 #include <aknview.h>
 #include <ConeResLoader.h>
 #include <eikclb.h>
--- a/connectionmonitoring/connectionmonitorplugin/src/connectionmonitorplugin.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connectionmonitorplugin/src/connectionmonitorplugin.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -18,12 +18,12 @@
 
 // User includes
 #include    "connectionmonitorplugin.h"
-#include    <GSParentPlugin.h>
-#include    <GSCommon.hrh>
+#include    <gsparentplugin.h>
+#include    <gscommon.hrh>
 #include    <connectionmonitorpluginrsc.rsg> // GUI Resource
 #include    <connectionmonitorplugin.mbg>
-#include    <GSPrivatePluginProviderIds.h>
-#include    <GSFWViewUIDs.h>
+#include    <gsprivatepluginproviderids.h>
+#include    <gsfwviewuids.h>
 
 // System includes
 #include    <AknNullService.h>
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionInfoBase.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -19,7 +19,7 @@
 
 // INCLUDE FILES
 #include <stdlib.h>
-#include <NIFVAR.H>
+#include <nifvar.h>
 #include <StringLoader.h>
 #include <ConnectionMonitorUi.rsg>
 #include <avkon.rsg>
--- a/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connectionmonitorui/src/ConnectionMonitorUiAppUi.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -22,7 +22,7 @@
 #include <aknnotedialog.h>
 #include <AknUtils.h>
 #include <cmmanagerext.h>
-#include <NIFVAR.H>
+#include <nifvar.h>
 #include <ConnectionMonitorUi.rsg>
 #include "ConnectionMonitorUi.hrh"
 #include "ConnectionMonitorUiAppUi.h"
@@ -354,8 +354,10 @@
                     break;
                     }
                 }
-            
-            if ( newConn )
+
+            index = iConnectionArray->GetArrayIndex( connectionId );
+
+            if ( newConn || ( index < 0 ) )
                 {
                 if ( connectionId > 0)
                     {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/connectionview.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,44 @@
+#
+# 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: Connection view build file
+#
+#
+TEMPLATE = app
+TARGET = connview
+CONFIG += hb no_icon
+DEPENDPATH += . inc src
+INCLUDEPATH += .
+
+# Input
+HEADERS += inc/connectionview.h \
+           traces/OstTraceDefinitions.h \
+           inc/scrollareawidget.h
+SOURCES += src/connectionview.cpp \
+           src/main.cpp \
+           src/scrollareawidget.cpp
+
+TRANSLATIONS = connectionview.ts
+
+RESOURCES = res/connectionview.qrc
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+LIBS += -lqtbearer
+
+symbian {
+    TARGET.CAPABILITY = NetworkServices NetworkControl
+    TARGET.UID3 = 0x2002C36A
+    BLD_INF_RULES.prj_exports += "rom/connectionview.iby CORE_MW_LAYER_IBY_EXPORT_PATH(connectionview.iby)"
+	BLD_INF_RULES.prj_exports += "rom/connectionview_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(connectionview_resources.iby)"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/inc/connectionview.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,150 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef __CONNECTIONVIEW_H__
+#define __CONNECTIONVIEW_H__
+
+#include <QObject>
+#include <HbMainWindow>
+#include <HbDialog>
+#include <QStringList>
+#include <HbWidget>
+#include <QtNetwork>
+#include <QGraphicsLinearLayout>
+#include <HbGroupBox>
+#include <HbScrollArea>
+#include <HbToolBar>
+#include <HbLabel>
+#include <qnetworksession.h>
+#include <qnetworkconfigmanager.h>
+
+QTM_USE_NAMESPACE
+
+class QSignalMapper;
+
+const QString bearer2G = "2G";
+const QString bearerWCDMA = "WCDMA";
+const QString bearerHSPA = "HSPA";
+const QString bearerCDMA2000 = "CDMA2000";
+const int timerValue = 3000;
+
+class ConnectionView: public HbMainWindow
+    {
+    Q_OBJECT
+    
+    public:
+        /* Constructor */
+        ConnectionView();
+        
+        /* Destructor */
+        ~ConnectionView();
+        
+        /**
+         * This is the re-implemented timerEvent function used to trigger
+         * closing of the application. It is received every time the set timer expires.
+         */
+        void timerEvent(QTimerEvent * /*event*/);
+        
+    private slots: 
+        /* Handles the changes in the cellular data connections */
+        void handleConfigurationChanged(const QNetworkConfiguration& config);
+       
+        /* Disonnects the iap given as a parameter */
+        void disconnectSelectedIap(int iapId);
+       
+        /* Disconnects all the cellular iaps */
+        void disconnectAll();
+       
+        /* 
+         * Does the actual stopping of the sessions, once the session's 
+         * opened-signal is received 
+         */
+        void stopSessions();
+        
+        /* Deletes the sender when the session opening fails */
+        void errorSessions(QNetworkSession::SessionError);
+
+    private:     
+        
+        /* Constructs the view */
+        void createView();
+        
+        /* 
+         * Creates group boxes into the view for all the active cellular 
+         * connections.
+         */
+        void createGroupBoxesForConnections();
+        
+        /*
+         * Updates the list of active cellular connections into the
+         * list received as a reference parameter.
+         */
+        void getActiveCellularConnections(QList<QNetworkConfiguration> &activeConfigurations);
+        
+        /*
+         * Creates a single groupbox for the iap given as a paremeters. Attaches the
+         * group boxes disconnect button to the disconnectSelectedIap slot
+         */
+        void addGroupBox(int iapId, QString iapName);
+        
+        /* Clears the groupboxes from the view */
+        void clearGroupBoxView();
+
+    private:
+        /* Pointer to network configuration manager */
+        QNetworkConfigurationManager* mNetConfigurationManager;
+        
+        /* Pointer to the main view of the window */
+        HbView *mMainView;
+        
+        /* The main vertical layout which contains the group box container */
+        QGraphicsLinearLayout* mMainLayout;
+        
+        /* The scroll area of the view */
+        HbScrollArea *mScrollArea;
+        
+        /* The layout into which the groupboxes are inserted */
+        QGraphicsLinearLayout *mBoxLayout;
+        
+        /* 
+         * Pointer to the signalmapper used in mapping the disconnect buttons clicks
+         * to the disconnectSelectedIap function
+         */
+        QSignalMapper *mSignalMapper;
+        
+        /* The amount of active cellular data connections */
+        int mConnectionCount;
+        
+        /* The toolbar on the view */
+        HbToolBar *mToolBar;
+        
+        /* The toolbar action which can be used to disconnect all the connections */
+        HbAction *mDisconnectAction;
+        
+        /* The label used to inform if there are no active connections */
+        HbLabel *mInfoLabel;
+        
+        /* The id of the timer used to close the application */
+        int mClosingTimer;
+        
+        /* definition for unit test purposes */
+        friend class TestConnectionView;
+    
+    };
+
+
+#endif // __CONNECTIONVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/inc/scrollareawidget.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef SCROLLAREAWIDGET_H_
+#define SCROLLAREAWIDGET_H_
+
+#include <QObject>
+#include <QGraphicsWidget>
+#include <qnetworkconfigmanager.h>
+
+QTM_USE_NAMESPACE
+
+class ScrollAreaWidget: public QGraphicsWidget
+{
+    Q_OBJECT
+    
+public:
+    /* Constructor */
+    ScrollAreaWidget(QGraphicsItem *parent = 0);
+    
+    /* Destructor */
+    ~ScrollAreaWidget();
+    
+    /* 
+     * Function to filter all the resizing events to get the widget to
+     * resize itself when switched to landscape and back
+     */
+    bool eventFilter(QObject *object, QEvent *event);
+};
+
+#endif /* SCROLLAREAWIDGET_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/res/connectionview.css	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* 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: 
+*
+*/
+
+HbLabel#mInfoLabel::text
+{
+    font-variant: secondary;
+    text-height: var(hb-param-text-height-secondary);
+    text-align: center;
+}
+
+HbGroupBox#groupBox::headingWidget:portrait
+{
+    fixed-width: expr(var(hb-param-screen-width)-var(hb-param-margin-gene-left)-var(hb-param-margin-gene-right));
+}
+
+HbGroupBox#groupBox::contentWidget:portrait
+{
+    fixed-width: expr(var(hb-param-screen-width)-var(hb-param-margin-gene-left)-var(hb-param-margin-gene-right));
+}
+
+HbGroupBox#groupBox::headingWidget:landscape
+{
+    fixed-width: expr(var(hb-param-screen-height)-var(hb-param-margin-gene-top)-var(hb-param-margin-gene-bottom)-var(hb-param-widget-toolbar-height));
+}
+
+HbGroupBox#groupBox::contentWidget:landscape
+{
+    fixed-width: expr(var(hb-param-screen-height)-var(hb-param-margin-gene-top)-var(hb-param-margin-gene-bottom)-var(hb-param-widget-toolbar-height));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/res/connectionview.qrc	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+    <qresource prefix="/layout" >
+        <file>connectionview.css</file>
+    </qresource>
+</RCC>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/rom/connectionview.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,27 @@
+/*
+ * 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:
+ * 
+ */
+
+#ifndef CONNECTIONVIEW_IBY
+#define CONNECTIONVIEW_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\connview.exe PROGRAMS_DIR\connview.exe
+data=\epoc32\data\z\private\10003a3f\import\Apps\connview_reg.rsc	\private\10003a3f\import\apps\connview_reg.rsc
+data=\epoc32\data\z\resource\apps\connview.rsc \resource\apps\connview.rsc
+
+#endif // CONNECTIONVIEW_IBY
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/rom/connectionview_resources.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,26 @@
+/*
+ * 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:
+ * 
+ */
+
+#ifndef CONNECTIONVIEW_RESOURCES_IBY
+#define CONNECTIONVIEW_RESOURCES_IBY
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_for_iby.hrh> 
+
+data=DATAZ_/QT_TRANSLATIONS_DIR/connectionview.qm QT_TRANSLATIONS_DIR/connectionview.qm 
+
+#endif // CONNECTIONVIEW_RESOURCES_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/src/connectionview.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,496 @@
+/*
+* 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: 
+*
+*/
+
+#include <QTranslator>
+#include <QLocale>
+#include <QList>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbMainWindow>
+#include <HbGroupBox>
+#include <HbListWidget>
+#include <QHBoxLayout>
+#include <HbScrollArea>
+#include <HbView>
+#include <HbIcon>
+#include <HbAction>
+#include <HbToolBar>
+#include <HbStyleLoader>
+#include <QGraphicsLinearLayout>
+#include <QtCore/QSignalMapper>
+#include <QtNetwork>
+#include "connectionview.h"
+#include "scrollareawidget.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "connectionviewTraces.h"
+#endif
+
+
+
+QTM_USE_NAMESPACE
+
+
+ConnectionView::ConnectionView():
+    mNetConfigurationManager(new QNetworkConfigurationManager(this)),
+    mSignalMapper(new QSignalMapper(this)),
+    mConnectionCount(0),
+    mClosingTimer(0)
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_CONNECTIONVIEW_ENTRY );
+    // Install localization
+    QTranslator *translator = new QTranslator(this);
+    QString lang = QLocale::system().name(); 
+    QString path = "Z:/resource/qt/translations/"; 
+    translator->load("connectionview_" + lang, path);
+    qApp->installTranslator(translator);
+    
+    // Register custom layout location
+    bool registerStatus = HbStyleLoader::registerFilePath(":/layout/");
+    Q_ASSERT(registerStatus);
+    
+    // Map the configurationChanged signal to a slot in order to get
+    // information about the changes in the connections
+    bool connectStatus = connect(
+            mNetConfigurationManager,
+            SIGNAL(configurationChanged(const QNetworkConfiguration&)),
+            this,
+            SLOT(handleConfigurationChanged(const QNetworkConfiguration&)));
+    
+    // Create the view and show it
+    createView();
+    OstTraceFunctionExit0( CONNECTIONVIEW_CONNECTIONVIEW_EXIT );
+}
+
+
+ConnectionView::~ConnectionView()
+{
+    OstTraceFunctionEntry0( DUP1_CONNECTIONVIEW_CONNECTIONVIEW_ENTRY );
+    // other widgets are childs of this widget, so they will be
+    // deleted along with mMainView. Add infolabel and scrollarea
+    // again under mainlayout, since one of them is only there at the time
+    // this way all the ui components are deleted at once
+    mInfoLabel->setParentLayoutItem(mMainLayout);
+    mScrollArea->setParentLayoutItem(mMainLayout);
+    delete mMainView;
+    OstTraceFunctionExit0( DUP1_CONNECTIONVIEW_CONNECTIONVIEW_EXIT );
+}
+
+/* !
+     Quit the application when the timer is triggered
+*/
+void ConnectionView::timerEvent(QTimerEvent * /*event*/)
+{
+    killTimer(mClosingTimer);
+    mClosingTimer = 0;
+    qApp->quit();
+}
+
+
+/*!
+    Builds the actual view for the main window
+*/ 
+void ConnectionView::createView()
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_CREATEVIEW_ENTRY );
+    
+    // Create the mainView and the layout for the window
+    mMainView = new HbView();
+    addView(mMainView);
+    setCurrentView(mMainView);
+   
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    mMainLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    mScrollArea = new HbScrollArea();
+    mScrollArea->setScrollDirections(Qt::Vertical);
+    mScrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    mMainLayout->addItem(mScrollArea);
+
+    // Create the widgets and layouts for the scroll area
+    ScrollAreaWidget *scrollContent = new ScrollAreaWidget();
+    scrollContent->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    mScrollArea->installEventFilter(scrollContent);
+    
+    mBoxLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    mBoxLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    scrollContent->setLayout(mBoxLayout);
+    mMainView->setLayout(mMainLayout);
+    mScrollArea->setContentWidget(scrollContent);
+    
+    // Create the toolbar and the disconnection action
+    mToolBar = new HbToolBar();    
+    HbIcon icon("qtg_mono_disconnect");
+    mDisconnectAction = mToolBar->addAction(icon, hbTrId("txt_occ_button_disconnect_all"));
+    mMainView->setToolBar(mToolBar);
+    bool connectStatus = connect(
+            mDisconnectAction,
+            SIGNAL(triggered(bool)),
+            this,
+            SLOT(disconnectAll()));
+    
+    // label for informing the user that there are no connections
+    mInfoLabel = new HbLabel;
+    mInfoLabel->setObjectName("mInfoLabel");
+    mInfoLabel->setPlainText(hbTrId("txt_occ_info_no_active_connections"));
+    mInfoLabel->setAlignment(Qt::AlignCenter);
+    
+    // Create the actual groupboxes for all the active connections
+    createGroupBoxesForConnections();  
+    show();
+    
+    OstTraceFunctionExit0( CONNECTIONVIEW_CREATEVIEW_EXIT );
+}
+
+
+/*!
+    Loops all the active cellular connections and creates groupboxes for those
+*/ 
+void ConnectionView::createGroupBoxesForConnections()
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_CREATEGROUPBOXESFORCONNECTIONS_ENTRY );
+    
+    // disconnect all the old connections and then make the new connections
+    mSignalMapper->disconnect();
+    
+    //Let's find active connections if any
+    QList<QNetworkConfiguration> activeConfigurations;
+    getActiveCellularConnections(activeConfigurations);
+    
+    // If there are no active connections, then the dialog is not shown to the user
+    mConnectionCount = activeConfigurations.count();
+    
+    // Toolbar is shown only if there are more than one connections active
+    if (mConnectionCount > 1) {
+        mToolBar->show();
+    } else {
+        mToolBar->hide();
+    }
+    
+    // if there are connections, then the label should be removed
+    // and the connection boxes drawn
+    if (mConnectionCount > 0) { 
+        mMainLayout->removeItem(mInfoLabel);
+        mInfoLabel->hide();
+        mMainLayout->addItem(mScrollArea);
+
+        for (int i=0; i<mConnectionCount; i++) {
+            // Get the iap id and the iap name for the UI construction
+            bool ok = true;
+            int iapId = activeConfigurations[i].identifier().toInt(&ok);
+            QString iapName = activeConfigurations[i].name();
+
+            if (ok) {
+                addGroupBox(iapId, iapName);
+            }        
+        }
+        // This connection must be done only once, thus it's done here separately
+        bool connectStatus = connect(
+            mSignalMapper, 
+            SIGNAL(mapped(int)), 
+            this, 
+            SLOT(disconnectSelectedIap(int)));
+        
+        // there are no connections, inform the user with the text 
+    } else {
+        mMainLayout->removeItem(mScrollArea);
+        mInfoLabel->show();
+        mMainLayout->addItem(mInfoLabel);
+        mMainLayout->setAlignment(mInfoLabel, Qt::AlignCenter);
+        // start the timer to close the application after 3 seconds
+        if (mClosingTimer == 0) {
+            mClosingTimer = startTimer(timerValue);
+        }
+    }
+   
+   OstTraceFunctionExit0( CONNECTIONVIEW_CREATEGROUPBOXESFORCONNECTIONS_EXIT );
+}
+
+
+/*
+    Returns a list of all the available active cellular connections
+*/
+void ConnectionView::getActiveCellularConnections(QList<QNetworkConfiguration> &activeConfigurations)
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_GETACTIVECELLULARCONNECTIONS_ENTRY );
+    //Let's find active connections if any
+    activeConfigurations.clear();
+
+    QList<QNetworkConfiguration> configurations = 
+        mNetConfigurationManager->allConfigurations(QNetworkConfiguration::Active);
+
+    // Connection are open if they are in active state
+    for (int i=0; i<configurations.count(); i++) {  
+        if (configurations[i].type() == QNetworkConfiguration::InternetAccessPoint) {
+            QString bearerName = configurations[i].bearerName();
+            
+            // WLAN connections are filtered out
+            // TODO At some point QNetwork configuration will provide these constants
+            if (bearerName==bearer2G || bearerName==bearerWCDMA || 
+                bearerName==bearerHSPA || bearerName==bearerCDMA2000) {
+                activeConfigurations.append(configurations[i]);
+            }
+        }
+    }
+    OstTraceFunctionExit0( CONNECTIONVIEW_GETACTIVECELLULARCONNECTIONS_EXIT );
+}
+    
+
+/*!
+    Handles the changes in the configurations whose states change to 
+    active or discovered (meaning connected and disconnected)
+*/ 
+void ConnectionView::handleConfigurationChanged(const QNetworkConfiguration& config)
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_HANDLECONFIGURATIONCHANGED_ENTRY );
+    switch (config.state())
+    {
+        case QNetworkConfiguration::Undefined:
+            //Nothing done
+            break;
+        case QNetworkConfiguration::Defined:
+        case QNetworkConfiguration::Discovered:
+        case QNetworkConfiguration::Active:
+        {
+            // If the Configuration change is to Discovered or Active, it means
+            // that a connection was either opened or closed. Update the connections
+            // on the ui
+            QString bearerName = config.bearerName();
+        
+            // Update the view if there are changes in the cellular connections
+            // TODO At some point QNetwork configuration will provide these constants
+            if (bearerName==bearer2G || bearerName==bearerWCDMA || 
+                bearerName==bearerHSPA || bearerName==bearerCDMA2000) {     
+                // kill the application closing timer if it was started (there were no 
+                // active connections)
+                if (mClosingTimer != 0) {
+                    killTimer(mClosingTimer);
+                    mClosingTimer = 0;
+                }
+                clearGroupBoxView();
+                // redraw the boxes
+                createGroupBoxesForConnections();
+                update();
+            } 
+            break;
+        }
+    }    
+    OstTraceFunctionExit0( CONNECTIONVIEW_HANDLECONFIGURATIONCHANGED_EXIT );
+}
+
+
+/*!
+    Adds one groupbox into the boxlayout for the given iap
+*/ 
+void ConnectionView::addGroupBox(int iapId, QString iapName)
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_ADDGROUPBOX_ENTRY );
+    // Create the groupbox and its layouts
+    HbGroupBox *groupBox = new HbGroupBox();
+    groupBox->setObjectName("groupBox");
+    groupBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+    groupBox->setHeading(hbTrId("txt_occ_subhead_connection_details"));
+    groupBox->setCollapsable(true);
+    
+    // Create the disconnection button
+    HbPushButton* button = new HbPushButton(
+            hbTrId("txt_occ_button_disconnect"), mMainView);
+    button->setSizePolicy(QSizePolicy::Preferred, 
+                          QSizePolicy::Preferred, 
+                          QSizePolicy::PushButton);
+    
+    // Create the horizontal layout for the labels
+    QGraphicsLinearLayout *labelLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+    labelLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    HbLabel *typeLabel = new HbLabel(hbTrId("txt_occ_list_name"));
+    HbLabel *nameLabel = new HbLabel(iapName);
+    nameLabel->setAlignment(Qt::AlignRight);
+    labelLayout->addItem(typeLabel);
+    labelLayout->addItem(nameLabel);
+   
+    HbWidget *labelWidget = new HbWidget();
+    labelWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    labelWidget->setLayout(labelLayout);
+    
+    // a layout cannot be added directly to a layout, we need to use this container widget 
+    HbWidget *boxWidget = new HbWidget();  
+    boxWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    QGraphicsLinearLayout *boxLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    boxLayout->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    boxWidget->setLayout(boxLayout);
+
+    // Add the label layout and the button into the groupbox
+    boxLayout->addItem(labelWidget);
+    boxLayout->addItem(button);
+    boxLayout->setAlignment(button, Qt::AlignHCenter);
+    groupBox->setContentWidget(boxWidget);
+    groupBox->setCollapsed(true);
+    
+    // add the group box to the main layout
+    mBoxLayout->addItem(groupBox);
+    mBoxLayout->setAlignment(groupBox, Qt::AlignHCenter);
+        
+    // Expand the groupbox if connection count is 1 
+    if (mConnectionCount == 1) {
+        groupBox->setCollapsed(false);
+    }
+    
+    // Connect the button to the mapper
+    bool connectStatus = connect(
+        button, 
+        SIGNAL(clicked()), 
+        mSignalMapper, 
+        SLOT(map()));
+    mSignalMapper->setMapping(button, iapId);
+    OstTraceFunctionExit0( CONNECTIONVIEW_ADDGROUPBOX_EXIT );
+}
+
+
+/*!
+    Closes the connection to the given iap
+*/ 
+void ConnectionView::disconnectSelectedIap(int iapId)
+{   
+    OstTraceFunctionEntry0( CONNECTIONVIEW_DISCONNECTSELECTEDIAP_ENTRY );
+   
+    // Get all the active connections 
+    QList<QNetworkConfiguration> activeConfigurations;
+    getActiveCellularConnections(activeConfigurations);
+    int count = activeConfigurations.count();
+            
+    for (int i=0; i < count; i++) {
+        bool ok = true;
+        int loopedIapId = activeConfigurations[i].identifier().toInt(&ok);
+        
+        // if the looped iap matches the iap, stop the connection
+        if (loopedIapId == iapId) {
+            
+            QNetworkSession *networkSession = new QNetworkSession(activeConfigurations[i], mMainView);
+
+            bool connectStatus = connect(
+                networkSession, 
+                SIGNAL(opened()), 
+                this, 
+                SLOT(stopSessions()));
+                      
+            // This connection is done basically for memory handling
+            // to be able to delete the session if one of the error signal is emitted
+            connect(
+                networkSession, 
+                SIGNAL(error(QNetworkSession::SessionError)), 
+                this, 
+                SLOT(errorSessions(QNetworkSession::SessionError)));
+            
+            // open the session only if the connection succeeded, otherwise it's no use
+            if (connectStatus) {
+                // session needs to be opened in order to stop all the sessions of this configurations
+                networkSession->open();
+            } else {
+                OstTrace1( CONNECTSTATUS, CONNECTIONVIEW_DISCONNECTSELECTEDIAP, "ConnectionView::disconnectSelectedIap failed;iapId=%d", iapId );
+            }
+   
+            // the searched iap was found, stop looping
+            break;
+        }
+    }
+    OstTraceFunctionExit0( CONNECTIONVIEW_DISCONNECTSELECTEDIAP_EXIT );
+}
+
+
+/*!
+    Closes all the connections to active iaps
+*/ 
+void ConnectionView::disconnectAll()
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_DISCONNECTALL_ENTRY );
+    
+    // Get all the active connections 
+    QList<QNetworkConfiguration> activeConfigurations;
+    getActiveCellularConnections(activeConfigurations);
+    int count = activeConfigurations.count();
+    
+    for (int i=0; i < count; i++) {
+        QNetworkSession *networkSession = new QNetworkSession(activeConfigurations[i], mMainView);
+        bool connectStatus = connect(
+            networkSession, 
+            SIGNAL(opened()), 
+            this, 
+            SLOT(stopSessions()));
+        // This connection is done basically for memory handling
+        // to be able to delete the session if one of the error signal is emitted
+        connect(
+            networkSession, 
+            SIGNAL(error(QNetworkSession::SessionError)), 
+            this, 
+            SLOT(errorSessions(QNetworkSession::SessionError)));
+        
+        // open the session only if the connection succeeded, otherwise it's no use
+        if (connectStatus) {
+            // session needs to be opened in order to stop all the sessions of this configurations
+            networkSession->open();
+        }
+    }
+    OstTraceFunctionExit0( CONNECTIONVIEW_DISCONNECTALL_EXIT );
+}
+
+
+void ConnectionView::stopSessions() 
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_STOPSESSIONS_ENTRY );
+
+    // get the sender-session and stop the sessions
+    QObject *senderObject = QObject::sender();
+    if (senderObject != NULL) {
+        QNetworkSession *session = qobject_cast<QNetworkSession *>(senderObject);
+        session->stop();
+        session->deleteLater();
+    }
+    OstTraceFunctionExit0( CONNECTIONVIEW_STOPSESSIONS_EXIT );
+}
+
+void ConnectionView::errorSessions(QNetworkSession::SessionError) 
+{
+    OstTraceFunctionEntry0( DUP2_CONNECTIONVIEW_ERRORSESSIONS_ENTRY );
+
+    // something went wrong in session opening
+    // get the sender-session and delete the sender
+    QObject *senderObject = QObject::sender();
+    if (senderObject != NULL) {
+        senderObject->deleteLater();
+    }
+    OstTraceFunctionExit0( DUP1_CONNECTIONVIEW_ERRORSESSIONS_EXIT );
+}
+
+/*!
+    Removes the items from the boxlayout in order to be costructed again.
+*/ 
+void ConnectionView::clearGroupBoxView()
+{
+    OstTraceFunctionEntry0( CONNECTIONVIEW_CLEARGROUPBOXVIEW_ENTRY );
+    // Loop all the groupbox items through and remove them from the view
+    int count = mBoxLayout->count();
+    for (int i = 0; i < count; i++ )  {
+        // store the pointer to the item to be able to delete it
+        QGraphicsLayoutItem *item = mBoxLayout->itemAt(0);
+        mBoxLayout->removeAt(0);
+        delete item;
+    }
+    OstTraceFunctionExit0( CONNECTIONVIEW_CLEARGROUPBOXVIEW_EXIT );
+}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/src/main.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,26 @@
+/*
+* 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: 
+*
+*/
+
+#include <QApplication>
+#include "connectionview.h"
+
+int main(int argc, char *argv[])
+    {
+    QApplication app(argc, argv);
+    ConnectionView connDetails;
+    return app.exec();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/src/scrollareawidget.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* 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: 
+*
+*/
+
+#include <QGraphicsItem>
+#include <QEvent>
+#include <QGraphicsSceneResizeEvent>
+#include "scrollareawidget.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "scrollareawidgetTraces.h"
+#endif
+
+
+QTM_USE_NAMESPACE
+
+
+ScrollAreaWidget::ScrollAreaWidget(QGraphicsItem *parent):
+    QGraphicsWidget(parent)
+{
+    OstTraceFunctionEntry0( SCROLLAREAWIDGET_SCROLLAREAWIDGET_ENTRY ); 
+    OstTraceFunctionExit0( SCROLLAREAWIDGET_SCROLLAREAWIDGET_EXIT );
+}
+
+ScrollAreaWidget::~ScrollAreaWidget() 
+{
+    OstTraceFunctionEntry0( DUP1_SCROLLAREAWIDGET_SCROLLAREAWIDGET_ENTRY );
+    OstTraceFunctionExit0( DUP1_SCROLLAREAWIDGET_SCROLLAREAWIDGET_EXIT );
+}
+
+/*!
+    Filters the resizing events to get the widget resized when switching to 
+    landscape and back
+*/
+bool ScrollAreaWidget::eventFilter(QObject *object, QEvent *event)
+{
+    OstTraceFunctionEntry0( SCROLLAREAWIDGET_EVENTFILTER_ENTRY );
+    
+    if(event->type() == QEvent::GraphicsSceneResize){
+        resize(((QGraphicsSceneResizeEvent*)event)->newSize());
+        OstTraceFunctionExit0( SCROLLAREAWIDGET_EVENTFILTER_EXIT );
+        return true;
+    } else {
+        return QGraphicsWidget::eventFilter(object, event);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connectionview/traces/OstTraceDefinitions.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+#include <opensystemtrace.h>
+#endif
--- a/connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/CWlanSupport.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -1699,6 +1699,7 @@
             ( aRssClass == EWlanRssClassNormal && previousRssClass == EConnMonWlanRssClassWeak ) )
         {
         LOGIT("Rss class change caused call to HandleAvailabilityChange()")
+        iWlanSupport->EnableWlanScan(); 
         iServer->AvailabilityManager()->HandleAvailabilityChange();
         }
 
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonIAP.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -33,6 +33,7 @@
 #include "connmontelnoti.h"
 #include "ConnMonBearerNotifier.h"
 #include "log.h"
+#include "cellulardatausagekeyupdater.h"
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -1180,6 +1181,7 @@
     {
     LOGENTRFN("CConnMonIAP::GetBearerInfo()")
     TInt err( KErrNone );
+    TBool getBearerCalled( EFalse );
 
     // Find connection matching the given Id
     TInt index = Index( aConnectionId );
@@ -1198,6 +1200,7 @@
                     aConnectionId,
                     iConnInfos[index].iBearer,
                     iConnInfos[index].iBearerInfo );
+            getBearerCalled = ETrue;
             }
         if ( KErrNone == err )
             {
@@ -1243,17 +1246,21 @@
                     iConnInfos[index].iBearerInfo.iBearer == EBearerInfoHSUPA ||
                     iConnInfos[index].iBearerInfo.iBearer == EBearerInfoHSxPA ) )
                 {
-                // CSD/HSCSD info could change after the first query also
-                // GPRS/EdgeGPRS/WCDMA info can change.
-                TInt bearer( EBearerUnknown );
-                TBearerInfo bearerInfo;
-
-                LOGIT("GetBearerInfo: GetBearer() 2nd query")
-                err = GetBearer( aConnectionId, bearer, bearerInfo );
-                if ( ( KErrNone == err ) && ( bearerInfo.iBearer != EBearerInfoUnknown ) )
+                // If GetBearer() was just called, no need to do it again.
+                if ( !getBearerCalled )
                     {
-                    iConnInfos[index].iBearer = bearer;
-                    iConnInfos[index].iBearerInfo = bearerInfo;
+                    // CSD/HSCSD info could change after the first query also
+                    // GPRS/EdgeGPRS/WCDMA info can change.
+                    TInt bearer( EBearerUnknown );
+                    TBearerInfo bearerInfo;
+
+                    LOGIT("GetBearerInfo: GetBearer() 2nd query")
+                    err = GetBearer( aConnectionId, bearer, bearerInfo );
+                    if ( ( KErrNone == err ) && ( bearerInfo.iBearer != EBearerInfoUnknown ) )
+                        {
+                        iConnInfos[index].iBearer = bearer;
+                        iConnInfos[index].iBearerInfo = bearerInfo;
+                        }
                     }
                 }
             }
@@ -2007,8 +2014,15 @@
             iNetwRegistrationNotifier = CNetwRegistrationNotifier::NewL( iServer, iMobilePhone );
             }
         if ( !iNetwRegistrationNotifier->IsActive() )
-            {
+            {            
             iNetwRegistrationNotifier->Receive(); // (re)start listening
+            
+            // We might have missed the network registration notification before 
+            // we started listening for notifications here. Update the 
+            // network registration information.            
+            TInt registration( ENetworkRegistrationExtNotAvailable );                
+            User::LeaveIfError( GetNetworkRegistration_v2( registration ) );
+            iServer->CellularDataUsageKeyUpdater()->UpdateKeyL( registration );            
             }
 
         // Bearer change (GPRS/Edge GPRS) status events
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonNoti.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -616,6 +616,20 @@
                         {
                         LOGIT1("SERVER: FAILED to start bearer(new) notifier <%d>", ret)
                         }
+                        
+                    // Update IAP availability if WLAN connection is fully started.
+                    // When WLAN connection status is KLinkLayerOpen it is the only
+                    // WLAN available.
+                    //
+                    TBearerInfo bearerInfo;
+
+                    ret = iServer->Iap()->GetBearerInfo( iConnectionId, bearerInfo );
+                    
+                    if ( ret == KErrNone && bearerInfo.iBearer == EBearerInfoWLAN )
+                        {
+                        LOGIT("CProgressNotifier::RunL triggered HandleAvailabilityChange()")
+                        iServer->AvailabilityManager()->HandleAvailabilityChange();	
+                        }	    
                     }
 
                 iFilter = KNoFiltering;
--- a/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonServ.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -326,6 +326,14 @@
     // Identify ourselves and open for service
     StartL( KConnectionMonitorServerName );
 
+    //Start Indicator observer process
+    _LIT(KIndicatorObserverExeFile,"indicatorobserver.exe");
+    _LIT(KIndicatorObserverExeFileCmd,"");
+    RProcess proc;
+    User::LeaveIfError(proc.Create(KIndicatorObserverExeFile,KIndicatorObserverExeFileCmd));
+    proc.Resume();
+    proc.Close(); // Closes the handle, not the process.
+
     LOGIT("ConstructL: Server started successfully")
     LOGEXITFN("CConnMonServer::ConstructL()")
     }
--- a/connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/connectionmonitor/src/cellulardatausagekeyupdater.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -29,7 +29,7 @@
 #include "cellulardatausagekeyupdater.h"
 #include "ConnMonServ.h"
 #include "ConnMonAvailabilityManager.h"
-#include "ConnMonIap.h"
+#include "ConnMonIAP.h"
 #include "ConnMonDef.h"
 #include "log.h"
 
@@ -86,12 +86,17 @@
                 
     TCmGenConnSettings occSettings = ReadGenConnSettingsL();
   
-    TInt value( occSettings.iCellularDataUsageHome );
+    TInt value( ECmCellularDataUsageDisabled );
         
     if ( aRegistration == ENetworkRegistrationExtRoamingInternational )
         {           
         value = occSettings.iCellularDataUsageVisitor;
         }
+    else if ( aRegistration == ENetworkRegistrationExtHomeNetwork || 
+              aRegistration == ENetworkRegistrationExtRoamingNational )
+        {           
+        value = occSettings.iCellularDataUsageHome;
+        }
 
     CRepository* cmRepository = NULL;
     
@@ -106,10 +111,12 @@
             {
             cmRepository->Set( KCurrentCellularDataUsage, value );
             LOGIT1("KCurrentCellularDataUsage set to %d", value)
-            
-            LOGIT("CCellularDataUsageKeyUpdater triggered HandleAvailabilityChange()")
-            iServer->AvailabilityManager()->HandleAvailabilityChange();
-            }    
+            }
+        else
+            {
+            LOGIT1("KCurrentCellularDataUsage already up-to-date %d", previous)
+            }
+        
         delete cmRepository;    
         }
     else
@@ -219,6 +226,9 @@
         iErrorCounter = 0;
         
         TRAPD( leaveCode, UpdateKeyL() )
+        
+        LOGIT("CCellularDataUsageKeyUpdater triggered HandleAvailabilityChange()")
+        iServer->AvailabilityManager()->HandleAvailabilityChange();
     
         if ( leaveCode )
             {
--- a/connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionmonitoring/connmon/dataconnectionlogger/src/saeobserver.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-#include <NIFVAR.H>
+#include <nifvar.h>
 #include <e32svr.h>
 #include <PSVariables.h>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/inc/indicatorobserver.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,112 @@
+/*
+ * 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:
+ * 
+ */
+
+#ifndef INDICATOROBSERVER_H
+#define INDICATOROBSERVER_H
+
+#include <QtCore>
+
+#include <qnetworkconfigmanager.h>
+#include <qnetworkconfiguration.h>
+#include <xqsettingskey.h>
+
+class XQSettingsManager;
+
+QTM_USE_NAMESPACE
+
+const int wlanNotConnected = 0;
+const int wlanConnected = 1;
+
+const QString bearerWLAN = "WLAN";
+const QString bearer2G = "2G";
+const QString bearerWCDMA = "WCDMA";
+const QString bearerHSPA = "HSPA";
+const QString bearerCDMA2000 = "CDMA2000";
+
+class IndicatorObserver : public QCoreApplication
+    {
+    Q_OBJECT
+    
+public:
+    IndicatorObserver(int argc, char* argv[]);
+    
+    virtual ~IndicatorObserver();
+    
+    void initializeIndicators();
+    
+    void findActiveConfigurations();
+    
+    void updateWlanIndicator();
+    
+    void updateCellularIndicator();
+    
+    void activateCellularIndicatorPlugin(QList<QVariant> list);
+    
+    void deactivateCellularIndicatorPlugin();
+     
+    void activateWlanIndicatorPlugin(QList<QVariant> list);
+    
+    void deactivateWlanIndicatorPlugin();
+        
+private slots:
+    void updateWlanRadioStatus(const XQSettingsKey &key, const QVariant &value);
+
+    void handleConfigurationChanged(const QNetworkConfiguration& config);
+    
+private:
+    /*!
+        Pointer to network configuration manager
+    */
+    QNetworkConfigurationManager* mNetConfigurationManager;
+    
+    /*!
+        Pointer to settings manager for reading PS keys
+    */
+    XQSettingsManager *mSettingsManager;
+    
+    /*!
+        Pointer to a list of active cellular configurations
+    */
+    QList<QNetworkConfiguration>* mActiveCellularConfigurations;
+    
+    /*!
+        Pointer to a list of active WLAN configurations
+    */
+    QList<QNetworkConfiguration>* mActiveWlanConfigurations;
+    
+    /*!
+        Indicates whether WLAN radio is switched on
+    */
+    bool mWlanEnabled;
+    
+    /*!
+        Indicates whether WLAN indicator plugin is activated
+    */
+    bool mWlanIndicatorIsActivated;
+    
+    /*!
+        Indicates whether cellular indicator plugin is activated
+    */
+    bool mCellularIndicatorIsActivated;
+
+    friend class ObserverTester;
+    
+    };
+
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/indicatorobserver.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,44 @@
+#
+# 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:
+#
+
+TEMPLATE = app
+TARGET = indicatorobserver
+CONFIG += hb \
+          no_icon
+
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \
+               ./inc \
+               ./traces
+               
+LIBS += -lqtbearer -lxqsettingsmanager
+
+QT += core \
+      network 
+
+QT -= gui
+
+HEADERS += inc/indicatorobserver.h \
+           traces/OstTraceDefinitions.h
+    
+SOURCES += src/indicatorobserver.cpp \
+           src/main.cpp
+    
+symbian*: {
+	TARGET.UID3 = 0x2002C36C
+    TARGET.CAPABILITY = NetworkServices NetworkControl ReadUserData
+    SYMBIAN_PLATFORMS = WINSCW ARMV5
+    BLD_INF_RULES.prj_exports += "rom/indicatorobserver.iby CORE_MW_LAYER_IBY_EXPORT_PATH(indicatorobserver.iby)"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/rom/indicatorobserver.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,25 @@
+/*
+ * 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:
+ * 
+ */
+
+#ifndef INDICATOROBSERVER_IBY
+#define INDICATOROBSERVER_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\indicatorobserver.exe PROGRAMS_DIR\indicatorobserver.exe
+
+#endif // INDICATOROBSERVER_IBY
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/src/indicatorobserver.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,349 @@
+/*
+ * 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:
+ * 
+ */
+
+#include <QtCore>
+#include <QCoreApplication>
+
+#include <hbindicator.h>
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+#include <qnetworkconfigmanager.h>
+#include <qnetworkconfiguration.h>
+#include <xqsettingsmanager.h>
+#include <wlandevicesettingsinternalcrkeys.h>
+
+#include "indicatorobserver.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "indicatorobserverTraces.h"
+#endif
+
+QTM_USE_NAMESPACE
+
+/*!
+    IndicatorObserver::IndicatorObserver
+*/
+IndicatorObserver::IndicatorObserver(int argc, char* argv[]) :
+    QCoreApplication(argc, argv),
+    mNetConfigurationManager(new QNetworkConfigurationManager(this)),
+    mSettingsManager(new XQSettingsManager(this)),
+    mActiveCellularConfigurations(new QList<QNetworkConfiguration>),
+    mActiveWlanConfigurations(new QList<QNetworkConfiguration>),    
+    mWlanEnabled(0),
+    mWlanIndicatorIsActivated(false),
+    mCellularIndicatorIsActivated(false)
+    
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_CONSTRUCTOR_ENTRY, "-->");
+
+    bool connectStatus = false;
+
+    connectStatus = connect(
+        mNetConfigurationManager,
+        SIGNAL(configurationChanged(const QNetworkConfiguration&)),
+        this,
+        SLOT(handleConfigurationChanged(const QNetworkConfiguration&)));
+    
+    if (!connectStatus){
+        OstTrace0(TRACE_FLOW, INDICATOROBSERVER_CONNECT_FAILED, "Connecting handleConfigurationChanged SLOT failed");     
+        }
+    
+    connectStatus = connect(
+        mSettingsManager,
+        SIGNAL(valueChanged(const XQSettingsKey, const QVariant)),
+        this,
+        SLOT(updateWlanRadioStatus(const XQSettingsKey, const QVariant)));
+    
+    if (!connectStatus){
+        OstTrace0(TRACE_FLOW, INDICATOROBSERVER_CONNECT_FAILED_DUP1, "Connecting updateWlanRadioStatus SLOT failed");     
+        }
+    
+    // Subscribe for WLAN ON/OFF change indications
+    XQSettingsKey wlanKey(
+        XQSettingsKey::TargetCentralRepository,
+        KCRUidWlanDeviceSettingsRegistryId.iUid,
+        KWlanOnOff);
+    
+    //Read current status of WLAN radio
+    //mWlanEnabled = mSettingsManager->readItemValue(wlanKey).toInt() ? true : false;
+    mWlanEnabled = true; 
+    //TODO: Replace above code with commented code when WlanOnOff implementation is in release.
+    //TODO: Remeber to add check for read failure(call error() method from settings manager).
+    
+    mSettingsManager->startMonitoring(wlanKey);
+
+    initializeIndicators();
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_CONSTRUCTOR_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::~IndicatorObserver
+*/
+IndicatorObserver::~IndicatorObserver()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DESTRUCTOR_ENTRY, "-->");
+     
+    if(mCellularIndicatorIsActivated) {
+        deactivateCellularIndicatorPlugin();
+    }
+    
+    if (mActiveCellularConfigurations) {
+        mActiveCellularConfigurations->clear();
+        delete mActiveCellularConfigurations;
+        }
+    
+
+    if (mWlanIndicatorIsActivated) {
+        deactivateWlanIndicatorPlugin();
+    }
+    
+    if (mActiveWlanConfigurations) {
+        mActiveWlanConfigurations->clear();
+        delete mActiveWlanConfigurations;
+        }
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DESTRUCTOR_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::initializeIndicators
+*/
+void IndicatorObserver::initializeIndicators()
+{
+
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_INITIALIZEINDICATORS_ENTRY, "-->");
+    
+    findActiveConfigurations();
+    updateWlanIndicator();
+    updateCellularIndicator();
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_INITIALIZEINDICATORS_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::updateWlanRadioStatus
+*/
+void IndicatorObserver::updateWlanRadioStatus(const XQSettingsKey &key, const QVariant &value)
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATEWLANRADIOSTATUS_ENTRY, "-->");
+    
+    // The key parameter is not used, since only WLAN ON/OFF setting is connected to this slot
+    Q_UNUSED(key);
+    
+    // Inform about WLAN ON/OFF status change
+    Q_UNUSED(value); //TODO: to be removed with final implementation. To keep compiler satisfied.
+    //    mWlanEnabled = value.toInt() ? true : false;
+    
+    mWlanEnabled = true; //TODO: Replace with above code when WlanOnOff implementation is in release
+    
+    if (mWlanEnabled == false) {    
+        deactivateWlanIndicatorPlugin();
+    } else {
+        updateWlanIndicator();
+    }
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATEWLANRADIOSTATUS_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::findActiveConfigurations
+*/
+void IndicatorObserver::findActiveConfigurations()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_FINDACTIVECONFIGURATIONS_ENTRY, "-->");
+    
+    mActiveWlanConfigurations->clear();
+    mActiveCellularConfigurations->clear();
+            
+    //Let's find active connections if any    
+    QList<QNetworkConfiguration> allConfigurations = mNetConfigurationManager->allConfigurations(QNetworkConfiguration::Active);
+    
+    for (int i=0; i<allConfigurations.count(); i++) {
+        if (allConfigurations[i].type() == QNetworkConfiguration::InternetAccessPoint) {
+
+            //Let's check the bearer type
+            QString bearerName = allConfigurations[i].bearerName();
+        
+            if (bearerName == bearerWLAN) {
+                mActiveWlanConfigurations->append(allConfigurations[i]);
+            } else if (bearerName == bearer2G ||
+                       bearerName == bearerWCDMA ||
+                       bearerName == bearerHSPA || 
+                       bearerName == bearerCDMA2000) {
+                mActiveCellularConfigurations->append(allConfigurations[i]);
+            }  
+        }
+    }
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_FINDACTIVECONFIGURATIONS_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::updateWlanIndicator
+*/
+void IndicatorObserver::updateWlanIndicator()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATEWLANINDICATOR_ENTRY, "-->");
+    QList<QVariant> list;
+    
+    int count = mActiveWlanConfigurations->count();
+
+    //We do not deactivate WlanIndicator plugin here as it is done in updateWlanRadioStatus method
+    //as WLAN radio status determines whether to show indicator or not
+    if ( mWlanEnabled ) {
+        if(count == 0) {
+            list.insert(0, wlanNotConnected);
+            activateWlanIndicatorPlugin(list);
+        } else {
+            list.insert(0, wlanConnected);
+            list.insert(1, mActiveWlanConfigurations->at(0).name());          
+            activateWlanIndicatorPlugin(list);
+        }
+    }
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATEWLANINDICATOR_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::updateCellularIndicator
+*/
+void IndicatorObserver::updateCellularIndicator()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATECELLULARINDICATOR_ENTRY, "-->");
+    
+    QList<QVariant> list;
+
+    int count = mActiveCellularConfigurations->count();
+ 
+    if ( count == 0 ) {
+        if ( mCellularIndicatorIsActivated ){
+            deactivateCellularIndicatorPlugin();
+        }
+    } else {
+        if (count == 1) {
+            list.insert(0, count);
+            list.insert(1, mActiveCellularConfigurations->at(0).name());
+            list.insert(2, mActiveCellularConfigurations->at(0).identifier().toInt());
+        } else {
+            list.insert(0, count);
+        
+        } 
+        activateCellularIndicatorPlugin(list);        
+    }
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_UPDATECELLULARINDICATOR_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::handleConfigurationChanged
+*/
+void IndicatorObserver::handleConfigurationChanged(const QNetworkConfiguration& config)
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_HANDLECONFIGURATIONCHANGED_ENTRY, "-->");
+    
+    switch (config.state())
+    {   
+        case QNetworkConfiguration::Defined: //To handle situation where we have active connection and it is lost due to bad radio conditions 
+        case QNetworkConfiguration::Discovered:            
+        case QNetworkConfiguration::Active:
+            {
+                findActiveConfigurations();
+
+                QString bearerName = config.bearerName();
+                
+                if (bearerName == bearerWLAN) {
+                    updateWlanIndicator();
+                } else if (bearerName == bearer2G ||
+                           bearerName == bearerWCDMA ||
+                           bearerName == bearerHSPA  ||
+                           bearerName == bearerCDMA2000) {                   
+                    updateCellularIndicator();
+                }
+            }
+            break;
+            
+        default:
+            break;
+    }
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_HANDLECONFIGURATIONCHANGED_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::activateCellularIndicatorPlugin
+*/
+void IndicatorObserver::activateCellularIndicatorPlugin(QList<QVariant> list)
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_ACTIVATECELLULARINDICATORPLUGIN_ENTRY, "-->");
+    
+    HbIndicator indicator;    
+    bool success = indicator.activate("com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0", list);
+    
+    if (!success) {
+        mCellularIndicatorIsActivated = false;
+        OstTrace0(TRACE_FLOW, INDICATOROBSERVER_CELLULAR_INDICATOR_ACTIVATION_FAILED, "Cellular indicator activation failed"); 
+    } else {
+        mCellularIndicatorIsActivated = true;
+    }
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_ACTIVATECELLULARINDICATORPLUGIN_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::deactivateCellularIndicatorPlugin
+*/
+void IndicatorObserver::deactivateCellularIndicatorPlugin()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DEACTIVATECELLULARINDICATORPLUGIN_ENTRY, "-->");
+    
+    HbIndicator indicator;
+    indicator.deactivate("com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0");
+    mCellularIndicatorIsActivated = false;
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DEACTIVATECELLULARINDICATORPLUGIN_EXIT, "<--");
+}
+
+/*!
+    IndicatorObserver::activateWlanIndicatorPlugin
+*/
+void IndicatorObserver::activateWlanIndicatorPlugin(QList<QVariant> list)
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_ACTIVATEWLANINDICATORPLUGIN_ENTRY, "-->");
+
+    HbIndicator indicator;
+    bool success = indicator.activate("com.nokia.hb.indicator.connectivity.wlanindicatorplugin/1.0", list);
+    
+    if (!success) {
+        mWlanIndicatorIsActivated = false;
+        OstTrace0(TRACE_FLOW, INDICATOROBSERVER_WLAN_INDICATOR_ACTIVATION_FAILED, "WLAN indicator activation failed"); 
+    } else {
+        mWlanIndicatorIsActivated = true;
+    }
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_ACTIVATEWLANINDICATORPLUGIN_EXIT, "<--");    
+}
+
+/*!
+    IndicatorObserver::deactivateWlanIndicatorPlugin
+*/
+void IndicatorObserver::deactivateWlanIndicatorPlugin()
+{
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DEACTIVATEWLANINDICATORPLUGIN_ENTRY, "-->");
+
+    HbIndicator indicator;
+    indicator.deactivate("com.nokia.hb.indicator.connectivity.wlanindicatorplugin/1.0");
+    mWlanIndicatorIsActivated = false;
+    
+    OstTrace0(TRACE_FLOW, INDICATOROBSERVER_DEACTIVATEWLANINDICATORPLUGIN_EXIT, "<--");   
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/src/main.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -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:
+ * 
+ */
+
+#include "indicatorobserver.h"
+
+int main(int argc, char *argv[])
+{    
+    IndicatorObserver app(argc, argv);
+
+    return app.exec();
+}
+
+// End of File
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/indicatorobserver/traces/OstTraceDefinitions.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,22 @@
+/*
+ * 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:
+ * 
+ */
+
+
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+#include <opensystemtrace.h>
+#endif
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/ConfirmationQuery.h	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
-* Copyright (c) 2005 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:  Implementation of class CConfirmationQuery.
-*
-*/
-
-
-#ifndef __CONFIRMATION_QUERY_H__
-#define __CONFIRMATION_QUERY_H__
-
-// INCLUDES
-#include <aknmessagequerydialog.h>
-#include <ConnectionUiUtilities.h>
-#include "ExpiryTimerCallback.h"
-// FORWARD DECLARATIONS
-class CConfirmationQueryNotif;
-class CExpiryTimer;
-
-// CLASS DECLARATIONS
-
-/**
- * Class implements a query dialog.
- */
-NONSHARABLE_CLASS( CConfirmationQuery ) : public CAknListQueryDialog, public MExpiryTimerCallback
-    {
-    public:
-        /**
-        * Constructor the CConfirmationQuery class
-        * @param aNotif notifier pointer
-        * @param aNameOfConnMethod 
-        * @param aUIId    
-        * @return -
-        */
-        CConfirmationQuery( CConfirmationQueryNotif* aNotif );
-
-        /**
-        * Exit function the CConfirmationQuery
-        * @param aButtonId 
-        * @return TBool exit or no
-        */
-        virtual TBool OkToExitL( TInt aButtonId );
-    
-        /**
-        * Dialog expiration timeout callback
-        */
-        void HandleTimedOut();
-        
-        /**
-        * Destructor
-        */
-        virtual ~CConfirmationQuery();     
-
-        /**
-        * Tries to exit the dialog when the specified button is pressed, if this 
-        * button should exit the dialog.
-        *
-        * See @c OkToExitL() to determine which buttons can exit the dialog.
-        * 
-        * This will fail if user exit is prevented by the 
-        * @c EEikDialogFlagNoUserExit flag. If the @c EEikDialogFlagNotifyEsc flag
-        * is not set and the dialog has been cancelled it immediately deletes 
-        * itself.
-        * 
-        * @param aButtonId The id of the pressed button.
-        */
-        void TryExitL( TInt aButtonId );
-        
-        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, 
-                                     TEventCode aType);
-        
-        /**
-        * Sets the available choices for the query into the class variable
-        * @param    aChoices RArray<TInt>
-        */
-        void SetChoices( RArray<TMsgQueryLinkedResults> aChoices );
-
-    private:
-        /**
-        * PreLayoutDynInitL
-        * @param    -
-        */
-        virtual void PreLayoutDynInitL();    
-
-    private:
-        CConfirmationQueryNotif* iNotif;  // Pointer to the Notifier, not owned
-        TBool iButtonGroupPreviouslyChanged;    // Was ButtonGroup modified?
-        
-        RArray<TMsgQueryLinkedResults> iChoiceIds;
-        // For base class, unused.
-        TInt iDummy;
-		
-        // Pointer for dialog expiration timer
-        CExpiryTimer* iExpiryTimer;
-    };
-
-
-#endif  // __CONFIRMATION_QUERY_H__
-
-// End of File
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/ConfirmationQueryNotif.h	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Declaration of CConfirmationQueryNotif
-*
-*/
-
-
-
-#ifndef __CONFIRMATIONQUERYNOTIF_H__
-#define __CONFIRMATIONQUERYNOTIF_H__
-
-
-// INCLUDES
-#include "ConnectionDialogsNotifBase.h"
-#include "ConnectionUiUtilitiesCommon.h"
-#include <etel3rdparty.h>
-#include <ConnectionUiUtilities.h>
-#include <e32base.h>
-
-// FORWARD DECLARATIONS
-class CConfirmationQuery;
-class CRoamingInfo;
-
-/**
- * OfflineWlanNoteNotif class
- */
-NONSHARABLE_CLASS( CConfirmationQueryNotif ) 
-                                        : public CConnectionDialogsNotifBase
-    {
-    public:
-    
-        /**
-        * Constructor.
-        */
-        CConfirmationQueryNotif();
-
-        /**
-        * NewL function
-        * @param  -
-        * return CConfirmationQueryNotif*
-        */
-        static CConfirmationQueryNotif* NewL( 
-                                        const TBool aResourceFileResponsible );
-
-        /**
-         * ~CConfirmationQueryNotif() destructor
-         * @param  -
-         * return  -
-         */
-         virtual ~CConfirmationQueryNotif();
-                
-        /**
-        * RegisterL register the client notifier function
-        * @param  -
-        * return TNotifierInfo
-        */
-        TNotifierInfo RegisterL();
-
-        /**
-        * Start the Notifier
-        * @param  aBuffer    Buffer
-        * @param  aReplySlot Identifies which message argument to use for the 
-        *                    reply. This message argument will refer to a 
-        *                    modifiable descriptor, a TDes8 type, into which
-        *                    data can be returned. 
-        * @param  aMessage   Message
-        * return -
-        */
-        void StartL( const TDesC8& aBuffer, TInt aReplySlot, 
-                     const RMessagePtr2& aMessage );
-
-        /**
-        * Cancel() the notifier
-        * @param  -
-        * return -
-        */
-        void Cancel();
-
-
-    public:
-
-        /**
-        * CompleteL the notifier is complete
-        * @param  aStatus status
-        * return  -
-        */
-        void CompleteL( TInt aStatus );
-
-        /**
-        * Sets the selected choise
-        * @param  aChoice TInt 
-        * return  -
-        */
-        void SetSelectedChoiceL ( TInt aChoice );
-
-        void SetVisitorNetwork();
-      
-    private:
-        
-        /**
-         * Callback is called to launch dialog asynchronously
-         * @param  aObject Pointer to notifier object.
-         * return  Error code
-         */  
-        static TInt LaunchDialogL( TAny* aObject );
-        
-    private:
-        TBool iTryNextBest;
-        TUint32 iConnMethod;
-        CConfirmationQuery* iDialog;   // Pointer to the dialog
-        TBool iIsVisitorNetwork;
-        TMsgQueryLinkedResults iChoice;
-        TConnUiUiDestConnMethodNoteId iNoteInfo;
-        CAsyncCallBack *iLaunchDialogAsync; // One shot active object
-    };
-
-#endif // __CONFIRMATIONQUERYNOTIF_H__
-
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/cellulardataconfirmation.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* 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: Prompt Dialog implementation
+*
+*/
+
+#ifndef __CELLULARDATACONFIRMATION_H__
+#define __CELLULARDATACONFIRMATION_H__
+
+#include <e32base.h>
+#include <ConnectionUiUtilities.h>
+#include <hb/hbcore/hbsymbiandevicedialog.h>
+#include "ConnectionDialogsNotifBase.h"
+#include "ConnectionUiUtilitiesCommon.h"
+
+class CDeviceDialogObserver;
+
+
+NONSHARABLE_CLASS ( CCellularDataConfirmation ) : public CConnectionDialogsNotifBase
+    {
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CCellularDataConfirmation* NewL( 
+                                const TBool aResourceFileResponsible );
+        
+        /**
+        * Destructor
+        */
+        ~CCellularDataConfirmation();
+        
+        /**
+        * Start the Notifier
+        * @param  aBuffer    Buffer
+        * @param  aReplySlot Identifies which message argument to use for the 
+        *                    reply. This message argument will refer to a 
+        *                    modifiable descriptor, a TDes8 type, into which
+        *                    data can be returned. 
+        * @param  aMessage   Message
+        * return -
+        */
+        void StartL( const TDesC8& aBuffer, 
+                    TInt aReplySlot, 
+                    const RMessagePtr2& aMessage );
+        
+        /**
+        * Cancel() the notifier
+        * @param  -
+        * return -
+        */
+        void Cancel();
+        
+        /**
+        * RegisterL register the client notifier function
+        * @param  -
+        * return TNotifierInfo
+        */
+        TNotifierInfo RegisterL();
+        
+        /**
+        * CompleteL the notifier is complete
+        * @param  aStatus status
+        * return  -
+        */
+        void CompleteL( TInt aStatus );
+        /**
+        * Sets the selected choice of the presented dialog
+        * @param  aChoice TInt 
+        * return  -
+        */
+        void SetSelectedChoice( TInt aChoice );
+       
+    private:
+        /**
+        * Constructor
+        */
+        CCellularDataConfirmation();
+    
+    private:
+        /** Pointer to the device dialog interface for handling the dialog */
+        CHbDeviceDialog* iDialog;
+        /** The observer to handle the data received from the orbit dialog */
+        CDeviceDialogObserver* iObserver;
+        /* The choice selected by the user from the dialog */
+        TMsgQueryLinkedResults iChoice;
+        /* Information if request was already completed, in case the
+         * observer receives the data signal and the signal about closing the
+         * dialog.
+         */
+        TBool iCompleted;
+        
+    
+    };
+
+#endif //__CELLULARDATACONFIRMATION_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifInc/devicedialogobserver.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* 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: Prompt Dialog implementation
+*
+*/
+
+#ifndef __DEVICEDIALOGOBSERVER_H__
+#define __DEVICEDIALOGOBSERVER_H__
+
+#include "cellulardataconfirmation.h"
+
+NONSHARABLE_CLASS ( CDeviceDialogObserver ) : public CBase, public MHbDeviceDialogObserver
+    {
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CDeviceDialogObserver* NewL( CCellularDataConfirmation* aNotifier );
+        
+        /**
+        * Destructor
+        */
+        ~CDeviceDialogObserver();
+        
+        /**
+        * Handles the user input received from the dialog
+        * @param    aData CHbSymbianVariantMap&
+        */
+        void DataReceived(CHbSymbianVariantMap& aData);
+        
+        /**
+        * Handles the closing of the dialog
+        * @param    aCompletionCode TInt
+        */
+        void DeviceDialogClosed(TInt /*aCompletionCode*/);
+        /**
+        * Sets the available choices for the query into the class variable
+        * @param    aChoices RArray<TInt>
+        */
+        void SetChoices( RArray<TMsgQueryLinkedResults>& aChoices );
+    private:
+        /**
+        * Constructor
+        */
+        CDeviceDialogObserver( CCellularDataConfirmation* aNotifier );
+        
+    private:
+        /* Pointer to the object that triggered the dialog opening,
+         * needed to update the information about the user input.
+         */
+        CCellularDataConfirmation* iNotifier;
+        /* The order of the buttons in the dialog, in order to map the
+         * data received from the dialog into the actual selected choice.
+         */
+        RArray<TMsgQueryLinkedResults> iChoiceIds;
+    };
+
+#endif /* __DEVICEDIALOGOBSERVER_H__ */
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQuery.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Implementation of class CConfirmationQuery.
-*
-*/
-
-
-// INCLUDE FILES
-#include "ConfirmationQuery.h"
-#include "ConfirmationQueryNotif.h"
-#include "ConnectionUiUtilitiesCommon.h"
-#include "ConnectionDialogsLogger.h"
-#include "ExpiryTimer.h"
-
-#include <uikon/eiksrvui.h>
-#include <StringLoader.h>
-#include <ConnUiUtilsNotif.rsg>
-
-
-
-// CONSTANTS
-#if defined(_DEBUG)
-_LIT( KErrNullPointer, "NULL pointer" );
-#endif
-
-
-// ================= MEMBER FUNCTIONS =======================
-//
-// ---------------------------------------------------------
-// CConfirmationQuery::CConfirmationQuery
-// ---------------------------------------------------------
-//
-CConfirmationQuery::CConfirmationQuery( CConfirmationQueryNotif* aNotif )
-: CAknListQueryDialog( &iDummy ),
-  iNotif( aNotif ),
-  iButtonGroupPreviouslyChanged( EFalse )
-   {
-   }
-    
-    
-// ---------------------------------------------------------
-// CConfirmationQuery::~CConfirmationQuery
-// ---------------------------------------------------------
-//
-CConfirmationQuery::~CConfirmationQuery()
-    {
-    STATIC_CAST( CEikServAppUi*, 
-                 CCoeEnv::Static()->AppUi() )->SuppressAppSwitching( EFalse );
-    delete iExpiryTimer;
-    }
-
-
-
-// ---------------------------------------------------------
-// CConfirmationQuery::OkToExitL
-// ---------------------------------------------------------
-//
-TBool CConfirmationQuery::OkToExitL( TInt aButtonId )
-    {
-    CLOG_ENTERFN( "CConfirmationQuery::OkToExitL" );
-    TBool result( EFalse );
-    TInt status = KErrCancel;
-    if ( aButtonId == EAknSoftkeySelect || 
-         aButtonId == EAknSoftkeyDone || aButtonId == EAknSoftkeyOk )
-        {
-        iNotif->SetSelectedChoiceL( iChoiceIds[ListBox()->CurrentItemIndex()] );
-        result = ETrue;
-        status = KErrNone;
-        }
-    else if ( aButtonId == EAknSoftkeyCancel )
-        {
-        status = KErrCancel;
-        result = ETrue;
-        }
-
-    if ( result )
-        {
-        CLOG_WRITEF( _L( "aButtonId = %d" ), aButtonId );
-        __ASSERT_DEBUG( iNotif, User::Panic( KErrNullPointer, KErrNone ) );
-        iNotif->CompleteL( status );
-        }
-
-    CLOG_LEAVEFN( "CConfirmationQuery::OkToExitL" );
-
-    return result;  
-    }
-    
-    
-// ---------------------------------------------------------
-// CConfirmationQuery::PreLayoutDynInitL()
-// ---------------------------------------------------------
-//
-void CConfirmationQuery::PreLayoutDynInitL()
-    {      
-    CAknListQueryDialog::PreLayoutDynInitL();
-
-    STATIC_CAST( CEikServAppUi*, 
-                CCoeEnv::Static()->AppUi() )->SuppressAppSwitching( ETrue );
-
-    iExpiryTimer = CExpiryTimer::NewL( *this );
-    iExpiryTimer->Start();
-    }
-
-
-// ---------------------------------------------------------
-// CConfirmationQuery::TryExitL()
-// ---------------------------------------------------------
-//
-void CConfirmationQuery::TryExitL( TInt aButtonId )
-    {
-    CLOG_ENTERFN( "CConfirmationQuery::TryExitL" );
-    CAknListQueryDialog::TryExitL( aButtonId );
-    CLOG_LEAVEFN( "CConfirmationQuery::TryExitL" );
-    }
-
-// ---------------------------------------------------------
-// CConfirmationQuery::OfferKeyEventL
-// ---------------------------------------------------------
-//
-TKeyResponse CConfirmationQuery::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
-                                                 TEventCode aType)
-    {
-    if( aType == EEventKey && aKeyEvent.iCode == EKeyPhoneSend )
-        {
-        // Let's not obscure the Dialer in the background
-        if ( iExpiryTimer )
-            {
-            iExpiryTimer->Cancel();
-            iExpiryTimer->StartShort();    
-            }
-        }
-    
-    return CAknListQueryDialog::OfferKeyEventL( aKeyEvent,aType ); 
-    } 
-
-// ---------------------------------------------------------
-// CConfirmationQuery::SetChoices
-// ---------------------------------------------------------
-//
-void CConfirmationQuery::SetChoices( RArray<TMsgQueryLinkedResults> aChoices )
-    {
-    iChoiceIds = aChoices;
-    }
-
-void CConfirmationQuery::HandleTimedOut()
-    {
-    TRAP_IGNORE( TryExitL(EAknSoftkeyCancel) );
-    }
-
-
-// End of File
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConfirmationQueryNotif.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,256 +0,0 @@
-/*
-* Copyright (c) 2005 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:  Implementation of CConfirmationQueryNotif.
-*
-*/
-
-
-// INCLUDE FILES
-#include "ConfirmationQueryNotif.h"
-#include "ConfirmationQuery.h"
-#include "ConnectionUiUtilitiesCommon.h"
-#include "ConnUiUtilsNotif.h"
-#include "ConnectionDialogsLogger.h"
-
-#include <ConnUiUtilsNotif.rsg>
-#include <StringLoader.h>
-
-#include <cmmanager.h>
-#include <cmmanagerext.h>
-#include <cmconnectionmethod.h>
-#include <cmdestination.h>
-#include <ConnectionUiUtilities.h>
-#include <datamobilitycommsdattypes.h>
-
-
-using namespace CMManager;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CConfirmationQueryNotif::CConfirmationQueryNotif()
-// ---------------------------------------------------------
-//
-CConfirmationQueryNotif::CConfirmationQueryNotif()
-: iConnMethod( 0 ), 
-  iChoice( EMsgQueryCancelled )
-    {
-    }
-
-
-// ---------------------------------------------------------
-// CConfirmationQueryNotif* CConfirmationQueryNotif::NewL()
-// ---------------------------------------------------------
-//
-CConfirmationQueryNotif* CConfirmationQueryNotif::NewL( 
-                                        const TBool aResourceFileResponsible )
-    {
-    CConfirmationQueryNotif* self = new ( ELeave ) CConfirmationQueryNotif();
-    CleanupStack::PushL( self );
-    self->ConstructL( KResourceFileName, aResourceFileResponsible );
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-
-// ---------------------------------------------------------
-// CConfirmationQueryNotif::~CConfirmationQueryNotif()
-// ---------------------------------------------------------
-//
-CConfirmationQueryNotif::~CConfirmationQueryNotif()
-    {   
-    if ( iLaunchDialogAsync )
-        {
-        delete iLaunchDialogAsync;
-        iLaunchDialogAsync = NULL;
-        }
-    }
-
-// ---------------------------------------------------------
-// CConfirmationQueryNotif::RegisterL()
-// ---------------------------------------------------------
-//
-CConfirmationQueryNotif::TNotifierInfo CConfirmationQueryNotif::RegisterL()
-    {
-    iInfo.iUid = KUidConfirmationQuery;
-    iInfo.iPriority = ENotifierPriorityHigh;
-    iInfo.iChannel = KUidConfirmationQuery;
-
-    return iInfo;
-    }
-
-// ---------------------------------------------------------
-// void CConfirmationQueryNotif::StartL
-// ---------------------------------------------------------
-//
-void CConfirmationQueryNotif::StartL( const TDesC8& aBuffer, 
-                                    TInt aReplySlot,
-                                    const RMessagePtr2& aMessage )
-    {
-    if ( iLaunchDialogAsync )
-        {
-        if ( iLaunchDialogAsync->IsActive() )
-           {
-           // Dialog is already active
-           aMessage.Complete( KErrServerBusy );
-           return;
-           }    
-        }
-    
-    iChoice = EMsgQueryCancelled; 
-    TPckgBuf<TConnUiUiDestConnMethodNoteId> input;
-    input.Copy( aBuffer );
-    iNoteInfo = input();
-    
-    iReplySlot = aReplySlot;
-    iMessage = aMessage;
-    iCancelled = EFalse;
-    
-    TCallBack cb( LaunchDialogL, this );
-    
-    if ( !iLaunchDialogAsync )
-        {
-        iLaunchDialogAsync = new( ELeave ) CAsyncCallBack( cb, CActive::EPriorityHigh );    
-        }
-    
-    iLaunchDialogAsync->CallBack();
-    }
-
-
-// ---------------------------------------------------------
-// void CConfirmationQueryNotif::Cancel()
-// ---------------------------------------------------------
-//
-void CConfirmationQueryNotif::Cancel()
-    {
-    CLOG_ENTERFN( "CConfirmationQueryNotif::Cancel" );
-    if ( !iCancelled )
-        {
-        iCancelled = ETrue;
-        if ( !iMessage.IsNull() )
-            {
-            iMessage.Complete( KErrCancel );
-            }
-        
-        delete iDialog;
-        iDialog = NULL;
-        }
-    
-    CLOG_LEAVEFN( "CConfirmationQueryNotif::Cancel" );
-    }
-
-
-// ---------------------------------------------------------
-// void CConfirmationQueryNotif::CompleteL( TInt aStatus )
-// ---------------------------------------------------------
-//
-void CConfirmationQueryNotif::CompleteL( TInt aStatus )
-    {  
-    CLOG_ENTERFN( "CConfirmationQueryNotif::CompleteL" );
-    iCancelled = ETrue;   
-    if ( !iMessage.IsNull() )
-        {  
-        if ( aStatus == KErrNone )
-            {
-            iMessage.WriteL( iReplySlot, TPckg<TMsgQueryLinkedResults>( iChoice ) );
-            }
-        iMessage.Complete( aStatus );
-        }
-      
-    Cancel();
-    
-    CLOG_LEAVEFN( "CConfirmationQueryNotif::CompleteL" );
-    }
-
-// ---------------------------------------------------------------
-// void CConfirmationQueryNotif::SetSelectedChoiceL( TInt aChoice )
-// ----------------------------------------------------------------
-//
-void CConfirmationQueryNotif::SetSelectedChoiceL ( TInt aChoice )
-    {
-    CLOG_ENTERFN( "CConfirmationQueryNotif::SetSelectedChoiceL" );
-    iChoice = (TMsgQueryLinkedResults)aChoice;
-    CLOG_LEAVEFN( "CConfirmationQueryNotif::SetSelectedChoiceL" );
-    }
-
-// ---------------------------------------------------------
-// TInt CConfirmationQueryNotif::LaunchDialogL()
-// ---------------------------------------------------------
-//
-TInt CConfirmationQueryNotif::LaunchDialogL( TAny* aObject )
-    {
-    CLOG_ENTERFN( "CCConfirmationQueryNotif::LaunchDialogL" );
-    CConfirmationQueryNotif* myself =
-                            static_cast<CConfirmationQueryNotif*>( aObject );
-    
-    myself->iDialog = new ( ELeave ) CConfirmationQuery( myself );
-    myself->iDialog->PrepareLC( R_MESSAGE_QUERY );
-                            
-    // Create the list box items
-    RArray<TMsgQueryLinkedResults> choices;
-    CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat(2);
-    CleanupStack::PushL( array );
-    HBufC* heading = NULL;
-    HBufC* messageBase = NULL;
-    HBufC* automatic = NULL;
-    HBufC* thisTime = NULL;
-
-    automatic = StringLoader::LoadLC( R_QTN_OCC_LIST_CS_DATA_HOME_NW_AUTOMATIC );
-    thisTime = StringLoader::LoadLC( R_QTN_OCC_LIST_CS_DATA_HOME_NW_THIS_TIME );
-                                
-    if ( myself->iNoteInfo.iNoteId == EConfirmMethodUsageQueryInHomeNetwork ) 
-        {
-        heading = StringLoader::LoadLC( R_QTN_OCC_PRMPT_CS_DATA_HOME_NW );
-        messageBase = StringLoader::LoadLC( R_QTN_OCC_DETAIL_CS_DATA_HOME_NW );
-        // the order of the query options depends on the location
-        choices.Append(EMsgQueryAutomatically);
-        choices.Append(EMsgQueryThisTime);
-        array->AppendL( *automatic );
-        array->AppendL( *thisTime );
-        } 
-    else 
-        {
-        heading = StringLoader::LoadLC( R_QTN_OCC_PRMPT_CS_DATA_FOREIGN_NW );
-        messageBase = StringLoader::LoadLC( R_QTN_OCC_DETAIL_CS_DATA_FOREIGN_NW );
-        // the order of the query options depends on the location
-        choices.Append(EMsgQueryThisTime);
-        choices.Append(EMsgQueryAutomatically);
-        array->AppendL( *thisTime );
-        array->AppendL( *automatic );
-        }              
-
-    // Set the dialog heading and message text
-    myself->iDialog->Heading()->SetTextL(*heading);
-    myself->iDialog->MessageBox()->SetMessageTextL(messageBase);
-    CleanupStack::PopAndDestroy( messageBase );
-    CleanupStack::PopAndDestroy( heading );
-                            
-    // Set the options to the listbox
-    myself->iDialog->SetChoices(choices);
-
-    myself->iDialog->SetItemTextArray( array );
-    myself->iDialog->SetOwnershipType(ELbmOwnsItemArray); // ownership transferred to listbox
-    myself->iDialog->ListBox()->HandleItemAdditionL();
-                            
-    CleanupStack::Pop( thisTime );
-    CleanupStack::Pop( automatic );
-    CleanupStack::Pop( array );
-    myself->iDialog->RunLD();
-                                 
-    CLOG_LEAVEFN( "CConfirmationQueryNotif::LaunchDialogL" );
-    return 0;   
-    }
-
-// End of File
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConnUiUtilsNotif.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ConnUiUtilsNotif.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -26,13 +26,13 @@
 #include "EasyWepDlgNotif.h"
 #include "EasyWpaDlgNotif.h"
 #include "WLANNetworkUnavailableNoteNotif.h"
-#include "ConfirmationQueryNotif.h"
 #include "ConnectViaNoteNotif.h"
 #include "wlanpowersavetestnotif.h"
 #include "easywapidlgnotif.h"
 #include "nowlannetworksavailablenotif.h"
 #include "connectingviadiscreetpopupnotif.h"
 #include "connectionerrordiscreetpopupnotif.h"
+#include "cellulardataconfirmation.h"
 
 // CONSTANTS
 
@@ -114,7 +114,7 @@
     aNotifiers->AppendL( serNotify );
     CleanupStack::Pop( serNotify );      
 
-    serNotify = CConfirmationQueryNotif::NewL( resourceFileResponsible );
+    serNotify = CCellularDataConfirmation::NewL( resourceFileResponsible );
     CleanupStack::PushL( serNotify );
     aNotifiers->AppendL( serNotify );
     CleanupStack::Pop( serNotify );     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/cellulardataconfirmation.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,198 @@
+/*
+* 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: Prompt Dialog implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <ConnUiUtilsNotif.rsg>
+#include <hb/hbcore/hbsymbianvariant.h>
+#include "ConnectionDialogsLogger.h"
+#include "cellulardataconfirmation.h"
+#include "ConnectionDialogsNotifBase.h"
+#include "ConnectionDialogsUidDefs.h"
+#include "ConnUiUtilsNotif.h"
+#include "devicedialogobserver.h"
+
+
+// CONSTANTS
+const TInt KVariableLength = 30;
+_LIT( KHomenetwork, "homenetwork");
+_LIT(KType, "com.nokia.ipconnmgmt.promptdialog/1.0");
+
+// ---------------------------------------------------------
+// CCellularDataConfirmation::CCellularDataConfirmation()
+// ---------------------------------------------------------
+//
+CCellularDataConfirmation::CCellularDataConfirmation()
+    {
+    iCompleted = EFalse;
+    iChoice = EMsgQueryCancelled;
+    iObserver = NULL;
+    iDialog = NULL;
+    }
+
+// ---------------------------------------------------------
+// CCellularDataConfirmation::~CCellularDataConfirmation()
+// ---------------------------------------------------------
+//
+CCellularDataConfirmation::~CCellularDataConfirmation()
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::~CCellularDataConfirmation" );
+    delete iDialog;
+    delete iObserver;
+    CLOG_LEAVEFN( "CCellularDataConfirmation::~CCellularDataConfirmation" );
+    }
+
+// ---------------------------------------------------------
+// CCellularDataConfirmation* CCellularDataConfirmation::NewL
+// ---------------------------------------------------------
+//
+CCellularDataConfirmation* CCellularDataConfirmation::NewL( 
+                                        const TBool aResourceFileResponsible )
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::NewL" );
+    CCellularDataConfirmation* self = new ( ELeave ) CCellularDataConfirmation();
+    CleanupStack::PushL( self );
+    self->ConstructL( KResourceFileName, aResourceFileResponsible );
+    CleanupStack::Pop();
+    CLOG_LEAVEFN( "CCellularDataConfirmation::NewL" );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// void CCellularDataConfirmation::StartL
+// ---------------------------------------------------------
+//
+void CCellularDataConfirmation::StartL( const TDesC8& aBuffer, 
+                                        TInt aReplySlot, 
+                                        const RMessagePtr2& aMessage )
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::StartL" );
+    iChoice = EMsgQueryCancelled; 
+    TPckgBuf<TConnUiUiDestConnMethodNoteId> input;
+    TConnUiUiDestConnMethodNoteId noteInfo;
+    input.Copy( aBuffer );
+    noteInfo = input();   
+    iReplySlot = aReplySlot;
+    iMessage = aMessage;
+    
+    // Create the list box items
+    RArray<TMsgQueryLinkedResults> choices;           
+    
+    // Observer is needed in order to get the user inputs
+    iObserver = CDeviceDialogObserver::NewL( this );
+    iDialog = CHbDeviceDialog::NewL();
+    
+    // The variant map is needed to construct the dialog correctly,
+    // information whether we are in home network is needed
+    TBuf<KVariableLength> key(KHomenetwork);
+    TBool homeNetwork;
+    if ( noteInfo.iNoteId == EConfirmMethodUsageQueryInHomeNetwork ) 
+        {
+        homeNetwork = ETrue;
+        choices.Append(EMsgQueryAutomatically);
+        choices.Append(EMsgQueryThisTime);
+        choices.Append(EMsgQueryCancelled);
+        }
+    else
+        {
+        homeNetwork = EFalse;
+        choices.Append(EMsgQueryThisTime);
+        choices.Append(EMsgQueryAutomatically);
+        choices.Append(EMsgQueryCancelled);
+        }
+    // Set the choice order for the observer so that it knows which button press
+    // means which choice
+    iObserver->SetChoices(choices);
+    
+    // Create the variant data information for the plugin
+    CHbSymbianVariantMap* map = CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL( map );
+    CHbSymbianVariant *variant =  CHbSymbianVariant::NewL ( &homeNetwork, CHbSymbianVariant::EBool );
+    CleanupStack::PushL( variant );
+    TInt error = map->Add( key, variant);
+    User::LeaveIfError( error );
+    CleanupStack::Pop( variant ); // map's cleanup sequence handles variant.
+    
+    // Show the dialog.
+    error = iDialog->Show( KType, *map, iObserver );
+    User::LeaveIfError( error );
+    CleanupStack::PopAndDestroy( map ); 
+    CLOG_LEAVEFN( "CCellularDataConfirmation::StartL" );
+    }
+
+// ---------------------------------------------------------
+// void CConfirmationQueryNotif::CompleteL( TInt aStatus )
+// ---------------------------------------------------------
+//
+void CCellularDataConfirmation::CompleteL( TInt aStatus )
+    {   
+    CLOG_ENTERFN( "CCellularDataConfirmation::CompleteL" );
+    if ( !iCompleted )
+        {
+        if ( !iMessage.IsNull() )
+            {  
+            iMessage.WriteL( iReplySlot, TPckg<TMsgQueryLinkedResults>( iChoice ) );
+            iMessage.Complete( aStatus );
+            iCompleted = ETrue;
+            } 
+        }
+    CLOG_LEAVEFN( "CCellularDataConfirmation::CompleteL" );
+    }
+
+// ---------------------------------------------------------------
+// void CConfirmationQueryNotif::SetSelectedChoiceL( TInt aChoice )
+// ----------------------------------------------------------------
+//
+void CCellularDataConfirmation::SetSelectedChoice ( TInt aChoice )
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::SetSelectedChoice" );
+    iChoice = (TMsgQueryLinkedResults)aChoice;
+    CLOG_LEAVEFN( "CCellularDataConfirmation::SetSelectedChoice" );
+    }
+
+// ---------------------------------------------------------------
+// void CCellularDataConfirmation::Cancel()
+// ----------------------------------------------------------------
+//
+void CCellularDataConfirmation::Cancel()
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::Cancel" );
+    if ( !iCompleted )
+        {
+        iDialog->Cancel(); 
+        TRAP_IGNORE( iMessage.WriteL( iReplySlot, 
+            TPckg<TMsgQueryLinkedResults>( EMsgQueryCancelled ) ));
+        iMessage.Complete( KErrCancel ); 
+        }
+    CLOG_LEAVEFN( "CCellularDataConfirmation::Cancel" );
+    }
+
+// ---------------------------------------------------------------
+// CCellularDataConfirmation::TNotifierInfo 
+// CCellularDataConfirmation::RegisterL()
+// ----------------------------------------------------------------
+//
+CCellularDataConfirmation::TNotifierInfo CCellularDataConfirmation::RegisterL()
+    {
+    CLOG_ENTERFN( "CCellularDataConfirmation::RegisterL" );
+    iInfo.iUid = KUidConfirmationQuery;
+    iInfo.iPriority = ENotifierPriorityHigh;
+    iInfo.iChannel = KUidConfirmationQuery;
+    CLOG_LEAVEFN( "CCellularDataConfirmation::RegisterL" );
+    return iInfo;
+    }
--- a/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/connectionerrordiscreetpopup.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/connectionerrordiscreetpopup.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -299,6 +299,8 @@
 
         // Group 8
         case KErrPermissionDenied:
+            icon = EIconNone;  // Permission denied may come with any bearer.
+        // Fall through
         case KErrWlanPasswordExpired:
         case KErrWlanNoDialinPermissions:
         case KErrWlanAccountDisabled:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/devicedialogobserver.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,90 @@
+/*
+* 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: Prompt Dialog implementation
+*
+*/
+
+#include <hb/hbcore/hbsymbianvariant.h>
+#include "devicedialogobserver.h"
+
+_LIT(KButton, "button");
+
+// ---------------------------------------------------------
+// CDeviceDialogObserver* CDeviceDialogObserver::NewL
+// ---------------------------------------------------------
+//
+CDeviceDialogObserver* CDeviceDialogObserver::NewL( CCellularDataConfirmation* aNotifier )
+    {
+    CDeviceDialogObserver* self = new ( ELeave ) CDeviceDialogObserver( aNotifier );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CDeviceDialogObserver::CDeviceDialogObserver
+// ---------------------------------------------------------
+//
+CDeviceDialogObserver::CDeviceDialogObserver( CCellularDataConfirmation* aNotifier ): 
+    iNotifier( aNotifier )
+    {
+    
+    }
+
+// ---------------------------------------------------------
+// CDeviceDialogObserver::~CDeviceDialogObserver()
+// ---------------------------------------------------------
+//
+CDeviceDialogObserver::~CDeviceDialogObserver()
+    {
+    
+    }
+
+// ---------------------------------------------------------
+// void CConfirmationQuery::SetChoices
+// ---------------------------------------------------------
+//
+void CDeviceDialogObserver::SetChoices( RArray<TMsgQueryLinkedResults>& aChoices )
+    {
+    iChoiceIds = aChoices;
+    }
+
+// ---------------------------------------------------------
+// void CDeviceDialogObserver::DataReceived
+// ---------------------------------------------------------
+//
+void CDeviceDialogObserver::DataReceived( CHbSymbianVariantMap& aData )
+{
+    // The key that is returned by the promptdialog is "button",
+    // meaning the id of the pressed button.
+    TInt intData = *(TInt*)(aData.Get(KButton)->Data());
+    
+    TInt status = KErrNone;
+    
+    iNotifier->SetSelectedChoice( iChoiceIds[intData-1] );
+    TRAP_IGNORE( iNotifier->CompleteL( status ));
+
+}
+
+// ---------------------------------------------------------
+// void CDeviceDialogObserver::DeviceDialogClosed
+// ---------------------------------------------------------
+//
+void CDeviceDialogObserver::DeviceDialogClosed( TInt /*aCompletionCode*/ )
+{
+    // Dialog was closed, let's complete with that error code
+    TInt status = KErrCancel;
+    iNotifier->SetSelectedChoice( EMsgQueryCancelled );
+    TRAP_IGNORE( iNotifier->CompleteL( status ));
+}
+
+
--- a/connectionutilities/ConnectionDialogs/group/ConnUiUtilsNotif.mmp	Tue Feb 02 00:24:11 2010 +0200
+++ b/connectionutilities/ConnectionDialogs/group/ConnUiUtilsNotif.mmp	Fri Apr 16 15:21:37 2010 +0300
@@ -65,8 +65,6 @@
 SOURCE      WLANNetworkUnavailableNoteNotif.cpp
 SOURCE      ActiveWLANNetworkUnavailableNote.cpp
 
-SOURCE      ConfirmationQuery.cpp
-SOURCE      ConfirmationQueryNotif.cpp
 SOURCE      ActiveConnectViaNote.cpp
 SOURCE      ConnectViaNoteNotif.cpp
 SOURCE      NoteDlgSuppressingSwitch.cpp
@@ -79,6 +77,8 @@
 SOURCE      connectionerrordiscreetpopup.cpp
 SOURCE      connectionerrordiscreetpopupnotif.cpp
 SOURCE      nowlansdiscreetpopup.cpp
+SOURCE      cellulardataconfirmation.cpp 
+SOURCE      devicedialogobserver.cpp
 
 SOURCEPATH  ../src
 SOURCE      ConnectionInfo.cpp
@@ -100,10 +100,9 @@
 SYSTEMINCLUDE   /epoc32/include/libc 
 SYSTEMINCLUDE   /epoc32/include/uikon
 
-
 LIBRARY     euser.lib eikdlg.lib eiksrv.lib cone.lib eikcore.lib eikcoctl.lib
 LIBRARY     bafl.lib avkon.lib AknSkins.lib Ecom.lib 
-LIBRARY		eiksrvui.lib
+LIBRARY     eiksrvui.lib
 LIBRARY     commonengine.lib
 LIBRARY     AKNNOTIFY.LIB
 LIBRARY     AknIcon.lib
@@ -115,8 +114,10 @@
 LIBRARY     charconv.lib
 
 LIBRARY     commdb.lib
-LIBRARY		  cmmanager.lib
+LIBRARY     cmmanager.lib
 LIBRARY     etel3rdparty.lib 
+LIBRARY     HbCore.lib
+LIBRARY     HbWidgets.lib
 
 #if defined(ARMCC)
     DEFFILE ../ConnectionUiUtilities/EABI/ConnUiUtilsNotif.DEF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/confirmqueries.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,48 @@
+#
+# 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: Prompt Dialog build file
+#
+#
+
+TEMPLATE = lib
+TARGET = cellularpromptdialogplugin
+CONFIG += hb plugin
+
+# directories
+INCLUDEPATH += .
+DEPENDPATH += .
+DESTDIR = $${HB_BUILD_DIR}/plugins/devicedialogs
+
+
+HEADERS += inc/cellularpromptdialog.h  \
+           inc/cellularpromptdialogplugin.h \
+           traces/OstTraceDefinitions.h
+
+SOURCES += src/cellularpromptdialog.cpp \
+           src/cellularpromptdialogplugin.cpp
+
+symbian: {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002C2F7
+    BLD_INF_RULES.prj_exports += "rom/promptdialogplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(promptdialogplugin.iby)"
+    BLD_INF_RULES.prj_exports += "rom/promptdialogplugin_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(promptdialogplugin_resources.iby)"
+
+    pluginstub.sources = cellularpromptdialogplugin.dll
+    pluginstub.path = /resource/plugins/devicedialogs
+    DEPLOYMENT += pluginstub
+}
+TRANSLATIONS = cellularpromptdialog.ts
+
+RESOURCES += res/promptdialog.qrc
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/inc/cellularpromptdialog.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* 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: 
+*
+*/
+
+
+#ifndef __CELLULARPROMPTDIALOG_H__
+#define __CELLULARPROMPTDIALOG_H__
+
+#include <QObject>
+#include <HbDialog>
+#include <hbdevicedialoginterface.h>
+
+class CellularPromptDialog: public HbDialog, public HbDeviceDialogInterface
+    {
+    Q_OBJECT
+
+    public:
+        /* Constructor */
+        CellularPromptDialog(const QVariantMap &parameters);
+        /* Destructor */
+        ~CellularPromptDialog();
+        
+        /* Function creates the actual dialog widget */
+        void createDialog(const QVariantMap &parameters);
+        
+        /* Device dialog parameters to be set while dialog is displayed.
+         * Not supported.
+         */
+        bool setDeviceDialogParameters(const QVariantMap &parameters);
+        
+        /* Not supported */
+        int deviceDialogError() const;
+        
+        /* Closes the device dialog */
+        void closeDeviceDialog(bool byClient);
+        
+        /* Returns a pointer to this dialog widget */
+        HbPopup *deviceDialogWidget() const;
+        
+    signals:
+        /* Signal is emitted when the dialog is closed */
+        void deviceDialogClosed();
+    
+        /* Data is emitted in QVariantMap when one of the buttons is selected */
+        void deviceDialogData(QVariantMap data);
+        
+    private slots:
+        /* Slot that is mapped to the first button's Clicked signal */
+        void firstButtonPressed();
+        
+        /* Slot that is mapped to the second button's Clicked signal */
+        void middleButtonPressed();
+        
+        /* Slot that is mapped to the cancel button's Clicked signal */
+        void cancelPressed();
+        
+        /* Slot that is mapped to the signal that indicates to closing of the dialog */
+        void closingDialog();
+        
+    private:
+        Q_DISABLE_COPY(CellularPromptDialog)
+   
+    private:
+        /* Pointer to the confml dialog object */
+        HbDialog *mDialog;
+        
+        /* Tells whether close has already been called for the dialog */
+        bool mClose;
+    };
+
+
+#endif // __CELLULARPROMPTDIALOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/inc/cellularpromptdialogplugin.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* 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: 
+*
+*/
+
+
+#ifndef ____CELLULARPROMPTDIALOG_H__PLUGIN_H__
+#define ____CELLULARPROMPTDIALOG_H__PLUGIN_H__
+
+#include <QObject>
+#include <hbdevicedialogplugin.h>
+
+class CellularPromptDialog;
+
+class CellularPromptDialogPlugin : public HbDeviceDialogPlugin
+{
+    Q_OBJECT
+
+public:
+    
+    /* Constructor */
+    CellularPromptDialogPlugin();
+    /* Destructor */
+    ~CellularPromptDialogPlugin();
+    
+    /* Check whether access is allowed, true is always returned */
+    bool accessAllowed(const QString &deviceDialogType,
+        const QVariantMap &parameters, const QVariantMap &securityInfo) const;
+    
+    /* Creates the dialog widget */
+    HbDeviceDialogInterface *createDeviceDialog(const QString &deviceDialogType,
+        const QVariantMap &parameters);
+    
+    /* Returns the device dialog type */
+    bool deviceDialogInfo(const QString &deviceDialogType,
+        const QVariantMap &parameters, DeviceDialogInfo *info) const;
+    
+    /* Returns a list of dialog types that this plugin implements.
+     * Only one dialog type is supported.
+     */
+    QStringList deviceDialogTypes() const;
+    
+    /* Returns the possible plugin flags, there are none */
+    PluginFlags pluginFlags() const;
+    
+    /* Not supported */
+    int error() const;
+
+private:
+    Q_DISABLE_COPY(CellularPromptDialogPlugin)
+
+};
+
+#endif // ___CELLULARPROMPTDIALOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/res/promptdialog.qrc	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,6 @@
+<RCC>
+    <qresource prefix="/xml" >
+        <file>prompt_home.docml</file>
+        <file>prompt_abroad.docml</file>
+    </qresource>
+</RCC>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/rom/promptdialogplugin.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,28 @@
+/*
+ * 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:
+ * 
+ */
+ 
+#ifndef __PROMPTDIALOGPLUGIN_IBY__
+#define __PROMPTDIALOGPLUGIN_IBY__
+
+#include <bldvariant.hrh>
+
+#define HB_PLUGIN_STUB(NAME, SUBDIR) data=\epoc32\data\z\resource\plugins\##SUBDIR##\##NAME##.qtplugin RESOURCE_FILES_DIR\plugins\##SUBDIR##\##NAME##.qtplugin
+
+file=ABI_DIR\BUILD_DIR\CellularPromptDialogPlugin.dll                  SHARED_LIB_DIR\cellularpromptdialogplugin.dll
+HB_PLUGIN_STUB(cellularpromptdialogplugin, devicedialogs)
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/rom/promptdialogplugin_resources.iby	Fri Apr 16 15:21:37 2010 +0300
@@ -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 "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 PROMPTDIALOGPLUGIN_RESOURCES_IBY
+#define PROMPTDIALOGPLUGIN_RESOURCES_IBY
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_for_iby.hrh> 
+
+data=DATAZ_/QT_TRANSLATIONS_DIR/cellularpromptdialog.qm QT_TRANSLATIONS_DIR/cellularpromptdialog.qm 
+
+#endif // PROMPTDIALOGPLUGIN_RESOURCES_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/src/cellularpromptdialog.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,300 @@
+/*
+* 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: Prompt Dialog implementation
+*
+*/
+
+#include <QTranslator>
+#include <QLocale>
+#include <QList>
+#include <HbLabel>
+#include <HbDialog>
+#include <HbDocumentLoader>
+#include <HbPushButton>
+#include <HbView>
+#include <HbApplication>
+#include "cellularpromptdialog.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cellularpromptdialogTraces.h"
+#endif
+
+
+
+// The index numbers of the buttons of the dialog
+const int firstButtonIndex = 1;
+const int middleButtonIndex = 2;
+const int cancelButtonIndex = 3;
+
+/**
+ * The constructor
+ */
+CellularPromptDialog::CellularPromptDialog(const QVariantMap &parameters)
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CELLULARPROMPTDIALOG_ENTRY );
+
+    // Install localization
+    QTranslator *translator = new QTranslator(this);
+    QString lang = QLocale::system().name(); 
+    QString path = "Z:/resource/qt/translations/"; 
+    translator->load("cellularpromptdialog_" + lang, path);
+    qApp->installTranslator(translator);
+    
+    createDialog(parameters);
+    mClose = false;
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CELLULARPROMPTDIALOG_EXIT );
+}
+
+
+/**
+ * The construction of the dialog
+ */ 
+void CellularPromptDialog::createDialog(const QVariantMap &parameters)
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CREATEDIALOG_ENTRY );
+    
+    // Set the button and label texts according to the network (home or abroad)
+    QString labelText;
+    QString button1Text;
+    QString button2Text;
+    QString button3Text(hbTrId("txt_occ_button_cellular_cancel"));
+    
+    // There is only one value in the QVariantMap that we are interested in,
+    // whether we are in home network or not
+    QList<QVariant> list = parameters.values();
+    bool homeNetwork = true;
+    
+    if (list.count() > 0) {
+        homeNetwork = list[0].toBool();
+    }
+    
+    if (homeNetwork) {
+        labelText = QString(hbTrId("txt_occ_title_connect_to_internet_using_cellular_d"));
+        button1Text = QString(hbTrId("txt_occ_button_connect_automatically"));
+        button2Text = QString(hbTrId("txt_occ_button_connect_this_time"));
+    } else {
+        labelText = QString(hbTrId("txt_occ_title_connect_to_internet_in_this_country"));
+        button1Text = QString(hbTrId("txt_occ_button_connect_this_time"));
+    }
+    
+    HbDocumentLoader loader;
+    bool ok = true;
+
+    if (homeNetwork) {
+        loader.load(":/xml/prompt_home.docml", &ok);
+    } else {
+        loader.load(":/xml/prompt_abroad.docml", &ok);
+    }
+
+    if ( !ok ) {
+        // send information about cancelling to the observer, the xml loading failed
+        cancelPressed();
+        OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CREATEDIALOG_EXIT );
+        return;
+    }
+    
+    // store the pointer to the dialog in order to be able to delete
+    // it in the destructor
+    mDialog = qobject_cast<HbDialog*>( loader.findWidget ("dialog"));
+    Q_ASSERT(mDialog != NULL);
+    
+    // fetch the needed widgets, update their texts and connect the
+    // clicked signals of the buttons to correct slots.
+    HbWidget *container = qobject_cast<HbWidget*>( loader.findWidget ("container"));
+    this->setContentWidget(container);
+    
+    // Set the dialog to be on the screen for 30 seconds, unless
+    // the user reacts earlier
+    this->setModal(true);
+    this->setTimeout(30000);
+    this->setDismissPolicy(HbPopup::NoDismiss);
+    
+    HbLabel* label = qobject_cast<HbLabel*>( loader.findWidget("label") );
+    Q_ASSERT(label != NULL);
+    label->setPlainText(labelText);
+    label->setTextWrapping(Hb::TextWordWrap);
+
+    HbPushButton* firstButton = qobject_cast<HbPushButton*>( loader.findWidget("topButton") );
+    Q_ASSERT(firstButton != NULL);
+    firstButton->setText(button1Text);
+    
+    HbPushButton* middleButton = NULL;
+    if ( homeNetwork ) {
+    middleButton = qobject_cast<HbPushButton*>( loader.findWidget("middleButton") );
+    Q_ASSERT(middleButton != NULL); 
+    middleButton->setText(button2Text);
+    } 
+    
+    HbPushButton* cancelButton = qobject_cast<HbPushButton*>( loader.findWidget("cancelButton") );
+    Q_ASSERT(cancelButton != NULL);
+    cancelButton->setText(button3Text);
+      
+    // Connect the button clicks to slots, assert if connecting fails
+    bool connected = connect( firstButton, SIGNAL(clicked()), this, SLOT( firstButtonPressed() ));
+    Q_ASSERT(connected == true);
+    
+    if ( homeNetwork ) {
+    connected = connect( middleButton, SIGNAL(clicked()), this, SLOT( middleButtonPressed() ));
+    Q_ASSERT(connected == true);
+    }
+    
+    connected = connect( cancelButton, SIGNAL(clicked()), this, SLOT( cancelPressed() ));
+    Q_ASSERT(connected == true);
+    // Connect the about to close and hide signals, so that we are able to inform 
+    // the caller that the dialog was closed, for example due to timeout
+    connected = connect(this, SIGNAL(aboutToClose()), this, SLOT(closingDialog()));
+    Q_ASSERT(connected == true);
+    connected = connect(this, SIGNAL(aboutToHide()), this, SLOT(closingDialog()));
+    Q_ASSERT(connected == true);
+   
+    OstTraceFunctionExit0( DUP1_CELLULARPROMPTDIALOG_CREATEDIALOG_EXIT );
+}
+
+/**
+ * Destructor
+ */
+CellularPromptDialog::~CellularPromptDialog()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DCELLULARPROMPTDIALOG_ENTRY );
+    
+    // The dialog widgets are deleted as the dialog is deleted
+    if (mDialog != NULL) {
+        delete mDialog;
+    }
+    mDialog = NULL;
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DCELLULARPROMPTDIALOG_EXIT );
+}
+
+/**
+ * Function is called when the first button is pressed and the 
+ * index of the button is emitted
+ */
+void CellularPromptDialog::firstButtonPressed()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_FIRSTBUTTONPRESSED_ENTRY );
+    
+    QVariantMap data;
+    QVariant variant(firstButtonIndex);
+    data.insert("button", variant);
+    // emit the data of the selected button and close the dialog
+    emit deviceDialogData(data);
+    close();
+
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_FIRSTBUTTONPRESSED_EXIT );
+}
+
+/**
+ * Function is called when the second button is pressed and the 
+ * index of the button is emitted
+ */
+void CellularPromptDialog::middleButtonPressed()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_MIDDLEBUTTONPRESSED_ENTRY );
+    
+    QVariantMap data;
+    QVariant variant(middleButtonIndex);
+    data.insert("button", variant);
+    // emit the data of the selected button and close the dialog
+    emit deviceDialogData(data);
+    close();
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_MIDDLEBUTTONPRESSED_EXIT );
+}
+
+/**
+ * Function is called when the third button is pressed and the 
+ * index of the button is emitted
+ */
+void CellularPromptDialog::cancelPressed()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CANCELPRESSED_ENTRY );
+    
+    QVariantMap data;
+    QVariant variant(cancelButtonIndex);
+    data.insert("button", variant);
+    // emit the data of the selected button and close the dialog
+    emit deviceDialogData(data);
+    close();
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CANCELPRESSED_EXIT );
+}
+
+/**
+ * Function is called when the dialog is about to close
+ */
+void CellularPromptDialog::closingDialog()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CLOSINGDIALOG_ENTRY );
+    
+    if (!mClose) {
+        mClose = true;
+        closeDeviceDialog(false);
+    }
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CLOSINGDIALOG_EXIT );
+}
+
+
+/**
+ * Updating the dialog during its showing is not allowed.
+ */ 
+bool CellularPromptDialog::setDeviceDialogParameters
+                (const QVariantMap &parameters)
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_SETDEVICEDIALOGPARAMETERS_ENTRY );
+    
+    Q_UNUSED(parameters)
+    // changing the dialog after presenting it is not supported.
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_SETDEVICEDIALOGPARAMETERS_EXIT );
+    return true;
+}
+
+/**
+ * Not supported, 0 always returned
+ */
+int CellularPromptDialog::deviceDialogError() const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DEVICEDIALOGERROR_ENTRY );
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DEVICEDIALOGERROR_EXIT);
+    return 0;
+}
+
+/**
+ * Dialog is closed and the signal about closing is emitted
+ */
+void CellularPromptDialog::closeDeviceDialog(bool byClient)
+{   
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CLOSEDEVICEDIALOG_ENTRY );
+    
+    Q_UNUSED(byClient)
+    close();
+    // If the user closes the dialog, then the deviceDialogClosed is emitted
+    emit deviceDialogClosed();
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CLOSEDEVICEDIALOG_EXIT );
+}
+
+/**
+ * This dialog widget is returned to the caller
+ */
+HbPopup *CellularPromptDialog::deviceDialogWidget() const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DEVICEDIALOGWIDGET_ENTRY );
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DEVICEDIALOGWIDGET_EXIT );
+    
+    return const_cast<CellularPromptDialog*>(this);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/src/cellularpromptdialogplugin.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,160 @@
+/*
+* 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: Prompt Dialog plugin implementation
+*
+*/
+
+
+#include <hbdevicedialoginterface.h>
+#include <QVariantMap>
+#include "cellularpromptdialogplugin.h"
+#include "cellularpromptdialog.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cellularpromptdialogpluginTraces.h"
+#endif
+
+
+/* Initializes the resource file */
+inline void initMyResource() { Q_INIT_RESOURCE(promptdialog); }
+/* removes the resource file */
+inline void cleanupMyResource() { Q_CLEANUP_RESOURCE(promptdialog); }
+ 
+
+Q_EXPORT_PLUGIN2(cellularpromptdialogplugin, CellularPromptDialogPlugin)
+
+
+// This plugin implements one device dialog type
+static const struct {
+    const char *mTypeString;
+} dialogInfos[] = {
+    {"com.nokia.ipconnmgmt.promptdialog/1.0"}
+};
+
+/**
+ * Constructor
+ */ 
+CellularPromptDialogPlugin::CellularPromptDialogPlugin()
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_CELLULARPROMPTDIALOGPLUGIN_ENTRY );
+    
+    // Initializes the resource file which contains the
+    // docml building up the dialog
+    initMyResource();
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_CELLULARPROMPTDIALOGPLUGIN_EXIT );
+}
+
+/**
+ * Destructor
+ */ 
+CellularPromptDialogPlugin::~CellularPromptDialogPlugin()
+{
+    OstTraceFunctionEntry0( DUP1_CELLULARPROMPTDIALOGPLUGIN_DCELLULARPROMPTDIALOGPLUGIN_ENTRY );
+    
+    // Remove the loaded resources
+    cleanupMyResource();
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_DCELLULARPROMPTDIALOGPLUGIN_EXIT );
+}
+
+/**
+ * Create device dialog widget
+ */ 
+HbDeviceDialogInterface *CellularPromptDialogPlugin::createDeviceDialog(
+    const QString &deviceDialogType,
+    const QVariantMap &parameters)
+{  
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_CREATEDEVICEDIALOG_ENTRY );
+    
+    Q_UNUSED(deviceDialogType)
+    CellularPromptDialog* dialog = new CellularPromptDialog(parameters);
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_CREATEDEVICEDIALOG_EXIT );
+    return dialog;
+}
+
+/**
+ * Check if client is allowed to use device dialog widget
+ */
+bool CellularPromptDialogPlugin::accessAllowed(const QString &deviceDialogType,
+    const QVariantMap &parameters, const QVariantMap &securityInfo) const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_ACCESSALLOWED_ENTRY );
+    
+    Q_UNUSED(deviceDialogType)
+    Q_UNUSED(parameters)
+    Q_UNUSED(securityInfo)
+
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use.
+    return true;
+}
+
+/**
+ * Return information of device dialog the plugin creates
+ */ 
+bool CellularPromptDialogPlugin::deviceDialogInfo(const QString &deviceDialogType,
+    const QVariantMap &parameters, DeviceDialogInfo *info) const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_DEVICEDIALOGINFO_ENTRY );
+    
+    Q_UNUSED(parameters)
+    Q_UNUSED(deviceDialogType)
+    
+    info->group = GenericDeviceDialogGroup;
+    info->flags = NoDeviceDialogFlags;
+    info->priority = DefaultPriority;
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_DEVICEDIALOGINFO_EXIT );
+    return true;
+}
+
+/**
+ * Return device dialog types this plugin implements
+ */ 
+QStringList CellularPromptDialogPlugin::deviceDialogTypes() const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_DEVICEDIALOGTYPES_ENTRY );
+    
+    QStringList types;
+    const int numTypes = sizeof(dialogInfos) / sizeof(dialogInfos[0]);
+    for(int i = 0; i < numTypes; i++) {
+        types.append(dialogInfos[i].mTypeString);
+    }
+    
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_DEVICEDIALOGTYPES_EXIT );
+    return types;
+}
+
+/**
+ * Return plugin flags
+ */ 
+CellularPromptDialogPlugin::PluginFlags CellularPromptDialogPlugin::pluginFlags() const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_PLUGINFLAGS_ENTRY );   
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_PLUGINFLAGS_EXIT );
+    return NoPluginFlags;
+}
+
+/**
+ * The last error is not stored, not supported
+ */ 
+int CellularPromptDialogPlugin::error() const
+{
+    OstTraceFunctionEntry0( CELLULARPROMPTDIALOGPLUGIN_ERROR_ENTRY );
+    OstTraceFunctionExit0( CELLULARPROMPTDIALOGPLUGIN_ERROR_EXIT );
+    return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/confirmqueries/traces/OstTraceDefinitions.h	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/connectionutilities.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,22 @@
+#
+# 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:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS  += confirmqueries
+
+CONFIG += ordered
+						
\ No newline at end of file
Binary file data/cccccc00_emulator.cre has changed
--- a/dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/dbcreator/commsdatcreator/Src/cdcprocessorglobal.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -801,10 +801,9 @@
 	    // Convert the input parameter to integer
     	TLex lex( *aValue );
 		
-		TUint value( 0 );
-		
-		User::LeaveIfError( lex.Val( value, EDecimal) );
-		
+    	TInt value( 0 );
+        User::LeaveIfError( lex.Val( value ) );
+        
 		// Set the paramter value
 	    
 	    if ( aField == EWlanBGScanInterval )
--- a/dbcreator/commsdatcreator/Src/cdcwlandevicesettings.cpp	Tue Feb 02 00:24:11 2010 +0200
+++ b/dbcreator/commsdatcreator/Src/cdcwlandevicesettings.cpp	Fri Apr 16 15:21:37 2010 +0300
@@ -32,8 +32,8 @@
 
 // CONSTANTS
 // WLAN Device Settings table - default settings
-const TUint32 KDefaultBGScanInterval    = 0;   // No background scan
-const TBool   KDefaultUseDefSettings    = ETrue;        
+const TUint32 KDefaultBGScanInterval    = 0xFFFFFFFF;   // Automatic scan
+const TBool   KDefaultUseDefSettings    = ETrue;
 const TUint32 KDefaultLongRetry         = 4;
 const TUint32 KDefaultShortRetry        = 7;
 const TUint32 KDefaultRTS               = 2347;
--- a/dbcreator/commsdatcreator/bwins/commsdatcreatoru.def	Tue Feb 02 00:24:11 2010 +0200
+++ b/dbcreator/commsdatcreator/bwins/commsdatcreatoru.def	Fri Apr 16 15:21:37 2010 +0300
@@ -1,8 +1,7 @@
 EXPORTS
-	??1CCdcCommsDatCreator@@UAE@XZ @ 1 NONAME ; CCdcCommsDatCreator::~CCdcCommsDatCreator(void)
+	?NewL@CCdcCommsDatCreator@@SAPAV1@XZ @ 1 NONAME ; class CCdcCommsDatCreator * CCdcCommsDatCreator::NewL(void)
 	?CreateCommsDatL@CCdcCommsDatCreator@@QAEXABV?$TBuf@$0BAA@@@@Z @ 2 NONAME ; void CCdcCommsDatCreator::CreateCommsDatL(class TBuf<256> const &)
-	?CreateTablesL@CCdcCommsDatCreator@@QAEXXZ @ 3 NONAME ; void CCdcCommsDatCreator::CreateTablesL(void)
-	?DumpCommsDatL@CCdcCommsDatCreator@@QAEXABV?$TBuf@$0BAA@@@@Z @ 4 NONAME ; void CCdcCommsDatCreator::DumpCommsDatL(class TBuf<256> const &)
-	?NewL@CCdcCommsDatCreator@@SAPAV1@XZ @ 5 NONAME ; class CCdcCommsDatCreator * CCdcCommsDatCreator::NewL(void)
-	?NewLC@CCdcCommsDatCreator@@SAPAV1@XZ @ 6 NONAME ; class CCdcCommsDatCreator * CCdcCommsDatCreator::NewLC(void)
+	?DumpCommsDatL@CCdcCommsDatCreator@@QAEXABV?$TBuf@$0BAA@@@@Z @ 3 NONAME ; void CCdcCommsDatCreator::DumpCommsDatL(class TBuf<256> const &)
+	?NewLC@CCdcCommsDatCreator@@SAPAV1@XZ @ 4 NONAME ; class CCdcCommsDatCreator * CCdcCommsDatCreator::NewLC(void)
+	?CreateTablesL@CCdcCommsDatCreator@@QAEXXZ @ 5 NONAME ; void CCdcCommsDatCreator::CreateTablesL(void)
 
Binary file dbcreator/conf/commsdatcreator.confml has changed
--- a/dbcreator/inc/cdccommsdatcreator.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/dbcreator/inc/cdccommsdatcreator.h	Fri Apr 16 15:21:37 2010 +0300
@@ -67,7 +67,7 @@
 
 
         /** Destructor */
-	    IMPORT_C virtual ~CCdcCommsDatCreator();
+        virtual ~CCdcCommsDatCreator();
         
     private:
     
--- a/ipcm_plat/access_point_engine_misc_api/inc/ApProtHandler.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_plat/access_point_engine_misc_api/inc/ApProtHandler.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define CAPPROTHANDLER_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_plat/access_point_engine_misc_api/inc/VpnAPEngine.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_plat/access_point_engine_misc_api/inc/VpnAPEngine.h	Fri Apr 16 15:21:37 2010 +0300
@@ -22,7 +22,7 @@
 #define VPN_AP_ENGINE_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 // INCLUDES
--- a/ipcm_plat/access_point_engine_misc_api/inc/VpnAPItem.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_plat/access_point_engine_misc_api/inc/VpnAPItem.h	Fri Apr 16 15:21:37 2010 +0300
@@ -22,7 +22,7 @@
 #define VPN_AP_ITEM_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 // INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/APAccessPointItem.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/APAccessPointItem.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define ACCESSPOINTITEM_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
 
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/APDataHandler.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/APDataHandler.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define APDATAHANDLER_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/APNetworks.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/APNetworks.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define CAPNETWORKS_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/APSelect.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/APSelect.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define CAPSELECT_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
@@ -65,6 +65,7 @@
     {
     TUint32     iVpnIapId;
     TUint32     iHomeIapId;
+    TUint32     iHomeSnapId;
     HBufC *     iName;
     }TVpnData;
 
--- a/ipcm_pub/access_point_engine_api/inc/APUtils.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/APUtils.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 #define APUTILS_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/ActiveApDb.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ActiveApDb.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,8 +21,7 @@
 #define ACTIVE_APDB_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
-
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
 
 //  INCLUDES
 #include <commdb.h>
--- a/ipcm_pub/access_point_engine_api/inc/ApEngineConsts.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ApEngineConsts.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define APENGINE_CONSTS_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 #include <ApEngineVer.h>
--- a/ipcm_pub/access_point_engine_api/inc/ApEngineVer.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ApEngineVer.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,8 +20,7 @@
 #define APENGINE_VER_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
- 
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
 // #define     __PROXY_SETTINGS
 
--- a/ipcm_pub/access_point_engine_api/inc/ApListItem.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ApListItem.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 #define CAPLISTITEM_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/ApNetworkItem.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ApNetworkItem.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 #define CAPNETWORKITEM_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/ApNetworkItemlist.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/ApNetworkItemlist.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define CAPNETWORKITEMLIST_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_engine_api/inc/Aplistitemlist.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_engine_api/inc/Aplistitemlist.h	Fri Apr 16 15:21:37 2010 +0300
@@ -20,7 +20,7 @@
 #define CAPLISTITEMLIST_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 //  INCLUDES
--- a/ipcm_pub/access_point_settings_handler_api/inc/ApSettingsHandlerCommons.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_settings_handler_api/inc/ApSettingsHandlerCommons.h	Fri Apr 16 15:21:37 2010 +0300
@@ -21,7 +21,7 @@
 #define APSETTINGS_HANDLER_COMMONS_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 // INCLUDES
--- a/ipcm_pub/access_point_settings_handler_api/inc/Apsettingshandlerui.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/access_point_settings_handler_api/inc/Apsettingshandlerui.h	Fri Apr 16 15:21:37 2010 +0300
@@ -22,7 +22,7 @@
 #define APSETTINGS_HANDLER_H
 
 // Deprecation warning
-#warning This header file has been deprecated. Will be removed in one of the next SDK releases.
+#warning This header file has been deprecated and will be fully removed between weeks 12 and 18 of 2010. See Polonium CR #153 for details.
  
  
 // INCLUDES
--- a/ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h	Tue Feb 02 00:24:11 2010 +0200
+++ b/ipcm_pub/connection_settings_api/inc/cmgenconnsettings.h	Fri Apr 16 15:21:37 2010 +0300
@@ -44,18 +44,6 @@
     ECmCellularDataUsageDisabled
     };
 
-// DEPRECATED enumeration which will be removed within few weeks.
-// DO NOT USE THESE VALUES.
-// Functionality related to these values is broken although it compiles.
-enum TCmSeamlessnessValue
-        {
-        ECmSeamlessnessNotRoamedTo,   // DO NOT USE
-        ECmSeamlessnessConfirmFirst,  // DO NOT USE
-        ECmSeamlessnessShowprogress,  // DO NOT USE
-        ECmSeamlessnessFullySeamless, // DO NOT USE
-        ECmSeamlessnessDisabled       // DO NOT USE
-        };
-
 // Table for connection settings other than default connection
 struct TCmGenConnSettings
     {
@@ -65,16 +53,6 @@
     TCmCellularDataUsage   iCellularDataUsageHome;
     // Cellular data usage abroad.
     TCmCellularDataUsage   iCellularDataUsageVisitor;
-
-    // DEPRECATED variable that will be removed within few weeks.
-    // DO NOT USE THESE VARIABLES.
-    // Functionality related to this variable is broken although it compiles.
-    TCmSeamlessnessValue   iSeamlessnessHome;
-    // DEPRECATED variable that will be removed within few weeks.
-    // DO NOT USE THESE VARIABLES.
-    // Functionality related to this variable is broken although it compiles.
-    TCmSeamlessnessValue   iSeamlessnessVisitor;
     };
 
 #endif
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipconnmgmt.pro	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,27 @@
+#
+# 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:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS  += \ 
+		connectionutilities \
+		connectionmonitoring
+
+CONFIG += ordered
+
+symbian*: {
+    SYMBIAN_PLATFORMS = WINSCW ARMV5
+} 
--- a/layers.sysdef.xml	Tue Feb 02 00:24:11 2010 +0200
+++ b/layers.sysdef.xml	Fri Apr 16 15:21:37 2010 +0300
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
   <!ENTITY layer_real_source_path "sf/mw/ipconnmgmt" >
 ]>
 
@@ -8,6 +8,7 @@
     <layer name="mw_layer">
       <module name="ipconnmgmt">
         <unit unitID="netdo.ipconnmgmt" mrp="" bldFile="&layer_real_source_path;/group" name="ipconnmgmt" />
+        <unit unitID="netdo.ipconnmgmtqt" mrp="" bldFile="&layer_real_source_path;" name="ipconnmgmtqt" proFile="ipconnmgmt.pro" qmakeArgs="-r"/>
       </module>
     </layer>
   </systemModel>
--- a/package_definition.xml	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="ipconnmgmt" name="IP Connectivity Management" levels="plugin framework server generic utils">
-    <collection id="alwayson_net_plugin" name="Always Online Net Plugin" level="server">
-      <component id="pdpcontextmanager2" filter="s60" name="PDP Context Manager 2">
-        <unit bldFile="alwayson_net_plugin/pdpcontextmanager2/group"/>
-      </component>
-    </collection>
-    <collection id="bearermanagement" name="Bearer Management" level="framework">
-      <component id="mpm" filter="s60" name="Mobility Policy Manager">
-        <unit bldFile="bearermanagement/mpm/group"/>
-      </component>
-      <component id="bearermanager" filter="s60" name="Bearer Manager">
-        <unit bldFile="bearermanagement/bearermanager/group"/>
-      </component>
-      <component id="bearermanagement_build" filter="s60" name="Bearer Management Build">
-		<!-- move exports into one of the other components and remove this one -->
-        <unit bldFile="bearermanagement/group"/>
-      </component>
-    </collection>
-    <collection id="connectionmonitoring" name="Connection Monitoring" level="server">
-      <component id="connectionmonitorplugin" filter="s60" name="Connection Monitor Plugin" class="plugin">
-        <unit bldFile="connectionmonitoring/connectionmonitorplugin/group"/>
-      </component>
-      <component id="connectionmonitorui" filter="s60" name="Connection Monitor UI">
-        <unit bldFile="connectionmonitoring/connectionmonitorui/group"/>
-      </component>
-      <component id="connmon" filter="s60" name="Connection Monitor">
-		<!-- either split into two components, or #include from a common bld.inf -->
-        <unit bldFile="connectionmonitoring/connmon/connectionmonitor/group"/>
-        <unit bldFile="connectionmonitoring/connmon/dataconnectionlogger/group"/>
-      </component>
-      <component id="connmonext" filter="s60" name="Connection Monitor Extension API">
-        <unit bldFile="connectionmonitoring/connmonext/group"/>
-      </component>
-    </collection>
-    <collection id="accesspointcontrol" name="Access Point Control" level="plugin">
-      <component id="apcontrollistplugin" filter="s60" name="Access Point Control List Plugin" class="plugin" introduced="^2">
-        <unit bldFile="accesspointcontrol/apcontrollistplugin/group"/>
-      </component>
-    </collection>
-    <collection id="apengine" name="Access Point Engine" level="framework">
-      <component id="apeng" filter="s60" name="Access Point Engine">
-        <unit bldFile="apengine/apeng/group"/>
-      </component>
-      <component id="apsettingshandlerui" filter="s60" name="Access Point Settings Handler UI">
-        <unit bldFile="apengine/apsettingshandlerui/group"/>
-      </component>
-      <component id="apsettingsplugin" filter="s60" name="Access Point Settings Plugin" class="plugin">
-        <unit bldFile="apengine/apsettingsplugin/group"/>
-      </component>
-    </collection>
-    <collection id="cmmanager" name="Connection Method Manager" level="framework">
-      <component id="cmmgr" filter="s60" name="CM Manager">
-        <unit bldFile="cmmanager/cmmgr/group"/>
-      </component>
-    </collection>
-    <collection id="dbcreator" name="DB Creator" level="utils">
-      <component id="commsdatcreator" filter="s60" name="Comms Database Creator" introduced="9.3">
-        <unit bldFile="dbcreator/commsdatcreator/group"/>
-      </component>
-      <component id="commsdatcreatorrfsplugin" filter="s60" name="Comms Database Creator RFS Plugin" class="plugin" introduced="9.3">
-        <unit bldFile="dbcreator/commsdatcreatorrfsplugin/group"/>
-      </component>
-      <component id="commsdatstartup" filter="s60" name="Comms Database Startup" introduced="9.3">
-        <unit bldFile="dbcreator/commsdatstartup/group"/>
-      </component>
-      <component id="dbcreatorexe" filter="s60" name="DB Creator" introduced="9.3">
-        <unit bldFile="dbcreator/dbcreatorexe/group"/>
-      </component>
-      <component id="dbcreator_build" filter="s60" name="DB Creator Build" introduced="9.3">
-		<!-- consider moving exports to another component and getting rid of this one -->
-        <unit bldFile="dbcreator/group"/>
-      </component>
-    </collection>
-    <collection id="connectionutilities" name="Connection Utilities" level="utils">
-      <component id="connectiondialogs" filter="s60" name="Connection Dialogs">
-        <unit bldFile="connectionutilities/connectiondialogs/group"/>
-      </component>
-    </collection>
-    <collection id="ipconnmgmt_info" name="IP Connectivity Management Info" level="utils">
-      <component id="ipcm_pub" filter="s60" class="api" name="IP Connectivity Management Public Interfaces">
-        <unit bldFile="ipcm_pub/group"/>
-      </component>
-      <component id="ipcm_plat" filter="s60" class="api" name="IP Connectivity Management Platform Interfaces">
-        <unit bldFile="ipcm_plat/group"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- a/sysdef_1_4_0.dtd	Tue Feb 02 00:24:11 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
- <!ELEMENT SystemDefinition (systemModel?, build?)>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (logicalset* | module*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels CDATA #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalset name CDATA #REQUIRED>
- <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalsubset name CDATA #REQUIRED>
- <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
- <!ATTLIST module
-  name CDATA #REQUIRED
-  level CDATA #IMPLIED>
- <!ELEMENT component (unit* | package* | prebuilt*)*>
- <!ATTLIST component name CDATA #REQUIRED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  unitID ID #REQUIRED
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  bldFile CDATA #REQUIRED
-  priority CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT package EMPTY>
- <!ATTLIST package
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT prebuilt EMPTY>
- <!ATTLIST prebuilt
-  name CDATA #REQUIRED
-  version CDATA #REQUIRED
-  late (Y|N) #IMPLIED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
- <!ELEMENT unitList (unitRef+)>
- <!ATTLIST unitList
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT unitRef EMPTY>
- <!ATTLIST unitRef unit IDREF #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N | y | n) #REQUIRED>
- <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
- <!ELEMENT unitListRef EMPTY>
- <!ATTLIST unitListRef unitList IDREF #REQUIRED>
- <!ELEMENT layerRef EMPTY>
- <!ATTLIST layerRef layerName CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N | y | n) #REQUIRED
-  targetParallel (Y | N | y | n) #IMPLIED>
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Fri Apr 16 15:21:37 2010 +0300
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>