securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp
branchRCL_3
changeset 22 03674e5abf46
parent 21 09b1ac925e3f
--- a/securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp	Tue Aug 31 16:04:40 2010 +0300
+++ b/securitydialogs/SecUi/Src/SecUiSecurityHandler.cpp	Wed Sep 01 12:19:59 2010 +0100
@@ -1,65 +1,64 @@
 /*
- * Copyright (c) 2002 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:  Provides api for handling security events.
- *
- *
- */
-#include <e32notif.h>
+* Copyright (c) 2002 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:  Provides api for handling security events.
+*
+*
+*/
+
+
 #include <aknnotedialog.h>
 #include <etelmm.h>
-// #include <SecUi.rsg>
+#include <SecUi.rsg>
 #include <exterror.h>
 #include <textresolver.h>
 
 #ifdef __COVER_DISPLAY
 #include <aknmediatorfacade.h>
+#include <secondarydisplay/SecondaryDisplayStartupAPI.h>
 #endif //__COVER_DISPLAY
+
 #include <centralrepository.h> 
+#include <starterclient.h>     //used for RemoveSplashScreen
 #include <e32property.h>
-
 #include <PSVariables.h>   // Property values
 #include <coreapplicationuisdomainpskeys.h>
 #include <startupdomainpskeys.h>
-// #include <uikon/eiksrvui.h>
+#include <uikon/eiksrvui.h>
 #include <settingsinternalcrkeys.h>
 #include <securityuisprivatepskeys.h>
-// #include <AknNotiferAppServerApplication.h>
+#include <AknNotiferAppServerApplication.h>
 
 #include <SCPClient.h>
 #include <securitynotification.h>
 #include "secui.hrh"
-#include "SecUi.h"
 #include "secuisecurityhandler.h"
 #include "secuicodequerydialog.h"
 #include "secuisecuritysettings.h"
 #include "SecUiWait.h"
-// #include "SecUiLockObserver.h"
+#include "SecUiLockObserver.h"
+#ifdef RD_REMOTELOCK
 #include <RemoteLockSettings.h>
+#endif // RD_REMOTELOCK
 #include <StringLoader.h>
 #include <featmgr.h>
-#include <hb/hbcore/hbtextresolversymbian.h>
-
-#include "SecQueryUi.h"
-
 //  LOCAL CONSTANTS AND MACROS
 const TInt KMaxNumberOfPUKAttempts(10);
 const TInt KMaxNumberOfPINAttempts(3);
-// not used
-// const TInt KLastRemainingInputAttempt(1);
+const TInt KLastRemainingInputAttempt(1);
 
-const TInt KTriesToConnectServer(2);
-const TInt KTimeBeforeRetryingRequest(50000);
+const TInt KTriesToConnectServer( 2 );
+const TInt KTimeBeforeRetryingRequest( 50000 );
 
 // ================= MEMBER FUNCTIONS =======================
 //
@@ -67,21 +66,12 @@
 // CSecurityHandler::CSecurityHandler()
 // C++ constructor
 // ----------------------------------------------------------
-// qtdone
-EXPORT_C CSecurityHandler::CSecurityHandler(RMobilePhone& aPhone) :
-    iPhone(aPhone), iQueryCanceled(ETrue), iSecurityDlg(NULL), iNoteDlg(NULL)
+//
+EXPORT_C CSecurityHandler::CSecurityHandler(RMobilePhone& aPhone):
+        iPhone(aPhone), iQueryCanceled(ETrue), iSecurityDlg(NULL), iNoteDlg(NULL) 
     {
-    RDEBUG("0", 0);
-
-    TInt result = iCustomPhone.Open(aPhone);
-    RDEBUG("result", result);
-    TRAP_IGNORE(FeatureManager::InitializeLibL()); //Shouldn't this panic if FM does not initialise??
-
-    _LIT(KFileName, "secui_");
-    _LIT(KPath, "z:/resource/qt/translations/");
-    RDEBUG("HbTextResolverSymbian", 0);
-    result = HbTextResolverSymbian::Init(KFileName, KPath);
-    RDEBUG("result", result);
+        TInt result = iCustomPhone.Open(aPhone);
+        TRAP_IGNORE( FeatureManager::InitializeLibL() ); //Shouldn't this panic if FM does not initialise??
     }
 
 //
@@ -89,49 +79,32 @@
 // CSecurityHandler::~CSecurityHandler()
 // Destructor
 // ----------------------------------------------------------
-// qtdone
+//
 EXPORT_C CSecurityHandler::~CSecurityHandler()
     {
-    RDEBUG("0", 0);
-
-    if (iDestroyedPtr)
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::~CSecurityHandler()"));
+    #endif
+    if ( iDestroyedPtr )
         {
         *iDestroyedPtr = ETrue;
         iDestroyedPtr = NULL;
         }
-    RDEBUG("calling CancelOpenQuery", 0);
-    TInt err = CancelOpenQuery(-1);
-    RDEBUG("err", err);
+    CancelSecCodeQuery();
     iCustomPhone.Close();
     FeatureManager::UnInitializeLib();
-    RDEBUG("1", 1);
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::HandleEventL()
 // Handles different security events
 // ----------------------------------------------------------
-// qtdone
-EXPORT_C void CSecurityHandler::HandleEventL(RMobilePhone::TMobilePhoneSecurityEvent aEvent)
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent )
     {
-    RDEBUG("0", 0);
-
     TInt result = KErrNone;
-    HandleEventL(aEvent, result);
-    }
-
-//
-// ----------------------------------------------------------
-// CSecurityHandler::HandleEventL()
-// Handles different security events
-// ----------------------------------------------------------
-// qtdone
-EXPORT_C void CSecurityHandler::HandleEventL(RMobilePhone::TMobilePhoneSecurityEvent aEvent, TBool aStartup, TInt& aResult)
-    {
-    RDEBUG("0", 0);
-
-    iStartup = aStartup;
-    HandleEventL(aEvent, aResult);
+    HandleEventL( aEvent, result );
     }
 
 //
@@ -139,300 +112,422 @@
 // CSecurityHandler::HandleEventL()
 // Handles different security events
 // ----------------------------------------------------------
-// qtdone
-EXPORT_C void CSecurityHandler::HandleEventL(RMobilePhone::TMobilePhoneSecurityEvent aEvent, TInt& aResult)
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent,
+    TBool aStartup, TInt& aResult )
     {
-    RDEBUG("0", 0);
-
+    iStartup = aStartup;
+    HandleEventL( aEvent, aResult );
+    }
+    
+//
+// ----------------------------------------------------------
+// CSecurityHandler::HandleEventL()
+// Handles different security events
+// ----------------------------------------------------------
+//
+EXPORT_C void CSecurityHandler::HandleEventL(
+    RMobilePhone::TMobilePhoneSecurityEvent aEvent, TInt& aResult )
+    {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma));
-    TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin));
-    RDEBUG("aEvent", aEvent);
-
-    switch (aEvent)
-        {
-        case RMobilePhone::EPin1Required:
-            RDEBUG("RMobilePhone::EPin1Required", 0)
-            ;
-            aResult = Pin1RequiredL();
-            break;
-        case RMobilePhone::EPuk1Required:
-            RDEBUG("RMobilePhone::EPuk1Required", 0)
-            ;
-            Puk1RequiredL();
-            break;
-        case RMobilePhone::EPin2Required:
-            Pin2RequiredL();
-            break;
-        case RMobilePhone::EPuk2Required:
-            Puk2RequiredL();
-            break;
-        case RMobilePhone::EUniversalPinRequired:
-            if (wcdmaSupported || upinSupported)
-                {
-                aResult = UPinRequiredL();
-                }
-            else
-                aResult = KErrNotSupported;
-            break;
-        case RMobilePhone::EUniversalPukRequired:
-            if (wcdmaSupported || upinSupported)
-                {
-                aResult = UPukRequiredL();
-                }
-            else
-                aResult = KErrNotSupported;
-            break;
-        case RMobilePhone::EPhonePasswordRequired:
-            aResult = PassPhraseRequiredL();
-            break;
-        case RMobilePhone::EICCTerminated:
-            SimLockEventL();
-            break;
-        default:
-            RDEBUG("default", aEvent)
-            ;
-            break;
-        }
-    RDEBUG("aResult", aResult);
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL()"));
+    RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() EVENT: %d"), aEvent);
+    #endif
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+ 
+    switch(aEvent)
+            {
+            case RMobilePhone::EPin1Required:
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() Pin1Required"));
+                #endif
+                aResult = Pin1RequiredL();
+                break;
+            case RMobilePhone::EPuk1Required:
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::HandleEventL() PUK1Required"));
+                #endif
+                ((CAknNotifierAppServerAppUi*)(CEikonEnv::Static())->EikAppUi())->SuppressAppSwitching(ETrue);
+                TRAPD(err,aResult = Puk1RequiredL());
+                ((CAknNotifierAppServerAppUi*)(CEikonEnv::Static())->EikAppUi())->SuppressAppSwitching(EFalse);
+                User::LeaveIfError(err);
+                break;
+            case RMobilePhone::EPin2Required:
+                Pin2RequiredL();
+                break;
+            case RMobilePhone::EPuk2Required:
+                Puk2RequiredL();        
+                break;
+            case RMobilePhone::EUniversalPinRequired:
+                if(wcdmaSupported || upinSupported)
+                   {
+                       aResult = UPinRequiredL();
+                   }
+                else
+                    aResult = KErrNotSupported;
+                break;
+            case RMobilePhone::EUniversalPukRequired:
+                if(wcdmaSupported || upinSupported)
+                   {
+                       aResult = UPukRequiredL();
+                   }
+                else
+                    aResult = KErrNotSupported;
+                break;
+            case RMobilePhone::EPhonePasswordRequired:
+                aResult = PassPhraseRequiredL();
+                break;
+            case RMobilePhone::EICCTerminated:
+                SimLockEventL();
+                break;
+            default:
+                break;
+            }
+    #if defined(_DEBUG)
+    RDebug::Print( _L( "CSecurityHandler::HandleEventL() returning %d." ), aResult );
+    #endif
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::AskSecCodeL()
 // For asking security code e.g in settings
 // ----------------------------------------------------------
-// qtdone
+//
 EXPORT_C TBool CSecurityHandler::AskSecCodeL()
-    {
+    {        
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    RDEBUG("0", 0);
-    // if code is still not initialized, then there's no need to ask it. This fixes the error when the RFS requests the code.
-    const TUid KCRUidSCPLockCode =
-        {
-        0x2002677B
-        };
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeL()"));
+    #endif
+
+    /* if code is still not initialized, then there's no need to ask it. This fixes the error when the RFS requests the code */
+    const TUid KCRUidSCPLockCode = {0x2002677B};
     const TUint32 KSCPLockCodeDefaultLockCode = 0x00000001;
-
+	
     CRepository* repository = CRepository::NewL(KCRUidSCPLockCode);
     TInt currentLockStatus = -1;
-    TInt res = -1;
-    TInt lAlphaSupported = 0;
-    TInt lCancelSupported = 0;
-    RMobilePhone::TMobilePassword iSecUi_password;
+    TInt res=-1;
 
-    res = repository->Get(KSCPLockCodeDefaultLockCode, currentLockStatus);	// 0x3039 = 12345
-    RDEBUG("res", res);
-    RDEBUG("currentLockStatus", currentLockStatus);
+    res = repository->Get(KSCPLockCodeDefaultLockCode , currentLockStatus);
+    #if defined(_DEBUG)
+    RDebug::Printf( "%s %s (%u) res=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, res );
+    RDebug::Printf( "%s %s (%u) currentLockStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, currentLockStatus );
+    #endif
     delete repository;
-    if (res == 0 && (currentLockStatus == 1 || currentLockStatus == 12345) )
-        {
-        // code is the default one
-        RDEBUG("code is the default one; supply as default", 1);
-        iSecUi_password.Copy(_L("12345"));
-        // RDEBUG("code is the default one; no need to request it", 1);
-        // return ETrue;
-        }
-    // end check for default code
-
-    RMobilePhone::TMobilePassword required_fourth;
-
-    TInt ret = KErrNone;
-    TInt status = KErrNone;
-
-    TInt queryAccepted = KErrCancel;
-
-    while (queryAccepted != KErrNone)
+    if(res==0 && currentLockStatus>=1 )
         {
-        RMobilePhone::TMobilePhoneSecurityCode secCodeType;
-        secCodeType = RMobilePhone::ESecurityCodePhonePassword;
+        // code is the default one; no need to request it.
+        return ETrue;
+        }
+    /* end check for default code */
 
-        /* request PIN using QT */
-        CSecQueryUi *iSecQueryUi;
-        RDEBUG("CSecQueryUi", 0);
-        iSecQueryUi = CSecQueryUi::NewL();
-        iQueryCanceled = EFalse;
-        lAlphaSupported = ESecUiAlphaSupported;
-        lCancelSupported = ESecUiCancelSupported;
-        TBuf<0x100> title;
-        title.Zero();
-        HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_sec_code"));
-        title.Append(stringHolder->Des());
-        CleanupStack::PopAndDestroy(stringHolder);
-        title.Append(_L("$"));
-        title.AppendNum(-1);	// Don't know the number of remaining attempts
-        queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_SECURITY_CODE_MIN_LENGTH, SEC_C_SECURITY_CODE_MAX_LENGTH, ESecUiSecretSupported | lAlphaSupported
-                | lCancelSupported | secCodeType);
-        RDEBUG("iSecUi_password", 0);
-        RDEBUGSTR(iSecUi_password);
-        RDEBUG("delete", 0);
-        iQueryCanceled = ETrue;
-        delete iSecQueryUi;
-        RDEBUG("queryAccepted", queryAccepted);
-        /* end request PIN using QT */
-        if (queryAccepted != KErrNone)
+    // Destructor sets thisDestroyed to ETrue
+    TBool thisDestroyed( EFalse );
+    iDestroyedPtr = &thisDestroyed;
+    
+    iQueryCanceled = EFalse;
+    RMobilePhone::TMobilePassword password;
+    RMobilePhone::TMobilePassword required_fourth;
+        
+    TInt ret = KErrNone;
+    TInt err = KErrNone;
+    TInt status = KErrNone;
+    if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    		FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+    {
+        // Connect to the SCP server, and request the code query
+        RSCPClient scpClient;
+        User::LeaveIfError( scpClient.Connect() );
+        CleanupClosePushL( scpClient );      
+        status = scpClient.SecCodeQuery( password, 
+                                      RSCPClient::SCP_OK_CANCEL,
+                                      EFalse,
+                                      0 );         
+                                              
+        if ( status != KErrCancel )
+            {
+            // Set this "true" to indicate that the input wasn't cancelled
+            ret = ETrue;
+            }
+        else
             {
             ret = EFalse;
-            return ret;
             }
+        
+        CleanupStack::PopAndDestroy(); //scpClient                       
+  }
+  else
+  {
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode);// adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+	    CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+		CleanupStack::PushL(deviceLockStatusObserver);
+		err =KErrNone;
+	    TRAP(err,ret = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY));
+		CleanupStack::PopAndDestroy(deviceLockStatusObserver);
+  }
+    
+    // check if CSecurityHandler has been "killed"
+    if ( thisDestroyed )
+        {
+        return EFalse;
+        }
 
-        CWait* wait = CWait::NewL();
-        RDEBUG("VerifySecurityCode", 0);
-        iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, required_fourth);
-        RDEBUG("WaitForRequestL", 0);
-        status = wait->WaitForRequestL();
-        RDEBUG("status", status);
-        delete wait;
-#ifdef __WINS__
-        if (status == KErrNotSupported || status == KErrTimedOut)
+    iDestroyedPtr = NULL;
+    iSecurityDlg = NULL;
+
+    if (err != KErrNone)
+        {
+        User::Leave(err);
+        }
+
+    if (ret)
+        {
+        while (!iQueryCanceled)
             {
-            RDEBUG("status", status);
-            status = KErrNone;
-            }
-#endif
+	           if (!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+		           {           
+		                RMobilePhone::TMobilePhoneSecurityCode secCodeType;
+		                secCodeType = RMobilePhone::ESecurityCodePhonePassword;
+		                CWait* wait = CWait::NewL();
+		                iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
+		                status = wait->WaitForRequestL();
+		                delete wait;
+		
+		           }
+            
+            switch(status)
+                {        
+                case KErrNone:
+                    {
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    										!(FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements)))
+    								{
+                        RSCPClient scpClient;
+                        User::LeaveIfError( scpClient.Connect() );
+                        CleanupClosePushL( scpClient );
+
+                        TSCPSecCode newCode;
+                        newCode.Copy( password );
+                        scpClient.StoreCode( newCode );
 
-        ret = ETrue;
-        queryAccepted = KErrCancel; // because it's not yet validated
-        switch (status)
-            {
-            case KErrNone:
-                {
-                if (FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw) && !(FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements)))
+                        CleanupStack::PopAndDestroy(); //scpClient  
+                  	}
+                            	
+                    iQueryCanceled = ETrue;
+                    return ETrue;
+                    }                    
+                case KErrGsmSSPasswordAttemptsViolation:
+                case KErrLocked:
                     {
-                    RDEBUG("calling RSCPClient", 0);
-                    RSCPClient scpClient;
-                    User::LeaveIfError(scpClient.Connect());
-                    CleanupClosePushL(scpClient);
+                    iDestroyedPtr = &thisDestroyed;
+                    // security code blocked! 
+                    iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+                    iNoteDlg->SetTimeout(CAknNoteDialog::ELongTimeout);
+                    iNoteDlg->SetTone(CAknNoteDialog::EErrorTone);
+                    err =KErrNone;
+                    TRAP(err,iNoteDlg->ExecuteLD(R_SEC_BLOCKED));
+                    
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
 
-                    TSCPSecCode newCode;
-                    RDEBUG("iSecUi_password", 1);
-                    RDEBUGSTR(iSecUi_password);
-                    newCode.Copy(iSecUi_password);
-                    RDEBUG(
-                            "!!!!!!! ***** deprecated **** !!!!! scpClient.StoreCode",
-                            0);
-                    scpClient.StoreCode(newCode);
-                    RDEBUG("called StoreCode", 1);
-
-                    CleanupStack::PopAndDestroy(); //scpClient
-                    queryAccepted = KErrNone;
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }
+                    break;
                     }
-
-                iQueryCanceled = ETrue;
-                return ETrue;
+                case KErrGsm0707IncorrectPassword:
+                case KErrAccessDenied:
+                    {    
+                    iDestroyedPtr = &thisDestroyed;
+                    // code was entered erroneusly
+                    iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+                    iNoteDlg->SetTimeout(CAknNoteDialog::ELongTimeout);
+                    iNoteDlg->SetTone(CAknNoteDialog::EErrorTone);
+                    err =KErrNone;
+                    TRAP(err,iNoteDlg->ExecuteLD(R_CODE_ERROR));    
+                    
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
+                    
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }
+                    break;
+                    }    
+                default:
+                    {
+                    iDestroyedPtr = &thisDestroyed;
+                    err =KErrNone;
+                    TRAP(err,ShowGenericErrorNoteL(status));
+                                        
+                    // check if CSecurityHandler has been "killed"
+                    if ( thisDestroyed )
+                        {
+                        return EFalse;
+                        }
+                    
+                    iDestroyedPtr = NULL;
+                    iNoteDlg = NULL;
+                    
+                    if (err != KErrNone)
+                        {
+                        User::Leave(err);
+                        }    
+                    break;
+                    }
+                }     
+        
+            if (iQueryCanceled)
+                {
+                ret = EFalse;
+                break;
+                }    
+            
+            password = _L("");
+            iDestroyedPtr = &thisDestroyed;
+             if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    						FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))  
+    				{       
+                // Connect to the SCP server, and request the code query
+                RSCPClient scpClient;
+                User::LeaveIfError( scpClient.Connect() );
+                CleanupClosePushL( scpClient );
+                status = scpClient.SecCodeQuery( password, 
+                                      RSCPClient::SCP_OK_CANCEL,
+                                      EFalse,
+                                      0 ); 
+        
+                if ( status != KErrCancel )
+                    {
+                    // Set this "true" to indicate that the input wasn't cancelled
+                    ret = ETrue;
+                    }
+                else
+                    {
+                    ret = EFalse;
+                    }                                
+        
+                CleanupStack::PopAndDestroy(); //scpClient                              
+          }
+          else
+          {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+            CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+						CleanupStack::PushL(deviceLockStatusObserver);
+						err =KErrNone;
+            TRAP(err,ret = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY));         
+						CleanupStack::PopAndDestroy(deviceLockStatusObserver);
+          }
+            
+            // check if CSecurityHandler has been "killed"
+            if ( thisDestroyed )
+                {
+                return EFalse;
                 }
-            case KErrGsmSSPasswordAttemptsViolation:
-            case KErrLocked:
-                {
-                // security code blocked! 
-                CSecuritySettings::ShowResultNoteL(R_SEC_BLOCKED, CAknNoteDialog::EErrorTone);
-                break;
-                }
-            case KErrGsm0707IncorrectPassword:
-            case KErrAccessDenied:
+    
+            iDestroyedPtr = NULL;
+            iSecurityDlg = NULL;
+            
+            if (err != KErrNone)
                 {
-                // code was entered erroneusly
-                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-                break;
+                User::Leave(err);
                 }
-            default:
-                {
-                CSecuritySettings::ShowResultNoteL(status, CAknNoteDialog::EErrorTone);
-                }
-            }
+
+            if (!ret)
+                break;
         } // while
+    }    // if
 
     iQueryCanceled = ETrue;
     return ret;
     }
 //
 // ----------------------------------------------------------
-// Cancels all security code queries
-// aStatus = -1     from destructor
-// aStatus =  1     from API. Will kill all dialogs through signal P&S
+// CSecurityHandler::CancelSecCodeQuery()    
+// Cancels PIN2 and security code queries
 // ----------------------------------------------------------
-// qtdone
-TInt CSecurityHandler::CancelOpenQuery(TInt aStatus)
+//
+EXPORT_C void CSecurityHandler::CancelSecCodeQuery()                
     {
-    RDEBUG("aStatus", aStatus);
-    RDEBUG("iQueryCanceled", iQueryCanceled);
-    TInt res = 0;
-
-    if (aStatus == 1) // also signal all other dialogs
-        {
-        RDEBUG(
-                "set KSecurityUIsDismissDialog to ESecurityUIsDismissDialogOn",
-                ESecurityUIsDismissDialogOn);
-        TInt err = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsDismissDialog, ESecurityUIsDismissDialogOn);
-        RDEBUG("err", err);
-        res += 1;
-        }
-
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::CancelSecCodeQuery()"));
+    #endif
     if (!iQueryCanceled)
         {
-        // notify all dialogs, in particular SecUiNotificationDialog::subscriberKSecurityUIsDismissDialogChanged
-        // this will cancel only the dialog which was opened by same client.
-        res += 0x10;
         iQueryCanceled = ETrue;
         if (iSecurityDlg != NULL)
             {
-            RDEBUG("deleting iSecurityDlg", 0);
-            res += 0x100;
             delete iSecurityDlg;
             }
         if (iNoteDlg != NULL)
             {
-            RDEBUG("deleting iNoteDlg", 0);
-            res += 0x1000;
             delete iNoteDlg;
             }
         iNoteDlg = NULL;
         iSecurityDlg = NULL;
         }
-    res += 0x10000;
-    RDEBUG("res", res);
-    return res;
-    }
-
-//
-// ----------------------------------------------------------
-// CSecurityHandler::CancelSecCodeQuery()    
-// Cancels PIN2 and security code queries
-// this is used by rfsHandler
-// ----------------------------------------------------------
-// qtdone
-EXPORT_C void CSecurityHandler::CancelSecCodeQuery()
-    {
-    RDEBUG("0", 0);
-
-    TInt err = CancelOpenQuery(1);
-
-    RDEBUG("err", err);
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::AskSecCodeInAutoLock()
 // for asking security code in autolock
 // ----------------------------------------------------------
-// qtdone
+//
 EXPORT_C TBool CSecurityHandler::AskSecCodeInAutoLockL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-
-    RDEBUG("0", 0);
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    
+    #ifdef __WINS__
+    return ETrue;
+    #else
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL()"));
+    #endif
     TInt res;
     CWait* wait;
-
+        
     RMobilePhone::TMobilePhoneLockSetting lockChange(RMobilePhone::ELockSetDisabled);
     RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice;
+   
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() get autolock period"));
+    #endif
 
     // get autolock period from Central Repository.
     CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
@@ -440,591 +535,650 @@
     res = repository->Get(KSettingsAutoLockTime, period);
     delete repository;
 
-    RDEBUG("res", res);
-    RDEBUG("period", period);
-
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() autolock period:%d"), res);
+    #endif
     if (res == KErrNone)
         {
         // disable autolock in Domestic OS side too if autolock period is 0.
-        if (period == 0)
+        if (period == 0 )
             {
-            RDEBUG("period", period);
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Call SetLockSetting"));
+            #endif
+
+#ifdef RD_REMOTELOCK
 
             // If remote lock is enabled, don't disable the domestic OS device lock
             // since that would render the RemoteLock useless.
             // Instead just re-set the DOS lock to enabled which as a side effect
             // requests the security code from the user.
 
-            TBool remoteLockStatus(EFalse);
+            TBool remoteLockStatus( EFalse );
             CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
 
-            if (remoteLockSettings->GetEnabled(remoteLockStatus))
+            if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
                 {
-                RDEBUG("0", 0);
-                if (remoteLockStatus)
+                if ( remoteLockStatus )
                     {
                     // Remote lock is enabled
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - RemoteLock is enabled: lockChange = RMobilePhone::ELockSetEnabled" ) );
+                    #endif // _DEBUG
+
                     lockChange = RMobilePhone::ELockSetEnabled;
-                    RDEBUG("lockChange", lockChange);
                     }
                 else
                     {
                     // Remote lock is disabled
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - RemoteLock is disabled: lockChange = RMobilePhone::ELockSetDisabled" ) );
+                    #endif // _DEBUG
+
                     lockChange = RMobilePhone::ELockSetDisabled;
-                    RDEBUG("lockChange", lockChange);
                     }
                 }
             else
                 {
                 // Failed to get remote lock status
-                RDEBUG("Failed", lockChange);
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get RemoteLock status" ) );
+                #endif // _DEBUG
                 }
 
             delete remoteLockSettings;
             remoteLockSettings = NULL;
 
-            RDEBUG("lockChange", lockChange);
-            wait = CWait::NewL();
-            RDEBUG("0", 0);
-            // this also calls PassPhraseRequiredL ???
-            RDEBUG("SetLockSetting", 1);
-            iPhone.SetLockSetting(wait->iStatus, lockType, lockChange);
-            res = KErrNone;
-            RDEBUG("WaitForRequestL", 0);
-            res = wait->WaitForRequestL();
-            RDEBUG("res", res);
-            delete wait;
-            } // from   period == 0
+#else // not defined RD_REMOTELOCK
+
+                lockChange = RMobilePhone::ELockSetDisabled;
+
+#endif // RD_REMOTELOCK
+
+                wait = CWait::NewL();
+                iPhone.SetLockSetting(wait->iStatus,lockType,lockChange);
+                res = wait->WaitForRequestL();
+                delete wait;
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() SetLockSetting RESULT:%d"), res);
+                #endif
+            }
         else
-            { // ask security code
-            RDEBUG("codeQueryNotifier 0", 0);
-            RNotifier codeQueryNotifier;
-            User::LeaveIfError(codeQueryNotifier.Connect());
-            CWait* wait = CWait::NewL();
-            CleanupStack::PushL(wait);
-            TInt queryResponse = 0;
-            TPckg<TInt> response(queryResponse);
-            RDEBUG("0", 0);
-            TSecurityNotificationPckg params;
-            params().iEvent = static_cast<TInt> (RMobilePhone::EPhonePasswordRequired);
-            params().iStartup = EFalse;
-
-            RDEBUG("StartNotifierAndGetResponse", 0);
-            codeQueryNotifier.StartNotifierAndGetResponse(wait->iStatus, KSecurityNotifierUid, params, response);
-            // this will eventually call PassPhraseRequiredL
-            RDEBUG("WaitForRequestL", 0);
-            res = wait->WaitForRequestL();
-            RDEBUG("WaitForRequestL", 1);
-            RDEBUG("res", res);
-            CleanupStack::PopAndDestroy(); // wait
-            if (res == KErrNone)
-                res = queryResponse;
-            } // from   else period == 0
-        RDEBUG("0", 0);
+            {	// ask security code
+                #if defined(_DEBUG)
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Ask sec code via notifier"));
+            	#endif
+                RNotifier codeQueryNotifier;
+                User::LeaveIfError(codeQueryNotifier.Connect());
+                CWait* wait = CWait::NewL();
+                CleanupStack::PushL(wait);
+                TInt queryResponse = 0;
+                TPckg<TInt> response(queryResponse);
+                TSecurityNotificationPckg params;
+                params().iEvent = static_cast<TInt>(RMobilePhone::EPhonePasswordRequired);
+                params().iStartup = EFalse;
+                #if defined(_DEBUG)
+    			RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() Start Notifier"));
+    			#endif
+                codeQueryNotifier.StartNotifierAndGetResponse(wait->iStatus, KSecurityNotifierUid,params, response);
+                res = wait->WaitForRequestL();
+                CleanupStack::PopAndDestroy(); // wait
+              	#if defined(_DEBUG)
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() results:"));
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() res:%d"), res);
+            	RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() queryResponse:%d"), queryResponse);
+            	#endif
+            	if(res == KErrNone)
+                	res = queryResponse;
+            }
         }
     else
-        { // can't read repository for KSettingsAutoLockTime
-        RDEBUG("KERRSOMETHING:Call SetLockSetting", 0);
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() KERRSOMETHING:Call SetLockSetting"));
+        #endif
+
+#ifdef RD_REMOTELOCK
 
         // If remote lock is enabled, don't disable the domestic OS device lock
         // since that would render the RemoteLock useless.
         // Instead just re-set the DOS lock to enabled which as a side effect
         // requests the security code from the user.
 
-        TBool remoteLockStatus(EFalse);
+        TBool remoteLockStatus( EFalse );
         CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
 
-        if (remoteLockSettings->GetEnabled(remoteLockStatus))
+        if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
             {
-            if (remoteLockStatus)
+            if ( remoteLockStatus )
                 {
                 // Remote lock is enabled
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and RemoteLock is enabled: lockChange = RMobilePhone::ELockSetEnabled" ) );
+                #endif // _DEBUG
+
                 lockChange = RMobilePhone::ELockSetEnabled;
-                RDEBUG("lockChange", lockChange);
                 }
             else
                 {
                 // Remote lock is disabled
+                #ifdef _DEBUG
+                RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and RemoteLock is disabled: lockChange = RMobilePhone::ELockSetDisabled" ) );
+                #endif // _DEBUG
+
                 lockChange = RMobilePhone::ELockSetDisabled;
-                RDEBUG("lockChange", lockChange);
                 }
             }
         else
             {
             // Failed to get remote lock status
-            RDEBUG("Failed", lockChange);
+            #ifdef _DEBUG
+            RDebug::Print( _L( "(SecUi)CSecurityHandler::AskSecCodeInAutoLockL() - Failed to get AutoLock status and failed to get RemoteLock status" ) );
+            #endif // _DEBUG
             }
 
         delete remoteLockSettings;
         remoteLockSettings = NULL;
 
-        RDEBUG("0", 0);
+#else // not defined RD_REMOTELOCK
+
+        // could not get the current autolock time... disable autolock in Domestic OS side.
+        lockChange = RMobilePhone::ELockSetDisabled;
+
+#endif // RD_REMOTELOCK
+
         wait = CWait::NewL();
-        RDEBUG("SetLockSetting", 0);
-        iPhone.SetLockSetting(wait->iStatus, lockType, lockChange);
-        RDEBUG("WaitForRequestL", 0);
+        iPhone.SetLockSetting(wait->iStatus,lockType,lockChange);
         res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
         delete wait;
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::AskSecCodeInAutoLockL() KES: SetLockSetting RESULT:%d"), res);
+        #endif
         }
-
-    RDEBUG("res", res);
+        
     switch (res)
         {
         case KErrNone:
             {
-            return ETrue;
+                return ETrue;
             }
+
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
         case KErrGsm0707IncorrectPassword:
         case KErrAccessDenied:
             {
-            RDEBUG("KErrAccessDenied", KErrAccessDenied);
-            return AskSecCodeInAutoLockL();
-            }
-        case KErrInUse:
-            {
-            RDEBUG("KErrInUse", KErrInUse);
-            return EFalse;
-            }
-        case KErrDied:
-            {
-            RDEBUG("KErrDied ", KErrDied);
-            return EFalse;
-            }
-        case KErrServerTerminated:
-            {
-            RDEBUG("KErrServerTerminated ", KErrServerTerminated);
-            return EFalse;
-            }
-        case KErrServerBusy:
-            {
-            RDEBUG("KErrServerBusy ", KErrServerBusy);
-            return EFalse;
+			return AskSecCodeInAutoLockL();
             }
         case KErrAbort:
-            {
-            RDEBUG("KErrAbort", KErrAbort);
-            return EFalse;
-            }
         case KErrCancel:
-            {
-            RDEBUG("KErrCancel", KErrCancel);
             // user pressed "cancel"
             return EFalse;
-            }
         default:
             {
-            RDEBUG("default", res);
             return AskSecCodeInAutoLockL();
             }
         }
+#endif // WINS
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::PassPhraseRequired()    
 // Handles PassPhraseRequired event
 // ----------------------------------------------------------
-// qtdone
+//
 TInt CSecurityHandler::PassPhraseRequiredL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    RDEBUG("0", 0);
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()"));
+    #endif
     TBool StartUp = iStartup;
 
-    RMobilePhone::TMobilePassword iSecUi_password;
+    RMobilePhone::TMobilePassword password;
     RMobilePhone::TMobilePassword required_fourth;
-    TInt queryAccepted = KErrCancel;
-
-    TInt autolockState = 0;
-    TInt lCancelSupported = 0;
-    TInt lEmergencySupported = 0;
-
-    TInt err(KErrGeneral);
+    TInt status;
+    TInt autolockState;
+    TInt err( KErrGeneral );
     err = RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, autolockState);
-    RDEBUG("StartUp", StartUp);
-    RDEBUG("err", err);
-    if (!StartUp)
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Autolock Status result: %d"), err);
+    #endif
+    if(!StartUp)
+        User::LeaveIfError( err );
+TBool isConditionSatisfied = EFalse;
+TInt tarmFlag=0;
+if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ))
+  	{		
+	TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );    
+    
+    if ( tRet != KErrNone )
         {
-        RDebug::Printf("%s %s (%u) might leave if StartUp=0 and err=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, err);
-        User::LeaveIfError(err);
-        }
-    TBool isConditionSatisfied = EFalse;
-    TInt tarmFlag = 0;
-    if (FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw))
-        {
-        TInt tRet = RProperty::Get(KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag);
-
-        if (tRet != KErrNone)
-            {
-            RDEBUG("Warning: failed to get TARM Admin Flag state", tRet);
-            }
-        else
-            {
-            RDEBUG("TARM flag", tarmFlag);
-            }
-
-        if ((StartUp) || (tarmFlag & KSCPFlagResyncQuery))
-            isConditionSatisfied = ETrue;
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL():\
+            Warning: failed to get TARM Admin Flag state"));
+        #endif
         }
     else
         {
-        if (StartUp)
-            isConditionSatisfied = ETrue;
-        }
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL(): TARM flag: %d"), tarmFlag );
+        #endif
+        }       
+ 
+    if ( ( StartUp ) || ( tarmFlag & KSCPFlagResyncQuery ) )
+	    			isConditionSatisfied = ETrue;  
+		}
+		else
+		{
+		    if (StartUp)
+		    isConditionSatisfied = ETrue;  
+		}
 
-    // Security code at bootup: No "cancel" softkey; Emergency calls enabled.
-    RMobilePhone::TMobilePhoneSecurityCode secCodeTypeToAsk = RMobilePhone::ESecurityCodePhonePassword;
-    RDEBUG("isConditionSatisfied", isConditionSatisfied);
-    if (isConditionSatisfied)
-        {
-        // starter or special TARM. NoCancel+Emergency
-        lCancelSupported = ESecUiCancelNotSupported;
-        lEmergencySupported = ESecUiEmergencySupported;
-        }
-    else if (autolockState > EAutolockOff)
-        {
-        // from unlock. Cancel+Emergency
-        lCancelSupported = ESecUiCancelSupported;
-        lEmergencySupported = ESecUiEmergencySupported;
-        }
-    else
-        {
-        // from settings. Cancel+NoEmergency
-        lCancelSupported = ESecUiCancelSupported;
-        lEmergencySupported = ESecUiEmergencyNotSupported;
-        }
+	// call TARM so that it verifies that configuration is in sync. This might internally accept the (default) lock code, but doesn't dismiss the query.
+	#if defined(_DEBUG)
+	RDebug::Printf( "%s %s (%u) pre isConditionSatisfied=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, isConditionSatisfied );
+  #endif
+	RSCPClient scpClientConfiguration;
+	User::LeaveIfError( scpClientConfiguration.Connect() );
+  CleanupClosePushL( scpClientConfiguration );
+	#if defined(_DEBUG)
+	RDebug::Printf( "%s %s (%u) calling CheckConfiguration KSCPComplete=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, KSCPComplete );
+  #endif
+	TInt finalConfStatus = scpClientConfiguration.CheckConfiguration( KSCPComplete );
+	#if defined(_DEBUG)
+	RDebug::Printf( "%s %s (%u) finalConfStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, finalConfStatus );
+	RDebug::Printf( "%s %s (%u) isConditionSatisfied=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, isConditionSatisfied );
+  #endif
+	CleanupStack::PopAndDestroy();	// scpClientConfiguration
 
-    CSecQueryUi *iSecQueryUi;
-    iSecQueryUi = CSecQueryUi::NewL();
-    iQueryCanceled = EFalse;
-    TInt lType = ESecUiSecretSupported | ESecUiAlphaSupported | lCancelSupported | lEmergencySupported | secCodeTypeToAsk;
-    RDEBUG("lType", lType);
-    TBuf<0x100> title;
-    title.Zero();
-    HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_sec_code"));
-    title.Append(stringHolder->Des());
-    CleanupStack::PopAndDestroy(stringHolder);
-    queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_SECURITY_CODE_MIN_LENGTH, SEC_C_SECURITY_CODE_MAX_LENGTH, lType);
-    RDEBUG("iSecUi_password", 0);
-    RDEBUGSTR(iSecUi_password);
-    RDEBUG("queryAccepted", queryAccepted);
-    iQueryCanceled = ETrue;
-    delete iSecQueryUi;
-
-    TBool wasCancelledOrEmergency = EFalse;
-    RDEBUG("KFeatureIdSapDeviceLockEnhancements",
-            KFeatureIdSapDeviceLockEnhancements);
-    if ((queryAccepted == KErrAbort /* =emergency */) || (queryAccepted == KErrCancel))
-        wasCancelledOrEmergency = ETrue;
-    RDEBUG("wasCancelledOrEmergency", wasCancelledOrEmergency);
-    if (wasCancelledOrEmergency)
+		if (isConditionSatisfied)
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 1"));
+        #endif
+        // Security code at bootup: No "cancel" softkey; Emergency calls enabled.
+      if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    			FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+    		{                   	    		    		    		
+            // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+                
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_ETEL,
+                                             ETrue,
+                                             KSCPEtelRequest );              
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog            
+        
+            CleanupStack::PopAndDestroy();  //scpClient                                         
+      }  
+      else
+      {     
+        CCodeQueryDialog* securityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+        if(AknLayoutUtils::PenEnabled())
+            securityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            securityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        securityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(securityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    		{
+    		// … -  add data that cover ui is interested in
+    		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    		covercl->BufStream().CommitL(); // no more data to send so commit buf
+     		}  
+        #endif //__COVER_DISPLAY
+        status = securityDlg->ExecuteLD(R_SECURITY_REQUEST_QUERY);
+			}
+        }
+    else if ( (autolockState > EAutolockOff))    
         {
-        RDEBUG("StartUp", StartUp);
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 2"));
+        #endif
+            // Autolock is On. Security event came from user pressing "unlock".
+            // Emergency call support must be enabled and there must be a "cancel" softkey.
+         if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+    				FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))     
+		    		{                                    
+     	    // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+              
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_CANCEL,
+                                             ETrue,
+                                             KSCPEtelRequest );
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog   
+        
+            CleanupStack::PopAndDestroy(); //scpClient
+		    		}
+			    else
+			    {
+        CCodeQueryDialog* securityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+        if(AknLayoutUtils::PenEnabled())
+            securityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            securityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        securityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(securityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
+        status = securityDlg->ExecuteLD(R_SECURITY_QUERY);
+			     }
+        }
+    else    
+        {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() Dialog 3"));
+        #endif
+            // Code query due to a setting change; "Cancel" softkey active;
+            // no emergency call support.
+	        if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) &&
+	    			FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+	    		{
+     	    // Connect to the SCP server, and request the code query
+            RSCPClient scpClient;
+            User::LeaveIfError( scpClient.Connect() );
+            CleanupClosePushL( scpClient );
+              
+            status = scpClient.SecCodeQuery( password, 
+                                             RSCPClient::SCP_OK_CANCEL,
+                                             EFalse,
+                                             KSCPEtelRequest );            
+            // Note that SecCodeQuery doesn't indicate the return value from the dialog   
+        
+            CleanupStack::PopAndDestroy(); //scpClient
+			    }
+			    else
+			    {
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowSecCode); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
+        // read a flag to see whether the query is SecUi originated.
+        TInt secUiOriginatedQuery(ESecurityUIsETelAPIOriginated);
+        RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+        CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        CSecUiLockObserver* callStatusObserver = NULL;
+        if(secUiOriginatedQuery == ESecurityUIsSystemLockOriginated)
+            {
+                callStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiCallStateObserver);
+                CleanupStack::PushL(callStatusObserver);
+            }
+        status = iSecurityDlg->ExecuteLD(R_SECURITY_QUERY);
+        
+        if(callStatusObserver == NULL)
+            CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+        else
+            CleanupStack::PopAndDestroy(3); //deviceLockStatusObserver, queryStatusObserver, callStatusObserver
+        iSecurityDlg = NULL;
+			      }
+        }
+TBool isCondition = EFalse;		
+if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+{
+    if (!status || (status == ESecUiEmergencyCall)  
+        || (status == EAknSoftkeyEmergencyCall) || (status == ESecUiDeviceLocked))
+    isCondition = ETrue;
+}
+else
+{
+    if  ( ( status == KErrCancel ) || (status == ESecUiEmergencyCall)  ||
+         (status == EAknSoftkeyEmergencyCall) || (status == ESecUiDeviceLocked))
+    isCondition = ETrue;
+}
+		if (isCondition)
+        {
+		#if defined(_DEBUG)
+		RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() DIALOG ERROR"));
+		#endif
         if (!StartUp)
             {
-            RDEBUG("AbortSecurityCode", 0);
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() ABORT CALLED!!!!!!"));
+            #endif
             iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePhonePassword);
-            RDEBUG("AbortSecurityCode", 1);
             }
         return KErrCancel;
         }
 
     RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePhonePassword;
-    CWait* wait = NULL;
-    TInt status = KErrNone;
-
-		// Validate the code using SCP. This is needed to check expiration
-    RDEBUG("AbortSecurityCode", 0);
-    RSCPClient scpClient;
-    RDEBUG("scpClient.Connect", 0);
-    TInt tRet = scpClient.Connect();
-    RDEBUG("tRet", tRet);
-
-    CleanupClosePushL(scpClient);
-
-    RArray<TDevicelockPolicies> aFailedPolicies;
-    TDevicelockPolicies failedPolicy;
-    TInt retLockcode = KErrNone;
-    RMobilePhone::TMobilePassword aISACode;
-    TInt aFlags = 0;
-    RDEBUG("scpClient.VerifyCurrentLockcode", 0);
-    // this validate on ISA . No need to do iPhone.VerifySecurityCode
-    retLockcode = scpClient.VerifyCurrentLockcode(iSecUi_password, aISACode, aFailedPolicies, aFlags);
-    RDEBUG("retLockcode", retLockcode);
-
-    RDEBUG("aISACode", 0);
-    RDEBUGSTR(aISACode);
-
-    RDEBUG("aFailedPolicies.Count()", aFailedPolicies.Count());
-    RDEBUG("EDeviceLockPasscodeExpiration", EDeviceLockPasscodeExpiration); // 8
-    TInt failedEDeviceLockPasscodeExpiration = 0;
-    for (TInt i = 0; i < aFailedPolicies.Count(); i++)
-        {
-        failedPolicy = aFailedPolicies[i];
-        RDEBUG("failedPolicy", failedPolicy);
-        if (failedPolicy == EDeviceLockPasscodeExpiration)
-            failedEDeviceLockPasscodeExpiration = EDeviceLockPasscodeExpiration;
-        }
-    RDEBUG("Close", 0);
-    scpClient.Close();
-    RDEBUG("PopAndDestroy", 0);
-    CleanupStack::PopAndDestroy(); //scpClient
-
-		RDEBUG("failedEDeviceLockPasscodeExpiration", failedEDeviceLockPasscodeExpiration);
-    if (failedEDeviceLockPasscodeExpiration > 0)
-        {
-    		// the password has expired. Note that it has NOT been validated. It will be revalidated inside ChangeSecCodeParamsL
-        RMobilePhone::TMobilePassword iNewPassword;
-        TInt iFlags = 0;
-        iNewPassword.Copy(_L(""));
-        TBuf<0x80> iCaption;
-        iCaption.Copy(_L("ChangeSecCodeL")); // no need to translate because it's not used
-        TInt iShowError = 1;
-        CSecuritySettings* iSecSettings;
-        iSecSettings = CSecuritySettings::NewL();
-        TSecUi::InitializeLibL();
-        RDEBUG("calling ChangeSecCodeParamsL", 0);
-        status = iSecSettings->ChangeSecCodeParamsL(iSecUi_password, iNewPassword, iFlags, iCaption, iShowError);
-        // note that it might have been aborted. The error KErrAbort is shown in this method, not inside ChangeSecCodeParamsL
-        if(status==KErrAccessDenied || status==KErrGsm0707IncorrectPassword)
-        	{
-        	// the password expired, but the user typed wrongly. The error was already displayed.
-        	RDEBUG("SCP returned ", KErrAccessDenied);
-        	status=R_CODES_DONT_MATCH;
-        	RDEBUG("SCP changed to R_CODES_DONT_MATCH", R_CODES_DONT_MATCH);
-        	}
-        RDEBUG("status", status);
-        RDEBUG("iNewPassword", 0);
-        RDEBUGSTR(iNewPassword);
-        TSecUi::UnInitializeLib();
-        RDEBUG("deleting iSecSettings", 0);
-        delete iSecSettings;
-        RDEBUG("deleted iSecSettings", 1);
-        }
-    else
-        {
-        RDEBUG( "wait", 0 );
+     CWait* wait = NULL;
+if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+{ 
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() VerifySecurityCode"));
+        #endif
         wait = CWait::NewL();
-        RDEBUG("VerifySecurityCode", 0);
-        iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, required_fourth);
-        RDEBUG("WaitForRequestL",
-                0);
+        iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
         status = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL status",
-                status);
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() VerifySecurityCode STATUS: %d"), status);
+        #endif
         delete wait;
-#ifdef __WINS__
-        if (status == KErrNotSupported || status == KErrTimedOut)
-            {
-            RDEBUG( "status", status );
-            status = KErrNone;
-            }
-#endif
-        }
-
+  }
+  else
+  {
+		wait = NULL;
+  }
+    
     TInt returnValue = status;
-    RDEBUG("tarmFlag", tarmFlag);
-    RDEBUG("StartUp", StartUp);
-    RDEBUG("status", status);
-    switch (status)
-        {
+    switch(status)
+        {        
         case KErrNone:
-            // code approved
-            {
-            RDEBUG("KErrNone", KErrNone);
-            if( failedEDeviceLockPasscodeExpiration > 0)
-            	{
-            	RDEBUG("code has just been changed. No need to show Confirmation note. failedEDeviceLockPasscodeExpiration", failedEDeviceLockPasscodeExpiration);
-            	}
-            else
-            	{
-            	CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
-            	}
-            RDEBUG("R_CONFIRMATION_NOTE", R_CONFIRMATION_NOTE);
-            if (FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw))
-                {
-                RDEBUG("KFeatureIdSapTerminalControlFw",
-                        KFeatureIdSapTerminalControlFw);
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() KErrNone"));
+            #endif
+            // code approved 
+        if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw))    
+        {
                 // Unset the admin flag if set
-                if (tarmFlag & KSCPFlagResyncQuery)
-                    {
-                    TInt tRet = RProperty::Get(KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag);
-
-                    if (tRet == KErrNone)
-                        {
-                        tarmFlag &= ~KSCPFlagResyncQuery;
-                        tRet = RProperty::Set(KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag);
-                        }
-
-                    if (tRet != KErrNone)
-                        {
-                        RDEBUG(
-                                "FAILED to unset TARM Admin Flag tRet=",
-                                tRet);
-                        }
-                    }
-                if (!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements))
+                if ( tarmFlag & KSCPFlagResyncQuery )
                     {
-                    RDEBUG("KFeatureIdSapDeviceLockEnhancements", KFeatureIdSapDeviceLockEnhancements);
-                    RSCPClient scpClient;
-                    RDEBUG("scpClient.Connect", 0);
-                    TInt tRet = scpClient.Connect();
-                    RDEBUG("tRet", tRet);
-                    User::LeaveIfError(tRet);
-                    RDEBUG("scpClient.Connect", 1);
-                    CleanupClosePushL(scpClient);
-                    TSCPSecCode newCode;
-                    newCode.Copy(iSecUi_password);
-                    RDEBUG(
-                            "!!!!!!! ***** TODO deprecated **** !!!!! scpClient.StoreCode",
-                            0);
-                    scpClient.StoreCode(newCode);
-                    RDEBUG("scpClient.StoreCode", 1);
-                    // TODO check whether code is expired.
-                    // This should be done by TARM, and they should ask to change the code
-                    CleanupStack::PopAndDestroy(); //scpClient
-                    }
+                    TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );
+                    
+                    if ( tRet == KErrNone )
+	                    {
+	                    tarmFlag &= ~KSCPFlagResyncQuery;
+	                    tRet = RProperty::Set( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag );
+	                    }
+	            
+	                if ( tRet != KErrNone )
+                        {
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL():\
+                            FAILED to unset TARM Admin Flag"));
+                        #endif
+                        }                    
+                    }                    	            
+				        if(!FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements)) 
+				        {           
+    			RSCPClient scpClient;
+                User::LeaveIfError( scpClient.Connect() );
+                CleanupClosePushL( scpClient );
+                TSCPSecCode newCode;
+                newCode.Copy( password );
+                scpClient.StoreCode( newCode );
+                CleanupStack::PopAndDestroy(); //scpClient
+                }
 
-                }
-            RDEBUG("StartUp", StartUp);
+          }
+        		
             if (StartUp)
                 {
+                #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; get autolock period."));
+                #endif
+
                 // get autolock period from Central Repository.
                 CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
                 TInt period = 0;
                 TInt res = repository->Get(KSettingsAutoLockTime, period);
                 delete repository;
-                RDEBUG("res", res);
-                RDEBUG("period", period);
-                _LIT_SECURITY_POLICY_PASS( KReadPolicy);
-                _LIT_SECURITY_POLICY_C1(KWritePolicy,
-                        ECapabilityWriteDeviceData);
-                RProperty::Define(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, RProperty::EInt, KReadPolicy, KWritePolicy);
+  
+     						_LIT_SECURITY_POLICY_PASS(KReadPolicy); 
+								_LIT_SECURITY_POLICY_C1(KWritePolicy, ECapabilityWriteDeviceData);
+    						RProperty::Define(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, RProperty::EInt, KReadPolicy, KWritePolicy);
                 RProperty::Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOff);
-                RDEBUG("KCoreAppUIsAutolockStatus",
-                        KCoreAppUIsAutolockStatus);
+                #if defined(_DEBUG)
+								RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() EAutolockOff")); 
+								#endif																
 
                 if (res == KErrNone)
                     {
                     // disable autolock in Domestic OS side too if autolock period is 0.
-                    if (period == 0)
+                    if (period == 0 )
                         {
-                        // Don't disable the domestic OS device lock
+#ifdef RD_REMOTELOCK
+                        // If remote lock is enabled, don't disable the domestic OS device lock
                         // since that would render the RemoteLock useless.
 
-                        TBool remoteLockStatus(EFalse);
+                        TBool remoteLockStatus( EFalse );
                         CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
 
-                        if (remoteLockSettings->GetEnabled(remoteLockStatus))
+                        if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
                             {
-                            if (!remoteLockStatus)
+                            if ( !remoteLockStatus )
                                 {
                                 // Remote lock is disabled
-                                RDEBUG(
-                                        "Autolock and RemoteLock are disabled -> disable DOS device lock",
-                                        0);
+                                #ifdef _DEBUG
+                                RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Autolock and RemoteLock are disabled -> disable DOS device lock" ) );
+                                #endif // _DEBUG
+
                                 // Disable DOS device lock setting
-                                RDEBUG(
-                                        "iCustomPhone.DisablePhoneLock",
-                                        0);
                                 wait = CWait::NewL();
-                                iCustomPhone.DisablePhoneLock(wait->iStatus, iSecUi_password);
-                                RDEBUG("WaitForRequestL", 0);
-                                status = wait->WaitForRequestL();
-                                RDEBUG("WaitForRequestL", status);
+                                iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                                wait->WaitForRequestL();
                                 delete wait;
                                 }
                             }
                         else
                             {
                             // Failed to get remote lock status
-                            RDEBUG(
-                                    "Autolock is disabled, but failed to get RemoteLock status, so do nothing",
-                                    0);
+                            #ifdef _DEBUG
+                            RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Autolock is disabled, but failed to get RemoteLock status, so do nothing." ) );
+                            #endif // _DEBUG
                             }
 
                         delete remoteLockSettings;
                         remoteLockSettings = NULL;
 
+#else // not defined RD_REMOTELOCK
+
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; DisablePhoneLock."));
+                        #endif
+                        wait = CWait::NewL();
+                        iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                        wait->WaitForRequestL();
+                        #if defined(_DEBUG)
+                        RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; DisablePhoneLock completed."));
+                        #endif
+                        delete wait;
+#endif // RD_REMOTELOCK
                         }
                     }
-                else // error getting repository
+                else
                     {
-                    RDEBUG("error getting repository", 0);
-                    // Don't disable the domestic OS device lock
+#ifdef RD_REMOTELOCK
+                    // If remote lock is enabled, don't disable the domestic OS device lock
                     // since that would render the RemoteLock useless.
 
-                    TBool remoteLockStatus(EFalse);
+                    TBool remoteLockStatus( EFalse );
                     CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL();
 
-                    if (remoteLockSettings->GetEnabled(remoteLockStatus))
+                    if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
                         {
-                        if (!remoteLockStatus)
+                        if ( !remoteLockStatus )
                             {
                             // Remote lock is disabled
-                            RDEBUG("iCustomPhone.DisablePhoneLock", 0);
+                            #ifdef _DEBUG
+                            RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Failed to get Autolock period and RemoteLock is disabled -> disable DOS device lock" ) );
+                            #endif // _DEBUG
+
                             wait = CWait::NewL();
-                            iCustomPhone.DisablePhoneLock(wait->iStatus, iSecUi_password);
-                            RDEBUG("WaitForRequestL", 0);
-                            status = wait->WaitForRequestL();
-                            RDEBUG("WaitForRequestL status", status);
+                            iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                            wait->WaitForRequestL();
                             delete wait;
                             }
                         }
                     else
                         {
                         // Failed to get remote lock status
-                        RDEBUG(
-                                "Failed to get Autolock period and RemoteLock status, so do nothing",
-                                0);
+                        #ifdef _DEBUG
+                        RDebug::Print( _L( "(SecUi)CSecurityHandler::PassPhraseRequiredL() - Failed to get Autolock period and RemoteLock status, so do nothing." ) );
+                        #endif // _DEBUG
                         }
 
                     delete remoteLockSettings;
                     remoteLockSettings = NULL;
 
-                    }
+#else // not defined RD_REMOTELOCK
 
-                } // no Startup
-            }
-            break;
+                    #if defined(_DEBUG)
+                    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; Could not get autolock period."));
+                    #endif
+                    // could not get the current autolock time... disable autolock in Domestic OS side. 
+                    wait = CWait::NewL();
+                    iCustomPhone.DisablePhoneLock(wait->iStatus,password);
+                    wait->WaitForRequestL();
+                    #if defined(_DEBUG)
+                    RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL()KErrNone: Startup; NO AUTOLOCK PERIOD; DisablePhoneLock completed."));
+                    #endif
+                    delete wait;
+
+#endif // RD_REMOTELOCK
+                    }
+                
+                }
+
+            break;    
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
-        		{
             // security code blocked!
-            RDEBUG("KErrLocked", KErrLocked)
-            ;
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() ErrGsmSSPasswordAttemptsViolation"));
+            #endif
             CSecuritySettings::ShowResultNoteL(R_SEC_BLOCKED, CAknNoteDialog::EErrorTone);
-          	}
             break;
         case KErrGsm0707IncorrectPassword:
         case KErrAccessDenied:
-        		{
-            RDEBUG("KErrAccessDenied", KErrAccessDenied);
-            // The Settings caller might retry
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() KErrGsm0707IncorrectPassword"));
+            #endif
             CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-          	}
-            break;
-        case R_CODES_DONT_MATCH:	// if password was supposed to be changed, but it failed (the initial verification)
-        		{
-            RDEBUG("R_CODES_DONT_MATCH", R_CODES_DONT_MATCH);
-            // Error was already displayed
-            returnValue = KErrAccessDenied;
-          	}
             break;
         default:
-        		{
-            RDEBUG("default", status);
+            #if defined(_DEBUG)
+            RDebug::Print(_L("(SECUI)CSecurityHandler::PassPhraseRequiredL() DEFAULT"));
+            #endif
             CSecuritySettings::ShowErrorNoteL(status);
-            // The Settings caller might retry
-          	}
             break;
         }
-    RDEBUG("returnValue", returnValue);
+        
     return returnValue;
     }
 //
@@ -1032,166 +1186,208 @@
 // CSecurityHandler::Pin1Required()    
 // Handles Pin1Required event
 // ----------------------------------------------------------
-// qtdone
+//
 TInt CSecurityHandler::Pin1RequiredL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    RDEBUG("0", 0);
-
-    RMobilePhone::TMobilePassword iSecUi_password;
-    TInt lCancelSupported = ESecUiCancelNotSupported;
-    TInt lEmergencySupported = ESecUiEmergencyNotSupported;
-    TInt queryAccepted = KErrCancel;
-    TInt lAlphaSupported = 0;
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    
+    RMobilePhone::TMobilePassword password;
     RMobilePhone::TMobilePassword required_fourth;
     RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePin1;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
-    TBool StartUp = ETrue;
+    TBool StartUp = ETrue;   
     TInt secUiOriginatedQuery(ESecurityUIsSecUIOriginatedUninitialized);
     TInt err = KErrNone;
     TInt res = KErrGeneral;
     CWait* wait = CWait::NewL();
     CleanupStack::PushL(wait);
-    RDEBUG("0", 0);
+    
 
     StartUp = iStartup;
 
-    RDEBUG("StartUp", StartUp);
-    if (!StartUp)
-        {
-        // read a flag to see whether the query is SecUi originated. For example, from CSecuritySettings::ChangePinRequestParamsL
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL()"));
+    #endif
+
+    if(!StartUp)
+    {
+        // read a flag to see whether the query is SecUi originated.
         err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
-        if (err != KErrNone)
-            {
-            RDEBUG("FAILED to get the SECUI query Flag err", err);
-            }
-        }
-    RDEBUG("err", err);
-    RDEBUG("secUiOriginatedQuery", secUiOriginatedQuery);
-    RDEBUG("ESecurityUIsSecUIOriginated", ESecurityUIsSecUIOriginated);
-    if (StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
+        
+    if ( err != KErrNone )
         {
-        RDEBUG("0", 0);
-        lCancelSupported = ESecUiCancelNotSupported;
-        lEmergencySupported = ESecUiEmergencySupported;
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL():\
+            FAILED to get the SECUI query Flag: %d"), err);
+        #endif
         }
     else
-        {
-        lCancelSupported = ESecUiCancelSupported;
-        lEmergencySupported = ESecUiEmergencyNotSupported;
-        // it will be RMobilePhone::ESecurityCodePin1 , equivalent to ESecUiNone
-        }
-    wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-    RDEBUG("GetSecurityCodeInfo", 0);
-    iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
-    res = wait->WaitForRequestL();
+            {
+               #if defined(_DEBUG)
+                RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL():\
+                    SECUI query Flag: %d"), secUiOriginatedQuery);
+                #endif 
+            }
+    }  
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Execute dlg"));
+    #endif
 
-    RDEBUG("res", res);
-#ifdef __WINS__
-    RDEBUG("emulator can't read PIN attempts", res);
-    res = KErrNone;
-    codeInfo.iRemainingEntryAttempts = 3;
-#endif
-    User::LeaveIfError(res);
-
-    RDEBUG("codeInfo.iRemainingEntryAttempts",
-            codeInfo.iRemainingEntryAttempts);
-    if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
-        codeInfo.iRemainingEntryAttempts = -1;
+    if(StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
+    {	
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN1); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+        #endif //__COVER_DISPLAY
 
-    /* request PIN using QT */
-    CSecQueryUi *iSecQueryUi;
-    RDEBUG("CSecQueryUi", 0);
-    iSecQueryUi = CSecQueryUi::NewL();
-    iQueryCanceled = EFalse;
-    RDEBUG("SecQueryDialog", 1);
-    // ESecUiCodeEtelReqest/ESecUiNone might be useful
-    lAlphaSupported = ESecUiAlphaNotSupported;
-    TBuf<0x100> title;
-    title.Zero();
-    HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_pin_code"));
-    title.Append(stringHolder->Des());
-    CleanupStack::PopAndDestroy(stringHolder);
-    title.Append(_L("$"));
-    title.AppendNum(codeInfo.iRemainingEntryAttempts);
-    TInt amode = ESecUiSecretSupported | lAlphaSupported | lCancelSupported | lEmergencySupported | secCodeType;
-    RDEBUG("amode", amode);
-    queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, amode);
-    RDEBUG("iSecUi_password", 0);
-    RDEBUGSTR(iSecUi_password);
-    iQueryCanceled = ETrue;
-    delete iSecQueryUi;
-    RDEBUG("queryAccepted", queryAccepted);
-    /* end request PIN using QT */
-
-    if (queryAccepted == KErrAbort) // emergency call
-        {
-        RDEBUG("queryAccepted", queryAccepted);
-        CleanupStack::PopAndDestroy(wait); // this is needed
-        return KErrCancel;
-        }
-    if (lCancelSupported && (queryAccepted == KErrCancel))
-        {
-        // cancel code request
-        RDEBUG("AbortSecurityCode", 0);
-        iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePin1);
-        RDEBUG("AbortSecurityCode", 1);
-        CleanupStack::PopAndDestroy(wait); // this is needed
-        return KErrCancel;
-        }
-
-    RDEBUG("iSecUi_password", 0);
-    RDEBUGSTR(iSecUi_password);
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, required_fourth);
-    RDEBUG("WaitForRequestL", 0);
+        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+        iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        #if defined(_DEBUG)
+        TInt attempts(codeInfo.iRemainingEntryAttempts);
+        RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Remaining Attempts query status: %d"), res);
+        RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Remaining Attempts: %d"), attempts);
+        #endif
+        User::LeaveIfError(res);
+        
+        if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts )
+            res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN_ATTEMPT);
+                res = iSecurityDlg->ExecuteLD(R_PIN_REQUEST_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+        
+        iSecurityDlg = NULL;
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() Execute dlg RESULT: %d"), res);
+    	#endif
+        if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            { 
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() R_PIN_REQUEST_QUERY CANCEL!"));
+            #endif
+            CleanupStack::PopAndDestroy(wait);   
+            return KErrCancel;
+            }
+    }
+    else
+    {	
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+		if (covercl) // returns null if __COVER_DISPLAY is not defined
+    		{
+    		// … -  add data that cover ui is interested in
+    		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN1); // adds int to additional data to be posted to cover ui
+    		covercl->BufStream().CommitL(); // no more data to send so commit buf
+     		}  
+        #endif //__COVER_DISPLAY
+        
+        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+        iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+        res = wait->WaitForRequestL();
+        User::LeaveIfError(res);
+        
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+        CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        
+        if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts )
+            res = iSecurityDlg->ExecuteLD(R_PIN_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts );
+                res = iSecurityDlg->ExecuteLD(R_PIN_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN_ATTEMPT);
+                res = iSecurityDlg->ExecuteLD(R_PIN_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+        
+        CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+        iSecurityDlg = NULL;
+        if( !res || (res == ESecUiDeviceLocked))
+            {
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL() R_PIN_QUERY cancel!"));
+            #endif 
+            // cancel code request
+            iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePin1);
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }      
+    }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityNotifier::Pin1RequiredL()VerifySecurityCode"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
     res = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL res", res);
-    CleanupStack::PopAndDestroy(wait);
-
+    CleanupStack::PopAndDestroy(wait); 
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin1RequiredL() VerifySecurityCode STATUS: %d"), res);
+    #endif
     TInt returnValue = res;
-    switch (res)
-        {
+    switch(res)
+        {        
         case KErrNone:
-            // code approved
-            RDEBUG("code approved", res)
-            ;
-            if (lCancelSupported == ESecUiCancelNotSupported)
-                { // OK note is not displayed in boot-up, to make things faster
-                CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
-                }
+            // code approved 
+            #if defined(_DEBUG)
+            RDebug::Print(_L("CSecurityHandler::Pin1RequiredL()code approved "));
+            #endif
+            CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
             break;
         case KErrGsm0707IncorrectPassword:
         case KErrAccessDenied:
             // code was entered erroneously
             CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-            if (StartUp)
-                {
-                returnValue = Pin1RequiredL();
-                }
+            if(StartUp)
+            {
+            returnValue = Pin1RequiredL();
+            }
             break;
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
             // code blocked; show error note and terminate.
-            // what if not during Startup? Probably it's Ok since the SIM would had also failed at StartUp
-            if (StartUp)
-                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            // code blocked
+            if(StartUp)
+                CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); 
             break;
         case KErrGsm0707SimWrong:
             // sim lock active
-            // no error? This is strange
             break;
         default:
-        		{
-            CSecuritySettings::ShowErrorNoteL(res);
-            if (StartUp)
-                {
-                returnValue = Pin1RequiredL();
-                }
+            CSecuritySettings::ShowErrorNoteL(res);        
+            if(StartUp)
+            {        
+            returnValue = Pin1RequiredL();
             }
             break;
         }
@@ -1201,180 +1397,178 @@
 // ----------------------------------------------------------
 // CSecurityHandler::Puk1Required()
 // Handles Puk1Required event
-// First asks the PUK1, then verifies, then the newPIN + re-type , and then writes . This is odd, but the API needs the PUK and newPIN in same step.
-// Afterwards, the PIN1 might be asked (because the initial program still needs it)
 // ----------------------------------------------------------
-// qtdone
+//
 TInt CSecurityHandler::Puk1RequiredL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    RDEBUG("0", 0);
-    TInt queryAccepted = KErrCancel;
-    RMobilePhone::TMobilePassword puk1_password;
-    RMobilePhone::TMobilePassword aNewPinPassword;
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL()"));
+    #endif            
+    RMobilePhone::TMobilePassword aPassword;
+    RMobilePhone::TMobilePassword aNewPassword;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
     RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
     blockCodeType = RMobilePhone::ESecurityCodePuk1;
     CWait* wait = CWait::NewL();
     CleanupStack::PushL(wait);
-
+    
     TBool StartUp(ETrue);
     StartUp = iStartup;
 
-    TInt res(KErrCancel); // for the first try
+    TInt res(KErrNone);
     wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Get Code info"));
+    #endif
+    iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
+    res = wait->WaitForRequestL();
+    
     TInt thisTry = 0;
 
-    // If there was a problem (as there might be in case we're dropping off SIM Access Profile); try again a couple of times.
-    while (res != KErrNone && (thisTry++) <= KTriesToConnectServer)
+	// If there was a problem (as there might be in case we're dropping off SIM Access Profile); try again a couple of times.
+	while ( res != KErrNone && ( thisTry++ ) <= KTriesToConnectServer )
         {
-        if (thisTry > 0)
-            User::After(KTimeBeforeRetryingRequest);
-        RDEBUG("GetSecurityCodeInfo", 0);
+        User::After( KTimeBeforeRetryingRequest );
         iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
-        RDEBUG("WaitForRequestL", 0);
         res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
-        }
-    RDEBUG("res", res);
-    // If there's still an error we're doomed. Bail out.
-    User::LeaveIfError(res);
-
-    RDEBUG("StartUp", StartUp);
-    RDEBUG("codeInfo.iRemainingEntryAttempts",
-            codeInfo.iRemainingEntryAttempts);
-    TInt attempts(codeInfo.iRemainingEntryAttempts);
-    RDEBUG("attempts", attempts);
-    // show the last "Code Error" note of PIN verify result here so it won't be left under the PUK1 dialog
-    if (!StartUp && (attempts == KMaxNumberOfPUKAttempts))
-        CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-
-    if (attempts == KMaxNumberOfPINAttempts)
-        attempts = -1;
-
-    CSecQueryUi *iSecQueryUi;
-    RDEBUG("CSecQueryUi", 0);
-    iSecQueryUi = CSecQueryUi::NewL();
-    iQueryCanceled = EFalse;
-    RDEBUG("SecQueryDialog", 1);
-    // ESecUiCodeEtelReqest/ESecUiNone might be useful
-    TBuf<0x100> title;
-    title.Zero();
-    HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_puk_code"));
-    title.Append(stringHolder->Des());
-    CleanupStack::PopAndDestroy(stringHolder);
-    title.Append(_L("$"));
-    title.AppendNum(attempts);
-    TInt lSecUiCancelSupported = ESecUiCancelSupported | ESecUiEmergencyNotSupported;
-    if (StartUp) // how to know whether PUK comes from failing at Starter, or failing at any other PIN (i.e. changing PIN, or changing PIN-request) ???
-        lSecUiCancelSupported = ESecUiCancelNotSupported | ESecUiEmergencySupported;
-    queryAccepted = iSecQueryUi->SecQueryDialog(title, puk1_password, SEC_C_PUK_CODE_MIN_LENGTH, SEC_C_PUK_CODE_MAX_LENGTH, ESecUiSecretNotSupported | ESecUiAlphaNotSupported
-            | lSecUiCancelSupported | ESecUiPukRequired);
-    RDEBUG("puk1_password", 0);
-    RDEBUGSTR(puk1_password);
-    iQueryCanceled = ETrue;
-    delete iSecQueryUi;
-    RDEBUG("queryAccepted", queryAccepted);
-
-    if ((queryAccepted == KErrAbort) || (queryAccepted == KErrCancel))
-        {
-        CleanupStack::PopAndDestroy(wait); // this is needed
-        return KErrCancel;
         }
-
-    // send code
-    // first we verify the puk. For this, we reset the PIN to the same as the PUK
-    // Hopefully this will never fail in the case "new PIN too long"
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, blockCodeType, puk1_password, puk1_password);
-    RDEBUG("WaitForRequestL", 0);
-    res = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL res", res);
-    CleanupStack::PopAndDestroy(wait);
-
-    TInt returnValue = res;
-    switch (res)
-        {
-        case KErrNone:
-            // code approved -> note . The process continue and new-pin is requested
-            CSecuritySettings::ShowResultNoteL(res, CAknNoteDialog::EConfirmationTone);
-            break;
-        case KErrGsm0707IncorrectPassword:
-        case KErrAccessDenied:
-            // wrong PUK code -> note -> ask PUK code again        
-            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-            returnValue = Puk1RequiredL();
-            break;
-        case KErrGsm0707SimWrong:
-            // sim lock active
-            // no message ?
-            break;
-        case KErrGsmSSPasswordAttemptsViolation:
-        case KErrLocked:
-            // sim card rejected.
-            break;
-        default:
-            CSecuritySettings::ShowErrorNoteL(res);
-            returnValue = Puk1RequiredL();
-            break;
-        }
-
-    // Now the PUK1 is validated. It's time for asking the new PIN1
-    RDEBUG("new wait", 0);
-    wait = CWait::NewL();
-    CleanupStack::PushL(wait);
-        {
-        // new-pin query
-        CSecQueryUi * iSecQueryUi;
-        RDEBUG("CSecQueryUi", 0);
-        iSecQueryUi = CSecQueryUi::NewL();
-        iQueryCanceled = EFalse;
-        RDEBUG("SecQueryDialog", 1);
-        TBuf<0x100> title;
-        title.Zero();
-        HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_pin_code"));
-        title.Append(stringHolder->Des());
-        CleanupStack::PopAndDestroy(stringHolder);
-        title.Append(_L("|"));
-        HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_verify_new_pin_code"));
-        title.Append(stringHolder2->Des());
-        CleanupStack::PopAndDestroy(stringHolder2);
-        queryAccepted = iSecQueryUi->SecQueryDialog(title, aNewPinPassword, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported
-                | ESecUiPukRequired);
-        RDEBUG("aNewPinPassword", 0);
-        RDEBUGSTR(aNewPinPassword);
-        iQueryCanceled = ETrue;
-        delete iSecQueryUi;
-        RDEBUG("queryAccepted", queryAccepted);
-        }
-
-    if ((queryAccepted == KErrAbort) || (queryAccepted == KErrCancel))
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Get Code info result: %d"), res);
+    #endif
+    //If there's still an error we're doomed. Bail out.
+    User::LeaveIfError(res);
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Show last note"));
+    #endif
+    //show the last "Code Error" note of PIN verify result here so it won't be left under the PUK1 dialog
+    if(!StartUp && (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts))
+        CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+    
+    // ask PUK code
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK_CODE_MIN_LENGTH,SEC_C_PUK_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPUK1); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY   
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Show dialog"));
+    #endif    
+    if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+            res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY);
+    else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PUK_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+         res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);
+       }
+    else
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PUK_ATTEMPT);
+         res = iSecurityDlg->ExecuteLD(R_PUK_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);   
+       }
+    
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
         {
         CleanupStack::PopAndDestroy(wait);
         return KErrCancel;
         }
+        
+    RMobilePhone::TMobilePassword verifcationPassword;
+    // new pin code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    res = iSecurityDlg->ExecuteLD(R_NEW_PIN_CODE_REQUEST_QUERY);
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+        {
+        CleanupStack::PopAndDestroy(wait);    
+        return KErrCancel;
+        }
+  
+    // verification code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+    if(AknLayoutUtils::PenEnabled())
+        iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+    else
+        iSecurityDlg->SetEmergencyCallSupport(ETrue);
+    res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_REQUEST_QUERY);
+    if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+        {
+        CleanupStack::PopAndDestroy(wait);
+        return KErrCancel;
+        }
+                            
+    while (aNewPassword.CompareF(verifcationPassword) != 0) 
+        {
+        // codes do not match -> note -> ask new pin and verification codes again  
+        CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+        
+        verifcationPassword = _L("");
+        aNewPassword = _L("");
 
-    // send code again, now with the user pin
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, blockCodeType, aNewPinPassword, puk1_password);
-    RDEBUG("WaitForRequestL", 0);
+        // new pin code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_NEW_PIN_CODE_REQUEST_QUERY);
+        if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+                
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_REQUEST_QUERY);
+    	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+        }            
+        
+    // send code
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk1RequiredL(): Verify Code"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
     res = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL res", res);
     CleanupStack::PopAndDestroy(wait);
-
-    returnValue = res;
-    switch (res)
+    
+    TInt returnValue = res;
+    switch(res)
         {
         case KErrNone:
             // code approved -> note
             CSecuritySettings::ShowResultNoteL(R_PIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone);
             break;
-        case KErrGsm0707IncorrectPassword:
+           case KErrGsm0707IncorrectPassword:
         case KErrAccessDenied:
             // wrong PUK code -> note -> ask PUK code again        
             CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
@@ -1382,104 +1576,121 @@
             break;
         case KErrGsm0707SimWrong:
             // sim lock active
-            // no message ?
             break;
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
             // sim card rejected.
             break;
         default:
-            CSecuritySettings::ShowErrorNoteL(res);
+            CSecuritySettings::ShowErrorNoteL(res);        
             returnValue = Puk1RequiredL();
             break;
-        }
-    RDEBUG("returnValue", returnValue);
-    return returnValue;
+        }    
+
+        return returnValue;
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::Pin2Required()
 // Handles Pin2Required event
 // ----------------------------------------------------------
-// qtdone
+//    
 void CSecurityHandler::Pin2RequiredL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-
-    RDEBUG("0", 0);
-    TInt queryAccepted = KErrCancel;
-    RMobilePhone::TMobilePassword iSecUi_password;
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL() BEGIN"));
+    #endif
+    RMobilePhone::TMobilePassword password;
     RMobilePhone::TMobilePassword required_fourth;
     RMobilePhone::TMobilePhoneSecurityCode secCodeType(RMobilePhone::ESecurityCodePin2);
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
     CWait* wait = CWait::NewL();
     CleanupStack::PushL(wait);
-
-    wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-    RDEBUG("GetSecurityCodeInfo", 0);
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): create dialog"));
+    #endif
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): publish dialog"));
+    #endif
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPIN2); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+    
+	#if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): get PIN2 info"));
+    #endif
+    
+	wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
     iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
-    RDEBUG("WaitForRequestL", 0);
     TInt ret = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL ret", ret);
+        
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): get PIN2 info result: %d"), ret);
+    TInt attempts(codeInfo.iRemainingEntryAttempts);
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): attempts remaining: %d"), attempts);
+    #endif
     User::LeaveIfError(ret);
-
-    RDEBUG("codeInfo.iRemainingEntryAttempts",
-            codeInfo.iRemainingEntryAttempts);
-    if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
-        codeInfo.iRemainingEntryAttempts = -1;
-
-    /* request PIN using QT */
-    CSecQueryUi *iSecQueryUi;
-    RDEBUG("CSecQueryUi", 0);
-    iSecQueryUi = CSecQueryUi::NewL();
-    iQueryCanceled = EFalse;
-    RDEBUG("SecQueryDialog", 1);
-    // ESecUiCodeEtelReqest/ESecUiNone might be useful against KLastRemainingInputAttempt
-
-    TBuf<0x100> title;
-    title.Zero();
-    HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_pin2_code"));
-    title.Append(stringHolder->Des());
-    CleanupStack::PopAndDestroy(stringHolder);
-    title.Append(_L("$"));
-    title.AppendNum(codeInfo.iRemainingEntryAttempts);
-    queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_PIN2_CODE_MIN_LENGTH, SEC_C_PIN2_CODE_MAX_LENGTH, ESecUiSecretNotSupported | ESecUiAlphaNotSupported
-            | ESecUiCancelSupported | secCodeType);
-    RDEBUG("iSecUi_password", 0);
-    RDEBUGSTR(iSecUi_password);
-    RDEBUG("queryAccepted", queryAccepted);
-    iQueryCanceled = ETrue;
-    delete iSecQueryUi;
-
-    // If failed or device became locked, any pending request should be cancelled.
-    if (queryAccepted != KErrNone)
+    
+        CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+	    CleanupStack::PushL(deviceLockStatusObserver);
+        CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+        CleanupStack::PushL(queryStatusObserver);
+        
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts)
+            ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN2_ATTEMPTS, codeInfo.iRemainingEntryAttempts );
+                ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);
+            }
+        else
+            {
+                HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN2_ATTEMPT);
+                ret = iSecurityDlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt);
+                CleanupStack::PopAndDestroy(queryPrompt);   
+            }
+    CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+    iSecurityDlg = NULL;
+    if (!ret  || (ret == ESecUiDeviceLocked))
         {
-        RDEBUG("AbortSecurityCode", 0);
-        iPhone.AbortSecurityCode(secCodeType);
-        RDEBUG("AbortSecurityCode", 1);
+        iPhone.AbortSecurityCode(RMobilePhone::ESecurityCodePin2);
         CleanupStack::PopAndDestroy(wait);
         return;
         }
 
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, required_fourth);
-    RDEBUG("WaitForRequestL", 0);
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): Verify Code"));
+    #endif
+    iPhone.VerifySecurityCode(wait->iStatus,secCodeType,password,required_fourth);
     TInt status = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL status", status);
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): destroy wait"));
+    #endif
     CleanupStack::PopAndDestroy(wait);
 
-    switch (status)
-        {
+    switch(status)
+        {        
         case KErrNone:
             break;
         case KErrGsm0707IncorrectPassword:
         case KErrAccessDenied:
             // code was entered erroneously
-            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
+            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);       
             break;
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
@@ -1487,159 +1698,164 @@
             CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
             break;
         default:
-            CSecuritySettings::ShowErrorNoteL(status);
+            CSecuritySettings::ShowErrorNoteL(status);        
             break;
         }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): END"));
+    #endif
     }
 //
 // ----------------------------------------------------------
 // CSecurityHandler::Puk2Required()
 // Handles Puk2Required event
 // ----------------------------------------------------------
-// qtdone
+//    
 void CSecurityHandler::Puk2RequiredL()
-    {
+    {    
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    RDEBUG("0", 0);
-    TInt queryAccepted = KErrCancel;
-    RMobilePhone::TMobilePassword iSecUi_password;
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    RMobilePhone::TMobilePassword aPassword;
     RMobilePhone::TMobilePassword aNewPassword;
     RMobilePhone::TMobilePassword verifcationPassword;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
     RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
-
-    RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePuk2;
+    
+    RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
+    blockCodeType = RMobilePhone::ESecurityCodePuk2;
     CWait* wait = CWait::NewL();
     CleanupStack::PushL(wait);
-
+    
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL()"));
+    #endif
     // ask PUK2
-
-    TInt ret(KErrNone);
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK2_CODE_MIN_LENGTH,SEC_C_PUK2_CODE_MAX_LENGTH,ESecUiNone);
+    #ifdef __COVER_DISPLAY
+    iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+    CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+	if (covercl) // returns null if __COVER_DISPLAY is not defined
+    	{
+    	// … -  add data that cover ui is interested in
+    	covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowPUK2); // adds int to additional data to be posted to cover ui
+    	covercl->BufStream().CommitL(); // no more data to send so commit buf
+     	}  
+    #endif //__COVER_DISPLAY
+    CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+	CleanupStack::PushL(deviceLockStatusObserver);
+	
+	TInt ret(KErrNone);
     wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-    RDEBUG("GetSecurityCodeInfo", 0);
-    iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
-    RDEBUG("WaitForRequestL", 0);
+    iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
     ret = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL ret", ret);
     User::LeaveIfError(ret);
-
-    /* request PIN using QT */
-    CSecQueryUi *iSecQueryUi;
-    RDEBUG("CSecQueryUi", 0);
-    iSecQueryUi = CSecQueryUi::NewL();
-    iQueryCanceled = EFalse;
-    RDEBUG("SecQueryDialog", 1);
-    // ESecUiCodeEtelReqest/ESecUiNone might be useful
-
-    RDEBUG("codeInfo.iRemainingEntryAttempts",
-            codeInfo.iRemainingEntryAttempts);
-    if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) // TODO this might be 10 ?
-        codeInfo.iRemainingEntryAttempts = -1;
-
-    TBuf<0x100> title;
-    title.Zero();
-    HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_puk2_code"));
-    title.Append(stringHolder->Des());
-    CleanupStack::PopAndDestroy(stringHolder);
-    title.Append(_L("$"));
-    title.AppendNum(codeInfo.iRemainingEntryAttempts);
-    queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_PUK2_CODE_MIN_LENGTH, SEC_C_PUK2_CODE_MAX_LENGTH, ESecUiSecretNotSupported | ESecUiAlphaNotSupported
-            | ESecUiCancelSupported | secCodeType);
-    RDEBUG("iSecUi_password", 0);
-    RDEBUGSTR(iSecUi_password);
-    iQueryCanceled = ETrue;
-    delete iSecQueryUi;
-    RDEBUG("queryAccepted", queryAccepted);
-
-    if (queryAccepted != KErrNone)
+        
+    if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+            ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY);
+    else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PUK2_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+         ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);
+       }
+    else
+       {
+         HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PUK2_ATTEMPT);
+         ret = iSecurityDlg->ExecuteLD(R_PUK2_REQUEST_QUERY, *queryPrompt);
+         CleanupStack::PopAndDestroy(queryPrompt);   
+       }
+	
+	iSecurityDlg = NULL;
+    if(!ret  || (ret == ESecUiDeviceLocked))
         {
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() PUK QUERY CANCEL"));
+    	#endif    
         // cancel "get security unblock code" request
-        RDEBUG("AbortSecurityCode", 0);
-        iPhone.AbortSecurityCode(secCodeType);
-        RDEBUG("AbortSecurityCode", 1);
-        CleanupStack::PopAndDestroy(1); //wait
+        iPhone.AbortSecurityCode(blockCodeType);
+		CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+        return;
+        }
+    #if defined(_DEBUG)
+    RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() NEW QUERY"));
+    #endif
+    // new pin2 code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+    deviceLockStatusObserver->SetAddress(iSecurityDlg);
+    ret = iSecurityDlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY);
+    if(!ret  || (ret == ESecUiDeviceLocked))
+        {
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() NEW QUERY CANCEL"));
+    	#endif 
+        // cancel "get security unblock code" request
+        iPhone.AbortSecurityCode(blockCodeType);
+        CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
         return;
         }
 
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, iSecUi_password);
-    // this writes the newPIN2 with the value of PUK2. It's ok, since the user forgot it
-    RDEBUG("WaitForRequestL", 0);
-    TInt res = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL res", res);
-    CleanupStack::PopAndDestroy(wait);
-
-    switch (res)
+     // verification code query
+    iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+    deviceLockStatusObserver->SetAddress(iSecurityDlg);
+    ret = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY);
+    if (!ret || (ret == ESecUiDeviceLocked))    
         {
-        case KErrNone:
-            // code approved -> note
-            CSecuritySettings::ShowResultNoteL(res, CAknNoteDialog::EConfirmationTone);
-            break;
-        case KErrGsm0707IncorrectPassword:
-        case KErrAccessDenied:
-            // wrong PUK2 code -> note -> ask PUK2 code again        
-            CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-            Puk2RequiredL();
-            break;
-        case KErrGsmSSPasswordAttemptsViolation:
-        case KErrLocked:
-            // Pin2 features blocked permanently!
-            CSecuritySettings::ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone);
-            break;
-        default:
-            CSecuritySettings::ShowErrorNoteL(res);
-            Puk2RequiredL();
-            break;
+        #if defined(_DEBUG)
+    	RDebug::Print(_L("(SECUI)CSecurityHandler::Puk2RequiredL() VERIFY QUERY CANCEL"));
+    	#endif 
+        // cancel "get security unblock code" request
+        iPhone.AbortSecurityCode(blockCodeType);
+        CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+        return;
         }
+        
+    while (aNewPassword.CompareF(verifcationPassword) != 0) 
+        {
+        // codes do not match -> note -> ask new pin and verification codes again  
+        CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+        
+        verifcationPassword = _L("");
+        aNewPassword = _L("");
 
-    // now the PUK2 is valid. Time to get the new PIN2
-    wait = CWait::NewL();
-    CleanupStack::PushL(wait);
-        {
         // new pin2 code query
-        CSecQueryUi * iSecQueryUi;
-        RDEBUG("CSecQueryUi", 0);
-        iSecQueryUi = CSecQueryUi::NewL();
-        iQueryCanceled = EFalse;
-        TBuf<0x100> title;
-        title.Zero();
-        HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_pin2_code"));
-        title.Append(stringHolder->Des());
-        CleanupStack::PopAndDestroy(stringHolder);
-        title.Append(_L("|"));
-        HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("Verify"));
-        title.Append(stringHolder2->Des());
-        CleanupStack::PopAndDestroy(stringHolder2);
-        // ESecUiCodeEtelReqest/ESecUiNone might be useful
-        queryAccepted = iSecQueryUi->SecQueryDialog(title, aNewPassword, SEC_C_PIN2_CODE_MIN_LENGTH, SEC_C_PIN2_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported
-                | secCodeType);
-        RDEBUG("aNewPassword", 0);
-        RDEBUGSTR(aNewPassword);
-        iQueryCanceled = ETrue;
-        delete iSecQueryUi;
-        RDEBUG("queryAccepted", queryAccepted);
-        if (queryAccepted != KErrNone)
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone);
+        deviceLockStatusObserver->SetAddress(iSecurityDlg);
+        deviceLockStatusObserver->StartObserver();
+        
+        ret = iSecurityDlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY);
+    
+        if(!ret || (ret == ESecUiDeviceLocked))
             {
             // cancel "get security unblock code" request
-            RDEBUG("AbortSecurityCode", 0);
-            iPhone.AbortSecurityCode(secCodeType);
-            RDEBUG("AbortSecurityCode", 1);
-            CleanupStack::PopAndDestroy(1); //wait
+            iPhone.AbortSecurityCode(blockCodeType);
+            CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
             return;
             }
-        }
-    // send code. The code was temporarilly changed before. Thus, this really done to set the new-new one
-    RDEBUG("VerifySecurityCode", 0);
-    iPhone.VerifySecurityCode(wait->iStatus, secCodeType, aNewPassword, iSecUi_password);
-    RDEBUG("WaitForRequestL", 0);
-    res = wait->WaitForRequestL();
-    RDEBUG("WaitForRequestL res", res);
+                    
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+        deviceLockStatusObserver->SetAddress(iSecurityDlg);
+        deviceLockStatusObserver->StartObserver();
+        ret = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY);
+        
+        if (!ret || (ret == ESecUiDeviceLocked))    
+            {
+            // cancel "get security unblock code" request
+            iPhone.AbortSecurityCode(blockCodeType);
+            CleanupStack::PopAndDestroy(2); //wait, deviceLockStatusObserver
+            return;
+            }
+        }            
+    CleanupStack::PopAndDestroy(deviceLockStatusObserver);            
+    // send code
+    
+    iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
+    TInt res = wait->WaitForRequestL();
     CleanupStack::PopAndDestroy(wait);
-
-    switch (res)
+    
+    switch(res)
         {
         case KErrNone:
             // code approved -> note
@@ -1654,13 +1870,13 @@
         case KErrGsmSSPasswordAttemptsViolation:
         case KErrLocked:
             // Pin2 features blocked permanently!
-            CSecuritySettings::ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone);
-            break;
+            CSecuritySettings::ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone);    
+            break;    
         default:
-            CSecuritySettings::ShowErrorNoteL(res);
+            CSecuritySettings::ShowErrorNoteL(res);            
             Puk2RequiredL();
             break;
-        }
+        }            
     }
 
 //
@@ -1668,130 +1884,187 @@
 // CSecurityHandler::UPinRequiredL()
 // Hendles UniversalPinRequired event
 // ----------------------------------------------------------
-// qtdone
+//  
 TInt CSecurityHandler::UPinRequiredL()
     {
     /*****************************************************
-     *    Series 60 Customer / ETel
-     *    Series 60  ETel API
-     *****************************************************/
-    TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma));
-    TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin));
-    RDEBUG("wcdmaSupported", wcdmaSupported);
-    RDEBUG("upinSupported", upinSupported);
-    if (wcdmaSupported || upinSupported)
-        {
-        TInt queryAccepted = KErrCancel;
-        TInt lCancelSupported = ESecUiCancelNotSupported;
-        RMobilePhone::TMobilePassword iSecUi_password;
+    *    Series 60 Customer / ETel
+    *    Series 60  ETel API
+    *****************************************************/
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+    if(wcdmaSupported || upinSupported)
+       {
+        RMobilePhone::TMobilePassword password;
         RMobilePhone::TMobilePassword required_fourth;
         RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
         RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
         RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityUniversalPin;
         CWait* wait = CWait::NewL();
         CleanupStack::PushL(wait);
-        TBool StartUp = ETrue;
+        TBool StartUp = ETrue; 
         TInt secUiOriginatedQuery(ESecurityUIsSecUIOriginatedUninitialized);
         TInt err = KErrNone;
         TInt res = KErrGeneral;
-
+    
         StartUp = iStartup;
-        RDEBUG("StartUp", StartUp);
-
-        wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-        RDEBUG("GetSecurityCodeInfo", 0);
-        iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
-        RDEBUG("WaitForRequestL", 0);
-        res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
-        User::LeaveIfError(res);
-
-        if (!StartUp)
-            {
+    
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPinRequiredL()"));
+        #endif
+    
+        if(!StartUp)
+        {
             // read a flag to see whether the query is SecUi originated. 
             err = RProperty::Get(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, secUiOriginatedQuery);
-            }
-
-        /* request PIN using QT */
-        CSecQueryUi *iSecQueryUi;
-        RDEBUG("CSecQueryUi", 0);
-        iSecQueryUi = CSecQueryUi::NewL();
-        iQueryCanceled = EFalse;
-        // ESecUiCodeEtelReqest/ESecUiNone might be useful
-        // TODO also support Emergency
-        if (StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
-            lCancelSupported = ESecUiCancelNotSupported;
+        }
+        
+        #if defined(_DEBUG)
+        RDebug::Print(_L("CSecurityHandler::UPinRequiredL() Execute dlg"));
+        #endif 
+        if(StartUp || (secUiOriginatedQuery != ESecurityUIsSecUIOriginated) || (err != KErrNone))
+        {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiCodeEtelReqest);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            #ifdef __COVER_DISPLAY
+            iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+            CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPIN); // adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+            #endif //__COVER_DISPLAY
+            
+            wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+            iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+            res = wait->WaitForRequestL();
+            User::LeaveIfError(res);
+            
+            if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts )
+                res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY);
+            else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);
+                }
+            else
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPIN_ATTEMPT);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_REQUEST_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);   
+                }
+            
+            
+            if ((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+                { 
+                CleanupStack::PopAndDestroy(wait);   
+                return KErrCancel;
+                }
+        }
         else
-            lCancelSupported = ESecUiCancelSupported;
-
-        TBuf<0x100> title;
-        title.Zero();
-        HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_upin_code"));
-        title.Append(stringHolder->Des());
-        CleanupStack::PopAndDestroy(stringHolder);
-        title.Append(_L("$"));
-        title.AppendNum(codeInfo.iRemainingEntryAttempts);
-        queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiSecretSupported | ESecUiAlphaNotSupported
-                | lCancelSupported | ESecUiCodeEtelReqest);
-        RDEBUG("iSecUi_password", 0);
-        RDEBUGSTR(iSecUi_password);
-        iQueryCanceled = ETrue;
-        delete iSecQueryUi;
-        RDEBUG("queryAccepted", queryAccepted);
-        if (queryAccepted != KErrNone)
-            {
-            CleanupStack::PopAndDestroy(wait);
-            RDEBUG("AbortSecurityCode", 0);
-            iPhone.AbortSecurityCode(RMobilePhone::ESecurityUniversalPin);
-            RDEBUG("AbortSecurityCode", 1);
-
-            return KErrCancel;
-            }
-        RDEBUG("VerifySecurityCode", 0);
-        iPhone.VerifySecurityCode(wait->iStatus, secCodeType, iSecUi_password, required_fourth);
-        RDEBUG("WaitForRequestL", 0);
+        {
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone);
+            #ifdef __COVER_DISPLAY
+            iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+            CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPIN); // adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+            #endif //__COVER_DISPLAY
+            
+    		wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
+            iPhone.GetSecurityCodeInfo(wait->iStatus, secCodeType, codeInfoPkg);
+            res = wait->WaitForRequestL();
+            User::LeaveIfError(res);
+            
+            CSecUiLockObserver* deviceLockStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg);
+    		CleanupStack::PushL(deviceLockStatusObserver);
+    		CSecUiLockObserver* queryStatusObserver = CSecUiLockObserver::NewL(iSecurityDlg, ESecUiRequestStateObserver);
+            CleanupStack::PushL(queryStatusObserver);
+            
+            if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts )
+                res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY);
+            else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);
+                }
+            else
+                {
+                    HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPIN_ATTEMPT);
+                    res = iSecurityDlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt);
+                    CleanupStack::PopAndDestroy(queryPrompt);   
+                }
+    		
+    		CleanupStack::PopAndDestroy(2); //deviceLockStatusObserver, queryStatusObserver
+    		iSecurityDlg = NULL;
+            if( !res || (res == ESecUiDeviceLocked))
+                {
+                // cancel code request
+                CleanupStack::PopAndDestroy(wait);
+                iPhone.AbortSecurityCode(RMobilePhone::ESecurityUniversalPin);
+                return KErrCancel;
+                }      
+        }
+        
+        #if defined(_DEBUG)
+        RDebug::Print(_L("CSecurityNotifier::UPinRequiredL()VerifySecurityCode"));
+        #endif
+        iPhone.VerifySecurityCode(wait->iStatus,secCodeType, password, required_fourth);
         res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
         CleanupStack::PopAndDestroy(wait);
-
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPinRequiredL() VerifySecurityCode STATUS: %d"), res);
+        #endif
         TInt returnValue = res;
-        switch (res)
-            {
+        switch(res)
+            {        
             case KErrNone:
                 // code approved 
-                RDEBUG("code approved ", 0)
-                ;
+                #if defined(_DEBUG)
+                RDebug::Print(_L("CSecurityHandler::UPinRequiredL()code approved "));
+                #endif
                 CSecuritySettings::ShowResultNoteL(R_CONFIRMATION_NOTE, CAknNoteDialog::EConfirmationTone);
                 break;
             case KErrGsm0707IncorrectPassword:
             case KErrAccessDenied:
                 // code was entered erroneously
                 CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-                if (StartUp)
-                    {
-                    returnValue = UPinRequiredL();
-                    }
+                if(StartUp)
+                {
+                returnValue = UPinRequiredL();
+                }
                 break;
             case KErrGsmSSPasswordAttemptsViolation:
             case KErrLocked:
                 // code blocked; show error note and terminate.
-                if (StartUp)
-                    CSecuritySettings::ShowResultNoteL(res, CAknNoteDialog::EErrorTone);
+                if(StartUp)
+                    CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); 
                 break;
             case KErrGsm0707SimWrong:
                 // sim lock active
                 break;
-            default: // for example, KErrArgument
+            default:
                 CSecuritySettings::ShowErrorNoteL(res);
-                if (StartUp)
-                    {
-                    returnValue = UPinRequiredL();
-                    }
+                if(StartUp)
+                {
+                returnValue = UPinRequiredL();
+                }
                 break;
             }
-
+    
         return returnValue;
-        }
+       }
     else
         return KErrNone;
     }
@@ -1800,113 +2073,146 @@
 // CSecurityHandler::UPukRequiredL()
 // Handles UPukRequired event
 // ----------------------------------------------------------
-// qtdone
+//
 TInt CSecurityHandler::UPukRequiredL()
     {
-    TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma));
-    TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin));
-    if (wcdmaSupported || upinSupported)
-        {
-        RDEBUG("0", 0);
-        TInt queryAccepted = KErrCancel;
-        RMobilePhone::TMobilePassword iSecUi_password;
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+    if(wcdmaSupported || upinSupported)
+       {
+        #if defined(_DEBUG)
+        RDebug::Print(_L("(SECUI)CSecurityHandler::UPukRequiredL()"));
+        #endif            
+        RMobilePhone::TMobilePassword aPassword;
         RMobilePhone::TMobilePassword aNewPassword;
         RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo;
         RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo);
-
+    
         RMobilePhone::TMobilePhoneSecurityCode blockCodeType;
         blockCodeType = RMobilePhone::ESecurityUniversalPuk;
         CWait* wait = CWait::NewL();
         CleanupStack::PushL(wait);
-
+        
         TBool StartUp(ETrue);
         StartUp = iStartup;
-
+    
         TInt res(KErrNone);
         wait->SetRequestType(EMobilePhoneGetSecurityCodeInfo);
-        RDEBUG("GetSecurityCodeInfo", 0);
         iPhone.GetSecurityCodeInfo(wait->iStatus, blockCodeType, codeInfoPkg);
-        RDEBUG("WaitForRequestL", 0);
         res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
         User::LeaveIfError(res);
         //show last "Code Error" note for UPIN verify result so it won't be left under the PUK1 dialog
-        if (!StartUp && (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts))
+        if(!StartUp && (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts))
             CSecuritySettings::ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone);
-
+        
         // ask UPUK code
-        /* request PIN using QT */
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aPassword,SEC_C_PUK_CODE_MIN_LENGTH,SEC_C_PUK_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        #ifdef __COVER_DISPLAY
+        iSecurityDlg->PublishDialogL(SecondaryDisplay::ECmdShowSecurityQuery, SecondaryDisplay::KCatStartup);
+        CAknMediatorFacade* covercl = AknMediatorFacade(iSecurityDlg); // uses MOP, so control provided 
+    		if (covercl) // returns null if __COVER_DISPLAY is not defined
+        		{
+        		// … -  add data that cover ui is interested in
+        		covercl->BufStream().WriteInt32L(SecondaryDisplay::EShowUPUK);// adds int to additional data to be posted to cover ui
+        		covercl->BufStream().CommitL(); // no more data to send so commit buf
+         		}  
+        #endif //__COVER_DISPLAY
+       
+            
+        if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPUKAttempts)
+                res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY);
+        else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt)
+           {
+             HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPUK_ATTEMPTS, codeInfo.iRemainingEntryAttempts);
+             res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY, *queryPrompt);
+             CleanupStack::PopAndDestroy(queryPrompt);
+           }
+        else
+           {
+             HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPUK_ATTEMPT);
+             res = iSecurityDlg->ExecuteLD(R_UPUK_REQUEST_QUERY, *queryPrompt);
+             CleanupStack::PopAndDestroy(queryPrompt);   
+           }
+        
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
             {
-            CSecQueryUi *iSecQueryUi;
-            RDEBUG("CSecQueryUi", 0);
-            iSecQueryUi = CSecQueryUi::NewL();
-            iQueryCanceled = EFalse;
-            // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful
-            // TODO also support Emergency
-
-            TBuf<0x100> title;
-            title.Zero();
-            HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_puk_code"));
-            title.Append(stringHolder->Des());
-            CleanupStack::PopAndDestroy(stringHolder);
-            title.Append(_L("$"));
-            title.AppendNum(codeInfo.iRemainingEntryAttempts);
-            queryAccepted = iSecQueryUi->SecQueryDialog(title, iSecUi_password, SEC_C_PUK_CODE_MIN_LENGTH, SEC_C_PUK_CODE_MAX_LENGTH, ESecUiAlphaNotSupported
-                    | ESecUiCancelSupported | ESecUiPukRequired);
-            RDEBUG("iSecUi_password", 0);
-            RDEBUGSTR(iSecUi_password);
-            iQueryCanceled = ETrue;
-            delete iSecQueryUi;
-            RDEBUG("queryAccepted", queryAccepted);
-
-            if (queryAccepted != KErrNone)
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+            
+        RMobilePhone::TMobilePassword verifcationPassword;
+        // new upin code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_NEW_UPIN_CODE_REQUEST_QUERY);
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);    
+            return KErrCancel;
+            }
+      
+        // verification code query
+        iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+        if(AknLayoutUtils::PenEnabled())
+            iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+        else
+            iSecurityDlg->SetEmergencyCallSupport(ETrue);
+        res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_REQUEST_QUERY);
+        if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
+            {
+            CleanupStack::PopAndDestroy(wait);
+            return KErrCancel;
+            }
+                                
+        while (aNewPassword.CompareF(verifcationPassword) != 0) 
+            {
+            // codes do not match -> note -> ask new upin and verification codes again  
+            CSecuritySettings::ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone);
+            
+            verifcationPassword = _L("");
+            aNewPassword = _L("");
+    
+            // new upin code query
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (aNewPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            res = iSecurityDlg->ExecuteLD(R_NEW_UPIN_CODE_REQUEST_QUERY);
+        	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
                 {
                 CleanupStack::PopAndDestroy(wait);
                 return KErrCancel;
                 }
-            }
-
-            {
-            /* request PIN using QT */
-            CSecQueryUi *iSecQueryUi;
-            RDEBUG("CSecQueryUi", 0);
-            iSecQueryUi = CSecQueryUi::NewL();
-            iQueryCanceled = EFalse;
-            // TODO ESecUiCodeEtelReqest/ESecUiNone might be useful
-            // TODO also support Emergency
-            TBuf<0x100> title;
-            title.Zero();
-            HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_upin_code"));
-            title.Append(stringHolder->Des());
-            CleanupStack::PopAndDestroy(stringHolder);
-            title.Append(_L("|"));
-            HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("Verify"));
-            title.Append(stringHolder2->Des());
-            CleanupStack::PopAndDestroy(stringHolder2);
-            queryAccepted = iSecQueryUi->SecQueryDialog(title, aNewPassword, SEC_C_PUK_CODE_MIN_LENGTH, SEC_C_PUK_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported
-                    | ESecUiPukRequired);
-            RDEBUG("aNewPassword", 0);
-            RDEBUGSTR(aNewPassword);
-            iQueryCanceled = ETrue;
-            delete iSecQueryUi;
-            RDEBUG("queryAccepted", queryAccepted);
-            if (queryAccepted != KErrNone)
+                    
+            // verification code query
+            iSecurityDlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiPukRequired);
+            if(AknLayoutUtils::PenEnabled())
+                iSecurityDlg->SetEmergencyCallSupportForCBA( ETrue );
+            else
+                iSecurityDlg->SetEmergencyCallSupport(ETrue);
+            res = iSecurityDlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_REQUEST_QUERY);
+        	if((!res) || (res == ESecUiEmergencyCall) || (res == EAknSoftkeyEmergencyCall))
                 {
                 CleanupStack::PopAndDestroy(wait);
                 return KErrCancel;
                 }
-            }
-
+            }            
+            
         // send code
-        RDEBUG("VerifySecurityCode", 0);
-        iPhone.VerifySecurityCode(wait->iStatus, blockCodeType, aNewPassword, iSecUi_password);
-        RDEBUG("WaitForRequestL", 0);
+        iPhone.VerifySecurityCode(wait->iStatus,blockCodeType,aNewPassword,aPassword);
         res = wait->WaitForRequestL();
-        RDEBUG("WaitForRequestL res", res);
         CleanupStack::PopAndDestroy(wait);
-
+        
         TInt returnValue = res;
-        switch (res)
+        switch(res)
             {
             case KErrNone:
                 // code approved -> note
@@ -1926,15 +2232,14 @@
                 // sim card rejected.
                 break;
             default:
-                CSecuritySettings::ShowErrorNoteL(res);
+                CSecuritySettings::ShowErrorNoteL(res);        
                 returnValue = UPukRequiredL();
                 break;
-            }
-
+            }   
+    
         return returnValue;
-        }
+       }
     else
-        // not wcdmaSupported || upinSupported
         return KErrNone;
     }
 
@@ -1943,11 +2248,13 @@
 // CSecurityHandler::SimLockEventL()
 // Shows "SIM restriction on" note
 // ----------------------------------------------------------
-// qtdone
+//    
 void CSecurityHandler::SimLockEventL()
     {
-    RDEBUG("0", 0);
-    CSecuritySettings::ShowResultNoteL(R_SIM_ON, CAknNoteDialog::EConfirmationTone);
+    #if defined(_DEBUG)
+    RDebug::Print(_L("CSecurityHandler::SimLockEventL()"));
+    #endif
+    CSecuritySettings::ShowResultNoteL(R_SIM_ON, CAknNoteDialog::EConfirmationTone);    
     }
 // ---------------------------------------------------------
 // CSecurityHandler::RemoveSplashScreenL()
@@ -1962,14 +2269,20 @@
 // CSecurityHandler::ShowGenericErrorNoteL(TInt aStatus)
 // Shows a generic error note
 // ---------------------------------------------------------
-// qtdone
+
 void CSecurityHandler::ShowGenericErrorNoteL(TInt aStatus)
     {
-    // Let's create TextResolver instance for error resolving...
-    RDEBUG("aStatus", aStatus);
-    RDEBUG("!!!!! this should never be called !!!!", 0);
-
-    CSecuritySettings::ShowResultNoteL(aStatus, CAknNoteDialog::EErrorTone);
+       // Let's create TextResolver instance for error resolving...
+       CTextResolver* textresolver = CTextResolver::NewLC(); 
+       // Resolve the error
+       TPtrC errorstring;
+       errorstring.Set( textresolver->ResolveErrorString( aStatus ) );
+       iNoteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNoteDlg));
+       iNoteDlg->PrepareLC(R_CODE_ERROR);
+       iNoteDlg->SetTextL((TDesC&)errorstring);
+       iNoteDlg->RunDlgLD(CAknNoteDialog::ELongTimeout, CAknNoteDialog::EErrorTone);
+       CleanupStack::PopAndDestroy(textresolver); 
     }
+                    
 
 // End of file