eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/eap_am_type_tls_peap_symbian.cpp
branchRCL_3
changeset 18 bad0cc58d154
parent 2 1c7bc153c08e
child 19 c74b3d9f6b9e
--- a/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/eap_am_type_tls_peap_symbian.cpp	Thu Aug 19 09:58:27 2010 +0300
+++ b/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/eap_am_type_tls_peap_symbian.cpp	Tue Aug 31 15:16:37 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 253 %
+* %version: 256 %
 */
 
 // This is enumeration of EAPOL source code.
@@ -53,7 +53,7 @@
 #include <asn1enc.h>
 #include "EapTlsPeapTimerValues.h"
 #include "eap_state_notification.h"
-#include "eap_am_trace_symbian.h"
+#include "EapTraceSymbian.h"
 #include "eap_automatic_variable.h"
 
 #if defined(USE_FAST_EAP_TYPE)
@@ -65,36 +65,49 @@
 #include "eap_tlv_header.h"
 #include "eap_tlv_message_data.h"
 #endif
-
-#include "eap_ttls_pap_active.h"
+#include <utf.h>
+
 
 #ifdef USE_PAC_STORE
-#include "pac_store_db_symbian.h"
-#include <f32file.h>
+	#include "pac_store_db_symbian.h"
+	#include <f32file.h>
 #endif
 
-#ifdef USE_EAP_EXPANDED_TYPES
 #include "eap_header_string.h"
-#endif //#ifdef USE_EAP_EXPANDED_TYPES
 
 #if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
-#include "eap_config.h"
-#include "eap_file_config.h"
-#include "eap_am_file_input_symbian.h"
+	#include "eap_config.h"
+	#include "eap_file_config.h"
+	#include "eap_am_file_input_symbian.h"
 #endif
 
+#include "EapConfigToolsSymbian.h"
+#include "EapConversion.h"
+#include "EapPluginTools.h"
+
+#include <mmtsy_names.h>
+
+
 const TUint KMaxSqlQueryLength = 512;
 const TUint KMaxDBFieldNameLength = 255;
 const TUint KDSASignatureLength = 40;
 const TInt 	KDefaultColumnInView_One = 1; // For DB view.
 const TInt 	KMicroSecsInASecond = 1000000; // 1000000 micro seconds is 1 second.
-		
+
+#ifdef USE_FAST_EAP_TYPE
+
+const TUint KMaxDeviceSeedLength = RMobilePhone::KPhoneManufacturerIdSize+
+			RMobilePhone::KPhoneModelIdSize+
+			RMobilePhone::KPhoneSerialNumberSize;
+const TUint KMaxDeviceSeedSize = 2*KMaxDeviceSeedLength;
+#endif	
 /**
  * Length of the MAC address
  */
 #ifdef USE_FAST_EAP_TYPE
- const TUint8 KMacAddressLength = 6;
+	const TUint8 KMacAddressLength = 6;
 #endif
+
 //--------------------------------------------------
 
 eap_am_type_tls_peap_symbian_c::eap_am_type_tls_peap_symbian_c(
@@ -116,8 +129,7 @@
 #if defined(USE_FAST_EAP_TYPE)
 	  , m_tls_application(0)
 	  //, iWaitNoteCancelled( EFalse )
-      , iEapFastActiveWaitNote( NULL )
-      , iEapFastActiveNotes( NULL )
+
 #endif //#if defined(USE_FAST_EAP_TYPE)
 	  , m_is_valid(false)
 	  , m_is_client(aIsClient)
@@ -138,7 +150,7 @@
 	  , m_param_q(aTools)
 	  , m_param_g(aTools)
 	  , m_shutdown_was_called(false)
-	  , m_identity_info(0)
+
 	  , m_tunneled_type(eap_type_none)
 	  , m_verify_certificate_realm(true)
 	  , m_allow_subdomain_matching(false)
@@ -148,6 +160,7 @@
 	  , m_use_manual_realm(false)
 	  , m_manual_realm(aTools)
 	  , m_tls_peap_server_authenticates_client_policy_flag(true)
+	  , m_use_automatic_ca_certificate(false)
 	  , m_configured(false)
 	  , m_max_session_time(0)
 #if defined(USE_EAP_TLS_SESSION_TICKET)
@@ -176,101 +189,98 @@
 	, m_ready_references_and_data_blocks(aTools)
 	, m_serv_unauth_prov_mode(false)
 	, m_serv_auth_prov_mode(false)
-	, m_is_notifier_connected(false)
+
 	, m_notifier_data_to_user(NULL)
 	, m_notifier_data_pckg_to_user(NULL)
-	, m_notifier_data_from_user(NULL)
-	, m_notifier_data_pckg_from_user(NULL)
+
+	, iMMETELConnectionStatus(false)
 	, m_completed_with_zero(false)
 	, m_verificationStatus(false)
+	, m_pacStorePWBuf8(0)
+	, m_userAction(EEapFastNotifierUserActionOk)
+	, m_pacStoreDataRefType(eap_pac_store_data_type_none)
 	, m_data_reference(m_am_tools)
-	, m_notifier_complete(false)
 	, m_userResponse(m_am_tools)
+	, m_pending_operation(eap_fast_pac_store_pending_operation_none)
 	, m_both_completed(0)
 	, m_both_asked(0)
+	, m_ready_references_array_index(0)
+	, m_provisioning_mode(eap_fast_completion_operation_none)
+	, iCompletionOperation(eap_fast_completion_operation_none)
+	, iCompletion(eap_fast_initialize_pac_store_completion_none)
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
+	, m_notifier_complete(false)
+
 #ifdef USE_PAC_STORE
 	,iPacStoreDb(NULL)
 #endif    
 	
 #ifdef USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS
-, m_skip_user_interactions(false)
-, m_fileconfig(0)
+	, m_skip_user_interactions(false)
+	, m_fileconfig(0)
 #endif
-	
-	
-	
-    , iEapTtlsPapMaxSessionConfigTime( 0 )
-    , iEapTtlsPapActive( NULL )
-    
+
+  , iEapTtlsPapMaxSessionConfigTime( 0 )
+
+
+
+  , iPacStoreDeviceSeed(0)
+
+	, iEapAuthNotifier(0)	
+
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
 
-#ifdef USE_EAP_EXPANDED_TYPES
-
-	m_tunneling_vendor_type = m_tunneling_type.get_vendor_type();
-	m_current_eap_vendor_type = m_current_eap_type.get_vendor_type();
-
-#else
-
-	m_tunneling_vendor_type = static_cast<TUint>(m_tunneling_type);
-	m_current_eap_vendor_type = static_cast<TUint>(m_current_eap_type);
-
-#endif //#ifdef USE_EAP_EXPANDED_TYPES
-
 	// Set the database table name based on the type
-	switch (m_current_eap_vendor_type)
-	{
-		case eap_type_tls:
-			m_db_table_name = KTlsDatabaseTableName;
-			m_db_user_cert_table_name = KTlsAllowedUserCertsDatabaseTableName;
-			m_db_ca_cert_table_name = KTlsAllowedCACertsDatabaseTableName;
-			m_db_cipher_suite_table_name = KTlsAllowedCipherSuitesDatabaseTableName;
-			m_db_name = KTlsDatabaseName;	
-			break;
-		
-		case eap_type_peap:
-			m_db_table_name = KPeapDatabaseTableName;
-			m_db_user_cert_table_name = KPeapAllowedUserCertsDatabaseTableName;
-			m_db_ca_cert_table_name = KPeapAllowedCACertsDatabaseTableName;
-			m_db_cipher_suite_table_name = KPeapAllowedCipherSuitesDatabaseTableName;
-			m_db_name = KPeapDatabaseName;	
-			break;
-			
-		case eap_type_ttls_plain_pap:
-		    // use the same case as for eap_type_ttls;
-		    // break is not needed
-		
-		case eap_type_ttls:
-			m_db_table_name = KTtlsDatabaseTableName;
-			m_db_user_cert_table_name = KTtlsAllowedUserCertsDatabaseTableName;
-			m_db_ca_cert_table_name = KTtlsAllowedCACertsDatabaseTableName;
-			m_db_cipher_suite_table_name = KTtlsAllowedCipherSuitesDatabaseTableName;
-			m_db_name = KTtlsDatabaseName;
-			break;
+	if (m_current_eap_type == eap_type_tls)
+	{
+		m_db_table_name = KTlsDatabaseTableName;
+		m_db_user_cert_table_name = KTlsAllowedUserCertsDatabaseTableName;
+		m_db_ca_cert_table_name = KTlsAllowedCACertsDatabaseTableName;
+		m_db_cipher_suite_table_name = KTlsAllowedCipherSuitesDatabaseTableName;
+		m_db_name = KTlsDatabaseName;	
+	}
+	else if (m_current_eap_type == eap_type_peap)
+	{
+		m_db_table_name = KPeapDatabaseTableName;
+		m_db_user_cert_table_name = KPeapAllowedUserCertsDatabaseTableName;
+		m_db_ca_cert_table_name = KPeapAllowedCACertsDatabaseTableName;
+		m_db_cipher_suite_table_name = KPeapAllowedCipherSuitesDatabaseTableName;
+		m_db_name = KPeapDatabaseName;	
+	}
+	else if (m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type()
+			|| m_current_eap_type == eap_type_ttls)
+	{
+		m_db_table_name = KTtlsDatabaseTableName;
+		m_db_user_cert_table_name = KTtlsAllowedUserCertsDatabaseTableName;
+		m_db_ca_cert_table_name = KTtlsAllowedCACertsDatabaseTableName;
+		m_db_cipher_suite_table_name = KTtlsAllowedCipherSuitesDatabaseTableName;
+		m_db_name = KTtlsDatabaseName;
+	}
 			
 #if defined (USE_FAST_EAP_TYPE)
-			case eap_type_fast:
-			m_db_table_name = KFastGeneralSettingsDBTableName; // General settings
-			m_db_fast_special_table_name = KFastSpecialSettingsDBTableName; // Special settings  for only FAST
-			m_db_user_cert_table_name = KFastAllowedUserCertsDatabaseTableName;
-			m_db_ca_cert_table_name = KFastAllowedCACertsDatabaseTableName;
-			m_db_cipher_suite_table_name = KFastAllowedCipherSuitesDatabaseTableName;
-			m_db_name = KFastDatabaseName;
-			break;
+	else if (m_current_eap_type == eap_type_fast)
+	{
+		m_db_table_name = KFastGeneralSettingsDBTableName; // General settings
+		m_db_fast_special_table_name = KFastSpecialSettingsDBTableName; // Special settings  for only FAST
+		m_db_user_cert_table_name = KFastAllowedUserCertsDatabaseTableName;
+		m_db_ca_cert_table_name = KFastAllowedCACertsDatabaseTableName;
+		m_db_cipher_suite_table_name = KFastAllowedCipherSuitesDatabaseTableName;
+		m_db_name = KFastDatabaseName;
+	}
 #endif // #if defined (USE_FAST_EAP_TYPE)			
-		default:
-			{
-				// Unsupported type		
-				// Should never happen
-				EAP_TRACE_ERROR(m_am_tools, 
-					TRACE_FLAGS_DEFAULT, (
-					EAPL("Unsupported EAP type, m_current_eap_vendor_type=%d \n"),
-					m_current_eap_vendor_type));
-		
-				return;
-			}
+	else
+	{
+		// Unsupported type		
+		// Should never happen
+		EAP_TRACE_ERROR(m_am_tools, 
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("Unsupported EAP type, m_current_eap_vendor_type=0xfe%06x%08x\n"),
+			m_current_eap_type.get_vendor_id(),
+			m_current_eap_type.get_vendor_type()));
+
+		return;
 	}
 
 	if (receive_network_id != 0
@@ -310,7 +320,7 @@
 		&& aEapType != eap_type_ttls
 #endif // #if defined(USE_TTLS_EAP_TYPE)
 
-	    && aEapType != eap_type_ttls_plain_pap
+	    && aEapType != eap_expanded_type_ttls_plain_pap.get_type()
 		
 #if defined (USE_FAST_EAP_TYPE)
 		&& aEapType != eap_type_fast
@@ -348,6 +358,10 @@
 //
 void eap_am_type_tls_peap_symbian_c::ConstructL()
 {
+	TInt error = m_session.Connect();
+	EAP_TRACE_DEBUG_SYMBIAN((_L("eap_am_type_tls_peap_symbian_c::ConstructL(): - m_session.Connect(), error=%d\n"), error));
+	User::LeaveIfError(error);
+
 	// Open/create database
 	EapTlsPeapUtils::OpenDatabaseL(m_database, m_session, m_index_type, m_index, m_tunneling_type, m_current_eap_type);
 
@@ -372,30 +386,13 @@
 		EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ConstructL Opened PAC store")));		
 	}
-	m_info_array.Reset();
+	m_info_array.ResetAndDestroy();
 	
 #endif	// End: #ifdef USE_FAST_EAP_TYPE
 #endif // End: 	#ifdef USE_PAC_STORE
 
-#ifdef USE_FAST_EAP_TYPE
-	
-	if(m_current_eap_type == eap_type_fast)
-	{
-		m_notifier_data_to_user = new(ELeave) TEapFastNotifierStruct;
-		m_notifier_data_pckg_to_user = new(ELeave) TPckg<TEapFastNotifierStruct> (*m_notifier_data_to_user);
-		
-		EAP_TRACE_DATA_DEBUG(
-			m_am_tools,
-			TRACE_FLAGS_DEFAULT,
-			(EAPL("eap_am_type_tls_peap_symbian_c::ConstructL m_notifier_data_pckg_to_user"),
-			m_notifier_data_pckg_to_user->Ptr(),
-			m_notifier_data_pckg_to_user->Size()));	
-		
-		m_notifier_data_from_user = new(ELeave) TEapFastNotifierStruct;
-		m_notifier_data_pckg_from_user = new(ELeave) TPckg<TEapFastNotifierStruct> (*m_notifier_data_from_user);		
-	}	
-#endif	// End: #ifdef USE_FAST_EAP_TYPE	
-	
+	m_notifier_data_to_user = new(ELeave) CEapAuthNotifier::TEapDialogInfo;
+	m_notifier_data_pckg_to_user = new(ELeave) TPckg<CEapAuthNotifier::TEapDialogInfo> (*m_notifier_data_to_user);
 
 }
 
@@ -424,48 +421,27 @@
 			m_cert_if->Cancel();
 		}		
 	}
-	
-	if ( iEapTtlsPapActive )
-		{
-		if ( iEapTtlsPapActive->IsActive() )
-			{
-			EAP_TRACE_DEBUG_SYMBIAN(
-				( _L( " eap_am_type_tls_peap_symbian_c::shutdown() \
-				Cancelling iEapTtlsPapActive." ) ) );
-			iEapTtlsPapActive->Cancel();
-			}
-		EAP_TRACE_DEBUG_SYMBIAN(
-			( _L( " eap_am_type_tls_peap_symbian_c::shutdown() \
-			Deleting iEapTtlsPapActive." ) ) );
-		delete iEapTtlsPapActive;
-		iEapTtlsPapActive = NULL;
-		}
-	
-#if defined(USE_FAST_EAP_TYPE)		
-		if( m_is_notifier_connected )
-		{
-			EAP_TRACE_DEBUG_SYMBIAN(
-				(_L(" eap_am_type_tls_peap_symbian_c::shutdown - calling m_notifier.CancelNotifier")));
-			if(IsActive())
-				{
-				TInt error = m_notifier.CancelNotifier(KEapFastNotifierUid);
-				EAP_TRACE_DEBUG_SYMBIAN(
-					(_L("eap_am_type_tls_peap_symbian_c::shutdown - CancelNotifier=%d"), error));
-				}	
-			EAP_TRACE_DEBUG_SYMBIAN(
-				(_L(" eap_am_type_securid_symbian_c::shutdown - calling m_notifier.Close()")));
-			
-			m_notifier.Close(); // Call close only if it is connected.	
-			
-			m_is_notifier_connected = false;
-			
-		} // End: if( m_is_notifier_connected )	
+
+	if (iEapAuthNotifier != 0)
+		{
+		iEapAuthNotifier->Cancel();
+		}
+
+	
+
+	
+#if defined(USE_FAST_EAP_TYPE)
+
+
+
+#endif 
 
 		if (m_partner != NULL)
 		    {
 		    EAP_TRACE_DEBUG_SYMBIAN(
 				(_L(" eap_am_type_tls_peap_symbian_c::shutdown - Cancel timers ...")));
 
+#if defined(USE_FAST_EAP_TYPE)
 		    m_partner->cancel_timer(
 				this, 
 				KRemoveIAPReferenceTimerID);
@@ -482,36 +458,28 @@
 				this, 
 				KHandleReadPacstoreTimerID);
 
+		    m_partner->cancel_timer(
+				this, 
+				KHandleCompletePacstoreNokTimerID);
+
+		    m_partner->cancel_timer(
+				this, 
+				KHandleCompletePacstoreOkTimerID);
+				
+#endif
 		    EAP_TRACE_DEBUG_SYMBIAN(
 				(_L(" eap_am_type_tls_peap_symbian_c::shutdown - Timers canceled")));
 		    }
 		
-		if ( iEapFastActiveWaitNote )
-			{
-			if ( iEapFastActiveWaitNote->IsActive() )
-				{
-				iEapFastActiveWaitNote->Cancel();
-				}
-			delete iEapFastActiveWaitNote;
-			iEapFastActiveWaitNote = NULL;
-			}
-
-		if ( iEapFastActiveNotes )
-			{
-			if ( iEapFastActiveNotes->IsActive() )
-				{
-			    iEapFastActiveNotes->Cancel();
-				}
-			delete iEapFastActiveNotes;
-			iEapFastActiveNotes = NULL;
-			}
+#if defined(USE_FAST_EAP_TYPE)
+
 #endif // #if defined(USE_FAST_EAP_TYPE)
 	
 
-	m_allowed_server_certs.Reset();
-	m_allowed_ca_certs.Close();			
+	m_allowed_server_certs.ResetAndDestroy();
+	m_allowed_ca_certs.ResetAndDestroy();			
 	m_allowed_cipher_suites.Close();			
-	m_allowed_user_certs.Reset();			
+	m_allowed_user_certs.ResetAndDestroy();			
 
 #ifdef USE_PAC_STORE
 #ifdef USE_FAST_EAP_TYPE
@@ -521,13 +489,7 @@
 		iPacStoreDb->Close();
 	}
 	
-	TInt count=0;
-	while (count < m_info_array.Count())
-		{
-		delete m_info_array[count].iData;
-		delete m_info_array[count].iReference;
-		}
-	m_info_array.Reset();
+	m_info_array.ResetAndDestroy();
 
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L(" eap_am_type_tls_peap_symbian_c::shutdown - Arrays cleared")));
@@ -551,7 +513,6 @@
 	return eap_status_ok;
 }
 
-
 //--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_am_type_tls_peap_symbian_c::~eap_am_type_tls_peap_symbian_c()
@@ -571,26 +532,14 @@
 	m_database.Close();
 	m_session.Close();
 
-#ifdef USE_FAST_EAP_TYPE
-	
-	if(m_current_eap_type == eap_type_fast)
-	{
-		delete m_notifier_data_to_user;
-		delete m_notifier_data_pckg_to_user;
-		
-		delete m_notifier_data_from_user;
-		delete m_notifier_data_pckg_from_user;		
-	}	
-#endif	// End: #ifdef USE_FAST_EAP_TYPE	
+	delete m_notifier_data_to_user;
+	delete m_notifier_data_pckg_to_user;
 		
 	delete m_cert_if;
 
 	delete m_ca_certificate;
 	delete m_own_certificate;
 	delete m_peer_certificate;
-	delete m_identity_info;
-
-#ifdef USE_EAP_EXPANDED_TYPES
 
 	m_enabled_tunneling_exp_eap_array.ResetAndDestroy();
 	m_disabled_tunneling_exp_eap_array.ResetAndDestroy();
@@ -600,24 +549,306 @@
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("eap_am_type_tls_peap_symbian_c::~eap_am_type_tls_peap_symbian_c() tunneling done.\n")));
 
-#else
-
-	m_iap_eap_array.ResetAndDestroy();
-
-#endif  // #ifdef USE_EAP_EXPANDED_TYPES
-
 #ifdef USE_PAC_STORE
 	
 	delete iPacStoreDb;
 	
-#endif	// End: #ifdef USE_PAC_STORE	
-	
+#endif // #ifdef USE_PAC_STORE	
+
+	delete iEapAuthNotifier;
+	iEapAuthNotifier = 0;
+
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 //--------------------------------------------------
 
+EAP_FUNC_EXPORT void eap_am_type_tls_peap_symbian_c::DlgComplete( TInt aStatus )
+{
+	EAP_TRACE_DEBUG(
+		m_am_tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): m_notifier_complete=%d, m_state=%d\n"),
+		m_notifier_complete,
+		m_state));
+
+	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eap_am_type_tls_peap_symbian_c::DlgComplete()");
+
+#ifdef USE_FAST_EAP_TYPE
+	m_userAction = EEapFastNotifierUserActionOk;
+#endif
+
+	eap_status_e status = m_am_tools->convert_am_error_to_eapol_error(aStatus);
+
+	if(m_notifier_complete)
+	{
+		EAP_TRACE_DATA_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL( "m_notifier_data_pckg_to_user" ),
+			m_notifier_data_pckg_to_user->Ptr(),
+			m_notifier_data_pckg_to_user->Size() ) );
+
+		if ( aStatus == KErrCancel )
+		{
+			EAP_TRACE_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): User cancelled the dialog\n")));
+
+#ifdef USE_FAST_EAP_TYPE
+			m_userAction = EEapFastNotifierUserActionCancel;	
+#endif
+		}		
+		else if( aStatus != KErrNone )
+		{
+			EAP_TRACE_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("ERROR: TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): dialog error=%d\n"),
+				aStatus));
+
+			TBuf8<KMaxNotifItemLength> userNameUtf8;
+			TBuf8<KMaxUiDataLength> challengeUtf8;
+			userNameUtf8.Zero();
+			challengeUtf8.Zero();
+
+			CompleteQueryTtlsPapUserNameAndPassword(
+				status, userNameUtf8, challengeUtf8 );
+
+			return; // m_am_tools->convert_am_error_to_eapol_error(aStatus);		
+		}
+
+		if ( m_notifier_data_to_user->iPassword.Size() > 0 )
+		{
+			HBufC8* notifier_data8 = NULL;
+			TRAPD(err, notifier_data8 = HBufC8::NewL(m_notifier_data_to_user->iPassword.Size()));
+			if (err)
+			{
+				return;	
+			}
+			TPtr8 notifier_dataPtr8 = notifier_data8->Des();
+
+			notifier_dataPtr8.Copy(m_notifier_data_to_user->iPassword); // Unicode -> ascii.
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL( "eap_am_type_tls_peap_symbian_c::DlgComplete PW from UI (8bits)" ),
+				notifier_dataPtr8.Ptr(), 
+				notifier_dataPtr8.Size() ) );
+
+#ifdef USE_FAST_EAP_TYPE
+			status = m_userResponse.set_copy_of_buffer(
+				notifier_dataPtr8.Ptr(),
+				notifier_dataPtr8.Size());
+#endif			
+			CleanupStack::PopAndDestroy( notifier_data8 );
+		}
+	}
+
+	m_notifier_complete = 0;
+
+	if ( m_state == EPapChallenge)
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): EPapChallenge\n")));
+
+		m_state = EPapUserNameAndPassword;
+		TEapExpandedType aEapType(*EapExpandedTypeTtlsPap.GetType());
+
+		if (iEapAuthNotifier == 0)
+		{
+			TRAPD(err, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+			if (err)
+			{
+			eap_variable_data_c userNameUtf8( m_am_tools );
+			eap_variable_data_c passwordUtf8( m_am_tools );
+		
+			(void) m_tls_am_partner->
+			    complete_query_ttls_pap_username_and_password(
+				    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+				return;
+			}
+		}
+
+
+		TTtlsPapDbInfo aInDbInfo;
+		TRAPD(err2, ReadTtlsPapDbL(aInDbInfo));
+		if (err2)
+		{
+			eap_variable_data_c userNameUtf8( m_am_tools );
+			eap_variable_data_c passwordUtf8( m_am_tools );
+		
+			(void) m_tls_am_partner->
+			    complete_query_ttls_pap_username_and_password(
+				    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+			return;
+		}
+
+		m_notifier_data_to_user->iPasswordPromptEnabled = aInDbInfo.iUsrPwdInfo.iPasswordPromptEnabled;
+
+		if (m_notifier_data_to_user->iPasswordPromptEnabled ||
+		(aInDbInfo.iUsrPwdInfo.iUserName.Size() == 0 &&
+		aInDbInfo.iUsrPwdInfo.iPassword.Size() == 0))
+		{
+			m_notifier_data_to_user->iUsername.Zero();
+			m_notifier_data_to_user->iPassword.Zero();
+
+			TRAPD(err3,SetTtlsPapColumnToNullL( cf_str_EAP_TLS_PEAP_ttls_pap_password_literal ));
+			if (err3)
+			{
+			eap_variable_data_c userNameUtf8( m_am_tools );
+			eap_variable_data_c passwordUtf8( m_am_tools );
+		
+			(void) m_tls_am_partner->
+			    complete_query_ttls_pap_username_and_password(
+				    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+			return;
+			}
+
+			if (iEapAuthNotifier == 0)
+			{
+				TRAPD(err4, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+				if (err4)
+				{
+				eap_variable_data_c userNameUtf8( m_am_tools );
+				eap_variable_data_c passwordUtf8( m_am_tools );
+			
+				(void) m_tls_am_partner->
+				    complete_query_ttls_pap_username_and_password(
+					    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+				return;
+				}
+			}
+			else
+			{
+				TRAPD(err5,iEapAuthNotifier->Cancel());
+				if (err5)
+				{
+				eap_variable_data_c userNameUtf8( m_am_tools );
+				eap_variable_data_c passwordUtf8( m_am_tools );
+			
+				(void) m_tls_am_partner->
+				    complete_query_ttls_pap_username_and_password(
+					    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+				return;
+				}
+			}
+
+			TRAPD(err6, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypePapAuthQueryDialog, m_notifier_data_to_user, aEapType));
+			if (err6)
+			{
+			eap_variable_data_c userNameUtf8( m_am_tools );
+			eap_variable_data_c passwordUtf8( m_am_tools );
+		
+			(void) m_tls_am_partner->
+			    complete_query_ttls_pap_username_and_password(
+				    &userNameUtf8, &passwordUtf8, eap_status_process_general_error);	
+			return;
+			}
+		}
+		else
+		{
+			m_notifier_data_to_user->iUsername = aInDbInfo.iUsrPwdInfo.iUserName;
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(): iUserName"),
+				m_notifier_data_to_user->iUsername.Ptr(),
+				m_notifier_data_to_user->iUsername.Size()));
+
+			m_notifier_data_to_user->iPassword = aInDbInfo.iUsrPwdInfo.iPassword;
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(): iPassword"),
+				m_notifier_data_to_user->iPassword.Ptr(),
+				m_notifier_data_to_user->iPassword.Size()));
+
+			DlgComplete(KErrNone);
+		}
+		 
+	}
+	else if ( m_state == EPapUserNameAndPassword )
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): EPapUserNameAndPassword\n")));
+
+		TBuf8<KMaxNotifItemLength> userNameUtf8;
+		TBuf8<KMaxNotifItemLength> passwordUtf8;
+		userNameUtf8.Zero();
+		passwordUtf8.Zero();
+
+		if (m_notifier_data_to_user->iUsername.Size()>0)
+		{
+			CnvUtfConverter::ConvertFromUnicodeToUtf8( userNameUtf8, m_notifier_data_to_user->iUsername );
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL( "userNameUtf8" ),
+				userNameUtf8.Ptr(),
+				userNameUtf8.Size() ) );
+		}
+
+		if (m_notifier_data_to_user->iPassword.Size()>0)
+		{
+			CnvUtfConverter::ConvertFromUnicodeToUtf8( passwordUtf8, m_notifier_data_to_user->iPassword );   	
+		}
+
+		EAP_TRACE_DATA_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL( "passwordUtf8" ),
+			passwordUtf8.Ptr(),
+			passwordUtf8.Size() ) );
+
+		CompleteQueryTtlsPapUserNameAndPassword(
+			status, userNameUtf8, passwordUtf8 );  
+
+		TTtlsPapDbInfo aInDbInfo;
+		aInDbInfo.iUsrPwdInfo.iPasswordPromptEnabled = m_notifier_data_to_user->iPasswordPromptEnabled;
+		aInDbInfo.iUsrPwdInfo.iUserName.Copy(userNameUtf8);
+		aInDbInfo.iUsrPwdInfo.iPassword.Copy(passwordUtf8);
+
+		TRAPD(err1, WriteTtlsPapDbL( aInDbInfo));
+		if (err1)
+		{
+			// continue
+		}
+	}
+#ifdef USE_FAST_EAP_TYPE
+	else if ( m_state == EPasswordCancel
+		|| m_state == EMasterkeyQuery
+		|| m_state == EPasswordQuery
+		|| m_state == EWrongPassword
+		|| m_state == EFilePasswordQuery )
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("TLS: function: eap_am_type_tls_peap_symbian_c::DlgComplete(): else\n")));
+
+		m_eap_fast_completion_status = m_partner->set_timer(
+			this,
+			KHandleReadPacstoreTimerID, 
+			&aStatus,
+			0);
+		return;
+	}
+#endif //#ifdef USE_FAST_EAP_TYPE
+
+}
+
+//--------------------------------------------------
+
 //
-
 void eap_am_type_tls_peap_symbian_c::RunL()
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);		
@@ -627,41 +858,17 @@
 		iStatus.Int() , m_state));
 	
 #ifdef USE_FAST_EAP_TYPE
-	eap_status_e status(eap_status_ok);
-
-	if (m_notifier_complete)
-	{
-	
-		TRAPD(err, CompleteNotifierL());// Only for the notifiers.
-		if (err != KErrNone)
-			{
-			EAP_TRACE_ERROR(m_am_tools, 
-					TRACE_FLAGS_DEFAULT, (
-					EAPL("eap_am_type_tls_peap_symbian_c::RunL LEAVE from CompleteNotifierL, Error =%d \n"),
-					err));
-			}
-
-		m_notifier_complete = EFalse;
-	}
-
-	if ( m_state == EPasswordCancel ||
-		 m_state == EMasterkeyQuery ||
-		 m_state == EPasswordQuery ||
-		 m_state == EWrongPassword ||
-		 m_state == EFilePasswordQuery )
-		{
-		m_eap_fast_completion_status = m_partner->set_timer(
-				this,
-				KHandleReadPacstoreTimerID, 
-				&status,
-				0);
-		return;
-		}
 	if (m_state == ENone)
 		{
 		return;		
 		}
 
+		if ( m_state == EHandlingDeviceSeedQuery)
+			{
+		  CompleteCreateDeviceSeedL( iStatus.Int() );     
+
+		  return;
+			}
 #endif // #ifdef USE_FAST_EAP_TYPE
 
 	if (iStatus.Int() != KErrNone)
@@ -701,10 +908,11 @@
 				0, 
 				eap_status_process_general_error);			
 			return;
+			
 		default:
 			return;
 		}
-	}
+	} // (iStatus.Int() != KErrNone)
 
 	if (m_state == EHandlingIdentityQuery
 		|| m_state == EHandlingChainQuery)
@@ -723,7 +931,7 @@
 		
 		if(m_allowed_user_certs.Count() > 0)
 		{
-			m_own_certificate_info = m_allowed_user_certs[index];			
+			m_own_certificate_info = *m_allowed_user_certs[index];			
 		}
 		
 		TBool retrieve_chain;
@@ -742,7 +950,7 @@
 		
 		if(allowed_user_cert_count > 0)
 		{
-			TRAP(err, m_cert_if->ReadCertificateL(m_allowed_user_certs[index], retrieve_chain));			
+			TRAP(err, m_cert_if->ReadCertificateL(*m_allowed_user_certs[index], retrieve_chain));			
 		}
 		if (err != KErrNone || allowed_user_cert_count <= 0)
 		{
@@ -782,102 +990,124 @@
 			}
 		}
 	}
-	else if (m_state == EHandlingManualIdentityQuery)
-	{
-		// Convert to 8-bit text
-		TBuf8<KIdentityFieldLength> buf;
-		buf.Copy(m_identity_info->iUsername);
-		
-		eap_status_e status = m_manual_username.set_copy_of_buffer(
-			buf.Ptr(), 
-			buf.Size());
-
-		if (status != eap_status_ok)
-		{
-			EAP_TRACE_DEBUG(
-				m_am_tools,
-				TRACE_FLAGS_DEFAULT,
-				(EAPL("ERROR: EAP-TLS: EHandlingIdentityQuery: Cannot read manual username.\n")));
-
-			get_am_partner()->complete_eap_identity_query(
-				0, // 0 because identity query failed
-				&m_receive_network_id,
-				m_eap_identifier,
-				status,
-				false,
-				0,
-				false,
-				0);
-		}
-
-		buf.Copy(m_identity_info->iRealm);
-		status = m_manual_realm.set_copy_of_buffer(
-			buf.Ptr(), 
-			buf.Size());
-
-		if (status != eap_status_ok)
-		{
-			EAP_TRACE_DEBUG(
-				m_am_tools,
-				TRACE_FLAGS_DEFAULT,
-				(EAPL("ERROR: EAP-TLS: EHandlingIdentityQuery: Cannot read manual realm.\n")));
-
-			get_am_partner()->complete_eap_identity_query(
-				0, // 0 because identity query failed
-				&m_receive_network_id,
-				m_eap_identifier,
-				status,
-				false,
-				0,
-				false,
-				0);
-		}
-
-		// This must be true
-		m_use_manual_realm = true; 
-		
-		if (m_identity_info->iUseManualUsername)
-		{
-			m_use_manual_username = true;
-		}
-		else
-		{
-			m_use_manual_username = false;
-		}
-		
-		
-		get_am_partner()->complete_eap_identity_query(
-			0, // 0 because identity query failed
-			&m_receive_network_id,
-			m_eap_identifier,
-			eap_status_ok,
-			m_use_manual_username,
-			&m_manual_username,
-			m_use_manual_realm,
-			&m_manual_realm);
-		
-		TRAPD(err, SaveManualIdentityL( 
-				m_identity_info->iUseManualUsername,
-				m_identity_info->iUsername,
-				ETrue,
-				m_identity_info->iRealm));
-
-		(void)EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(err));
-
-		// Ignore return value on purpose. It's not fatal if saving fails.							
-					
-		delete m_identity_info; 
-		m_identity_info = 0;
-
-	}
 
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
 }
 
 //--------------------------------------------------
-
+#ifdef USE_FAST_EAP_TYPE
+//
+// ---------------------------------------------------------
+// eap_am_type_tls_peap_symbian_c::CreateDeviceSeedAsync()
+// ---------------------------------------------------------
 //
-
+eap_status_e eap_am_type_tls_peap_symbian_c::CreateDeviceSeedAsync()
+{   
+    EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+
+    EAP_TRACE_DEBUG_SYMBIAN(
+        (_L("eap_am_type_tls_peap_symbian_c::CreateDeviceSeedAsync-Start ActiveStatus=%d"),
+        IsActive()));       
+    
+    if ( IsActive() )
+    {
+        EAP_TRACE_DEBUG_SYMBIAN(
+            (_L("CreateDeviceSeedAsync: Already active when tried to create device seed")));       
+        
+        return eap_status_device_busy;
+    }
+
+    eap_status_e status(eap_status_ok); 
+    
+    m_state = EHandlingDeviceSeedQuery;
+        
+    // Create MMETEL connection.
+    TRAPD(error, CreateMMETelConnectionL());
+    if(error !=KErrNone)
+    {
+        return m_am_tools->convert_am_error_to_eapol_error(error);
+    }
+    
+    iPhone.GetPhoneId( iStatus, iDeviceId ); 
+
+    SetActive();
+    return status;
+} // eap_am_type_tls_peap_symbian_c::CreateDeviceSeedAsynch()
+
+//--------------------------------------------------
+
+void eap_am_type_tls_peap_symbian_c::CompleteCreateDeviceSeedL( TInt aStatus )
+{
+    EAP_TRACE_DEBUG_SYMBIAN(
+            (_L("eap_am_type_tls_peap_symbian_c::CompleteCreateDeviceSeedL aStatus=%d"),
+            iStatus.Int()));
+    if ( aStatus != KErrNone )
+        {
+        EAP_TRACE_DEBUG_SYMBIAN(
+                (_L("eap_am_type_tls_peap_symbian_c::CompleteCreateDeviceSeedL ERROR: aStatus=%d"),
+                iStatus.Int()));        
+        }
+    EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Manufacturer"),
+        iDeviceId.iManufacturer.Ptr(),
+        iDeviceId.iManufacturer.Size()));
+    EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Model"),
+        iDeviceId.iModel.Ptr(),
+        iDeviceId.iModel.Size()));
+    EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Revision"),
+        iDeviceId.iRevision.Ptr(),
+        iDeviceId.iRevision.Size()));
+    EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("SerialNumber"),
+        iDeviceId.iSerialNumber.Ptr(),
+        iDeviceId.iSerialNumber.Size()));
+        
+    // Combine all the above four items.            
+    TBuf<KMaxDeviceSeedLength> deviceSeed16;    
+    deviceSeed16 += iDeviceId.iManufacturer;
+    deviceSeed16 += iDeviceId.iModel;
+    deviceSeed16 += iDeviceId.iSerialNumber;
+        
+    TBuf8<KMaxDeviceSeedSize> deviceSeed8;
+    deviceSeed8.Copy(deviceSeed16);     
+
+    if ( iPacStoreDeviceSeed == NULL )
+        {
+        iPacStoreDeviceSeed  = new  eap_variable_data_c(m_am_tools);
+        if ( iPacStoreDeviceSeed == NULL )
+            {
+            User::Leave( KErrNoMemory );
+            }
+        }
+
+#if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
+    const char DUMMY_SEED[]="empty";
+ 
+
+    if (m_skip_user_interactions == true)
+        {
+        iPacStoreDeviceSeed->set_copy_of_buffer(DUMMY_SEED, sizeof(DUMMY_SEED));
+        }
+    else
+#endif //#if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
+        {
+        
+        if ( iPacStoreDeviceSeed != NULL )
+            {
+            if( deviceSeed8.Size() > 0)
+                {
+                iPacStoreDeviceSeed->set_copy_of_buffer(
+                    deviceSeed8.Ptr(),
+                    deviceSeed8.Size());
+                }
+            }
+        }
+    DisconnectMMETel();
+    
+    ContinueInitializePacStore();
+
+} // eap_am_type_tls_peap_symbian_c::CompleteCreateDeviceSeedL()
+
+#endif
+//--------------------------------------------------
 
 void eap_am_type_tls_peap_symbian_c::DoCancel()
 {
@@ -889,18 +1119,12 @@
 	{
 		m_cert_if->Cancel();		
 	}
-
-	if ( iEapTtlsPapActive )
-		{
-		if ( iEapTtlsPapActive->IsActive() )
-			{
-			EAP_TRACE_DEBUG_SYMBIAN(
-				( _L( " eap_am_type_tls_peap_symbian_c::DoCancel() \
-				Cancelling iEapTtlsPapActive." ) ) );
-			iEapTtlsPapActive->Cancel();
-			}
-		}
-	
+	if (iEapAuthNotifier != 0)
+		{
+		iEapAuthNotifier->Cancel();
+		}
+
+
 #if defined(USE_FAST_EAP_TYPE)
 
 	m_partner->cancel_timer(
@@ -919,23 +1143,6 @@
 			this, 
 			KHandleReadPacstoreTimerID);
 
-	if( m_is_notifier_connected )
-	{
-		EAP_TRACE_DEBUG_SYMBIAN(
-			(_L(" eap_am_type_tls_peap_symbian_c::DoCancel - calling m_notifier.CancelNotifier")));
-		if(IsActive())
-			{
-			TInt error = m_notifier.CancelNotifier(KEapFastNotifierUid);
-			EAP_TRACE_DEBUG_SYMBIAN(
-				(_L("eap_am_type_tls_peap_symbian_c::DoCancel:CancelNotifier=%d"),
-				error));
-			}
-
-		m_notifier.Close(); // Call close only if it is connected.	
-			
-		m_is_notifier_connected = false;
-
-	} // End: if( m_is_notifier_connected )		
 
 #endif // #if defined(USE_FAST_EAP_TYPE)
 	
@@ -945,7 +1152,6 @@
 //--------------------------------------------------
 
 //
-
 eap_status_e eap_am_type_tls_peap_symbian_c::SaveManualIdentityL( 
 	const TBool use_manual_username,
 	TDesC& manual_username,
@@ -955,11 +1161,11 @@
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
 	
 	// Validate length.
-	if(manual_username.Length() > KMaxManualUsernameLengthInDB
-		|| manual_realm.Length() > KMaxManualRealmLengthInDB)
+	if(manual_username.Length() > KMaxUsernameLengthInDB
+		|| manual_realm.Length() > KMaxRealmLengthInDB)
 	{
 		// Username or realm too long. Can not be stored in DB.
-		EAP_TRACE_DEBUG_SYMBIAN((_L("eap_am_type_tls_peap_symbian_c::SaveManualIdentityL: Too long username or realm. Length: UN=%d, Realm=%d\n"),
+		EAP_TRACE_DEBUG_SYMBIAN((_L("eap_am_type_tls_peap_symbian_c::SaveManualIdentityL: Too long username or realm. Length: manual_username=%d, manual_realm=%d\n"),
 		manual_username.Length(), manual_realm.Length()));
 		
 		User::Leave(KErrArgument);
@@ -970,10 +1176,19 @@
 
 	RDbView view;
 
-	_LIT(KSQL, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	
-	sqlStatement.Format(KSQL, &m_db_table_name, 
-		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQL, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+	
+	sqlStatement.Format(
+		KSQL,
+		&m_db_table_name, 
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 	
 	User::LeaveIfError(view.Prepare(m_database, TDbQuery(sqlStatement), TDbWindow::EUnlimited));	
 	CleanupClosePushL(view);
@@ -1051,9 +1266,10 @@
 //
 void eap_am_type_tls_peap_symbian_c::SendErrorNotification(
 	const eap_status_e aError )
-	{
+{
 	send_error_notification( aError );
-	}
+}
+
 //--------------------------------------------------
 
 #if defined(USE_FAST_EAP_TYPE)
@@ -1068,19 +1284,15 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 
-
-
-
 // ---------------------------------------------------------
 // eap_am_type_tls_peap_symbian_c::IsProvisioningMode()
 // ---------------------------------------------------------
 //
 TBool eap_am_type_tls_peap_symbian_c::IsProvisioningMode()
-	{
+{
 	return ( m_provisioning_mode ==
         eap_fast_completion_operation_server_authenticated_provisioning_mode ) ? ETrue : EFalse;
-	}
-
+}
 
 // ---------------------------------------------------------
 // eap_am_type_tls_peap_symbian_c::CompleteQueryUserPermissionForAid()
@@ -1089,7 +1301,7 @@
 eap_status_e
 eap_am_type_tls_peap_symbian_c::CompleteQueryUserPermissionForAid(
 	EEapFastNotifierUserAction aUserAction )
-	{
+{
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::CompleteQueryUserPermissionForAid")));
 	if ( aUserAction == EEapFastNotifierUserActionOk )
@@ -1113,15 +1325,14 @@
   		        m_pending_operation );
   		} 
 	return m_eap_fast_completion_status;
-	}
-
+}
 
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
 //--------------------------------------------------
 
 //
-void eap_am_type_tls_peap_symbian_c::notify_configuration_error(
+EAP_FUNC_EXPORT void eap_am_type_tls_peap_symbian_c::notify_configuration_error(
 	const eap_status_e configuration_status)
 {
 	if (m_is_client == true)
@@ -1198,7 +1409,7 @@
 		{
 			EAP_TRACE_ERROR(m_am_tools, 
 				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - ReadCertRowsToArrayL, User cert, Error =%d \n"),
+				EAPL("eap_am_type_tls_peap_symbian_c::configure(): ReadCertRowsToArrayL, User cert, Error =%d \n"),
 				err));
 		
 			// Convert the leave error code to EAPOL stack error code.
@@ -1224,7 +1435,7 @@
 		{
 			EAP_TRACE_ERROR(m_am_tools, 
 				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - ReadCertRowsToArrayL, CA cert, Error =%d \n"),
+				EAPL("eap_am_type_tls_peap_symbian_c::configure(): ReadCertRowsToArrayL, CA cert, Error =%d \n"),
 				err));
 		
 			// Convert the leave error code to EAPOL stack error code.
@@ -1251,7 +1462,7 @@
 		{
 			EAP_TRACE_ERROR(m_am_tools, 
 				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - ReadUintRowsToArrayL, CipherSuit, Error =%d \n"),
+				EAPL("eap_am_type_tls_peap_symbian_c::configure(): ReadUintRowsToArrayL, CipherSuit, Error =%d \n"),
 				err));
 
 			// Convert the leave error code to EAPOL stack error code.
@@ -1274,8 +1485,6 @@
 		
 		)
 	{
-#ifdef USE_EAP_EXPANDED_TYPES
-
 		TRAPD(err, EapTlsPeapUtils::GetTunnelingExpandedEapDataL(
 			m_database,
 			m_am_tools,
@@ -1285,24 +1494,12 @@
 			m_index,
 			m_tunneling_type,
 			m_current_eap_type));
-
-#else
-		TRAPD(err, EapTlsPeapUtils::GetEapDataL(
-			m_database,
-			m_am_tools,
-			m_iap_eap_array,
-			m_index_type,
-			m_index,
-			m_tunneling_type,
-			m_current_eap_type));
-
-#endif //#ifdef USE_EAP_EXPANDED_TYPES
 	
 		if (err != KErrNone)
 		{
 			EAP_TRACE_ERROR(m_am_tools, 
 				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - GetEapDataL or GetTunnelingExpandedEapDataL, Error =%d \n"),
+				EAPL("eap_am_type_tls_peap_symbian_c::configure(): GetEapDataL or GetTunnelingExpandedEapDataL, Error =%d \n"),
 				err));
 
 			// Convert the leave error code to EAPOL stack error code.
@@ -1367,6 +1564,28 @@
 
 	//----------------------------------------------------------
 
+	if (m_is_client == true)
+	{
+		eap_variable_data_c use_automatic_ca_certificate(m_am_tools);
+
+		eap_status_e status = type_configure_read(
+			cf_str_EAP_TLS_PEAP_use_automatic_ca_certificate.get_field(),
+			&use_automatic_ca_certificate);
+		if (status == eap_status_ok
+			&& use_automatic_ca_certificate.get_is_valid_data() == true)
+		{
+			u32_t *use_automatic_ca_certificate_flag = reinterpret_cast<u32_t *>(
+				use_automatic_ca_certificate.get_data(sizeof(u32_t)));
+			if (use_automatic_ca_certificate_flag != 0
+				&& *use_automatic_ca_certificate_flag != 0)
+			{
+				m_use_automatic_ca_certificate = true;
+			}
+		}
+	}
+
+	//----------------------------------------------------------
+
 	// This is only for server
 	{
 		eap_variable_data_c cipher_suite(m_am_tools);
@@ -1388,75 +1607,6 @@
 	
 	//----------------------------------------------------------
 
-#ifndef USE_EAP_EXPANDED_TYPES // This is not needed it seems. Still keeping it for normal EAP types.
-								  // Intention of this is to get tunneled EAP types, but m_tunneled_type is not used
-								  // anywhere other than this place.
-
-	if (m_current_eap_type == eap_type_peap
-#if defined(USE_TTLS_EAP_TYPE)
-		|| m_current_eap_type == eap_type_ttls
-#endif // #if defined(USE_TTLS_EAP_TYPE)
-
-#if defined(USE_FAST_EAP_TYPE)
-		|| m_current_eap_type == eap_type_fast
-#endif
-	
-		
-		)
-	{
-		eap_variable_data_c tunneled_type(m_am_tools);
-
-		eap_status_e status = type_configure_read(
-			cf_str_PEAP_tunneled_eap_type_hex_data.get_field(),
-			&tunneled_type);
-		if (status == eap_status_illegal_configure_type)
-		{
-			status = m_partner->read_configure(
-				cf_str_PEAP_tunneled_eap_type_u32_t.get_field(),
-				&tunneled_type);
-		}
-		if (status != eap_status_ok)
-		{
-			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-			return EAP_STATUS_RETURN(m_am_tools, status);
-		}
-		else if (tunneled_type.get_is_valid_data() == true
-			&& tunneled_type.get_data_length() == sizeof(u32_t)
-			&& tunneled_type.get_data(sizeof(u32_t)) != 0)
-		{
-			m_tunneled_type = static_cast<eap_type_value_e>(
-				*reinterpret_cast<u32_t *>(tunneled_type.get_data(sizeof(u32_t))));
-		}
-		else if (tunneled_type.get_data_length()
-				 == eap_expanded_type_c::get_eap_expanded_type_size()
-				 && tunneled_type.get_data(tunneled_type.get_data_length()) != 0)
-		{
-			eap_expanded_type_c eap_type(eap_type_none);
-
-			status = eap_type.set_expanded_type_data(
-				m_am_tools,
-				&tunneled_type);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-
-			status = eap_type.get_type_data(
-				m_am_tools,
-				&m_tunneled_type);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-	}
-  
-#endif //#ifndef USE_EAP_EXPANDED_TYPES
-
-	//----------------------------------------------------------
-
 	{
 		eap_variable_data_c use_manual_username(m_am_tools);
 
@@ -1532,7 +1682,7 @@
 	{
 		eap_variable_data_c use_session_ticket(m_am_tools);
 
-		eap_status_e status = m_partner->read_configure(
+		eap_status_e status = type_configure_read(
 			cf_str_EAP_TLS_PEAP_use_session_ticket.get_field(),
 			&use_session_ticket);
 		if (status == eap_status_ok
@@ -1603,60 +1753,48 @@
 		
 		eap_status_e status(eap_status_ok);
 
-		switch (m_current_eap_vendor_type)
-		{
-		case eap_type_tls:
-			{
-				status = m_partner->read_configure(
-					cf_str_EAP_TLS_max_session_validity_time.get_field(),
-					&sessionTimeFromFile);
-			}
-			break;
-
-		case eap_type_peap:
-			{
-				status = m_partner->read_configure(
-					cf_str_EAP_PEAP_max_session_validity_time.get_field(),
-					&sessionTimeFromFile);
-			}
-			break;
-
-		case eap_type_ttls:
-			{
-				status = m_partner->read_configure(
-					cf_str_EAP_TTLS_max_session_validity_time.get_field(),
-					&sessionTimeFromFile);
-			}
-			break;
-
-		case eap_type_ttls_plain_pap:
-			{
+		if (m_current_eap_type == eap_type_tls)
+		{
+			status = type_configure_read(
+				cf_str_EAP_TLS_max_session_validity_time.get_field(),
+				&sessionTimeFromFile);
+		}
+		else if (m_current_eap_type == eap_type_peap)
+		{
+			status = type_configure_read(
+				cf_str_EAP_PEAP_max_session_validity_time.get_field(),
+				&sessionTimeFromFile);
+		}
+		else if (m_current_eap_type == eap_type_ttls)
+		{
+			status = type_configure_read(
+				cf_str_EAP_TTLS_max_session_validity_time.get_field(),
+				&sessionTimeFromFile);
+		}
+		else if (m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type())
+		{
 			// read PAP session time
-			status = m_partner->read_configure(
+			status = type_configure_read(
 				cf_str_EAP_TLS_PEAP_ttls_pap_max_session_validity_time.get_field(),
 				&sessionTimeFromFile );
-			}
-			break;
-			
+		}
 #if defined(USE_FAST_EAP_TYPE)
-		case eap_type_fast:
-			{
-				status = m_partner->read_configure(
-					cf_str_EAP_FAST_max_session_validity_time.get_field(),
-					&sessionTimeFromFile);
-			}
-			break;
+		else if (m_current_eap_type == eap_type_fast)
+		{
+			status = type_configure_read(
+				cf_str_EAP_FAST_max_session_validity_time.get_field(),
+				&sessionTimeFromFile);
+		}
 #endif
-			
-		default:
-			{
-				// Should never happen
-				EAP_TRACE_ERROR(m_am_tools, 
-					TRACE_FLAGS_DEFAULT, (
-					EAPL("eap_am_type_tls_peap_symbian_c::configure - Unsupported EAP type, m_current_eap_vendor_type=%d \n"),
-					m_current_eap_vendor_type));
-			}
-		}	
+		else
+		{
+			// Should never happen
+			EAP_TRACE_ERROR(m_am_tools, 
+				TRACE_FLAGS_DEFAULT, (
+				EAPL("eap_am_type_tls_peap_symbian_c::configure(): Unsupported EAP type, m_current_eap_vendor_type=0xfe%06x%08x\n"),
+				m_current_eap_type.get_vendor_id(),
+				m_current_eap_type.get_vendor_type()));
+		}
 
 		// set m_max_session_time
 		if (status == eap_status_ok
@@ -1757,88 +1895,130 @@
 	
 	status = eap_status_ok;
 
-	if (m_allowed_ca_certs.Count() == 0)
-	{		
-	// needed because of nonworking wrong settings
+	if (m_use_automatic_ca_certificate == false)
+	{
+		if (m_allowed_ca_certs.Count() == 0)
+		{
+			// needed because of nonworking wrong settings
 #if defined(USE_FAST_EAP_TYPE)
-		if(m_current_eap_type == eap_type_fast &&
-			m_serv_auth_prov_mode != true)
-		{
-			// In the case of EAP-FAST, CA cert is must if m_serv_auth_prov_mode is TRUE.
-			status = eap_status_ok;
-			
-			EAP_TRACE_DEBUG(m_am_tools, 
-				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - No CA certificate but exception for EAP-FAST as m_serv_auth_prov_mode is FALSE and for all m_serv_unauth_prov_mode \n")));				
-		}
-		else	
+			if(m_current_eap_type == eap_type_fast
+				&& m_serv_auth_prov_mode != true)
+			{
+				// In the case of EAP-FAST, CA cert is must if m_serv_auth_prov_mode is TRUE.
+				status = eap_status_ok;
+				
+				EAP_TRACE_DEBUG(
+					m_am_tools, 
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("eap_am_type_tls_peap_symbian_c::configure(): No CA certificate but exception for EAP-FAST as m_serv_auth_prov_mode is FALSE and for all m_serv_unauth_prov_mode \n")));
+			}
+			else	
 #endif // #if defined(USE_FAST_EAP_TYPE)
-		{
-			EAP_TRACE_ERROR(m_am_tools, 
-				TRACE_FLAGS_DEFAULT, (
-				EAPL("eap_am_type_tls_peap_symbian_c::configure - Error - No CA certificate\n")));
-		
-			// No root certificate selected. Cannot continue.
-			status = eap_status_ca_certificate_unknown;
-			send_error_notification(status);
-		}			
-	}
-	
+			{
+				EAP_TRACE_ERROR(
+					m_am_tools, 
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("eap_am_type_tls_peap_symbian_c::configure(): Error - No CA certificate\n")));
+			
+				// No root certificate selected. Cannot continue.
+				status = eap_status_ca_certificate_unknown;
+				send_error_notification(status);
+			}			
+		}
+		else
+		{
+			EAP_TRACE_DEBUG(
+				m_am_tools, 
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::configure(): %d CA certificates selected.\n"),
+				m_allowed_ca_certs.Count()));
+		}
+	}
+	else
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::configure(): %d CA certificate selected in automatic CA selection.\n"),
+			m_allowed_ca_certs.Count()));
+	}
+	
+
 	if(m_allowed_user_certs.Count() == 0)
-		{
+	{
 #if defined(USE_FAST_EAP_TYPE)
 		if(m_current_eap_type == eap_type_fast)
-			{
+		{
 			m_use_manual_realm = true;
 
 			if (m_use_manual_username == false)
-				{
+			{
 				TRAPD(err, status=ConfigureL());
 				if (err != KErrNone)
-					{
+				{
 					EAP_TRACE_ERROR(m_am_tools, 
 							TRACE_FLAGS_DEFAULT, (
 							EAPL("eap_am_type_tls_peap_symbian_c::configure LEAVE from ConfigureL, Error =%d \n"),
 							err));
-					}
 				}
 			}
+		}
 #endif // #if defined(USE_FAST_EAP_TYPE)
-		}
+	}
+	else
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::configure(): %d user certificates selected.\n"),
+			m_allowed_user_certs.Count()));
+	}
+
+
 	if (m_tls_peap_server_authenticates_client_policy_flag == true
 		&& m_allowed_user_certs.Count() == 0)
 	{
 #if defined(USE_FAST_EAP_TYPE)
-    if (m_current_eap_type == eap_type_fast)
-        {
-        EAP_TRACE_DEBUG(m_am_tools, 
-            TRACE_FLAGS_DEFAULT, 
-            (EAPL("eap_am_type_tls_peap_symbian_c::configure - No USER certificate, but in eap_fast it's not mandatory\n")));  
-    
-        }
-	else
+		if (m_current_eap_type == eap_type_fast)
+		{
+			EAP_TRACE_DEBUG(
+				m_am_tools, 
+				TRACE_FLAGS_DEFAULT, 
+				(EAPL("eap_am_type_tls_peap_symbian_c::configure(): No USER certificate, but in eap_fast it's not mandatory\n")));
+		}
+		else
 #endif // #if defined(USE_FAST_EAP_TYPE)
 	    {
-	    EAP_TRACE_ERROR(m_am_tools, 
-			TRACE_FLAGS_DEFAULT, (
-			EAPL("eap_am_type_tls_peap_symbian_c::configure - Error - No USER certificate\n")));
-	
-		// No user certificate selected. Cannot continue.
-		status = eap_status_user_certificate_unknown;
-		send_error_notification(status);
+			EAP_TRACE_ERROR(
+				m_am_tools, 
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::configure(): Error - No USER certificate\n")));
+		
+			// No user certificate selected. Cannot continue.
+			status = eap_status_user_certificate_unknown;
+			send_error_notification(status);
 	    }
 	}
 
 	if (m_allowed_cipher_suites.Count() == 0)
 	{
-		EAP_TRACE_ERROR(m_am_tools, 
-			TRACE_FLAGS_DEFAULT, (
-			EAPL("eap_am_type_tls_peap_symbian_c::configure - Error - No cipher suit\n")));
+		EAP_TRACE_ERROR(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::configure(): Error - No cipher suit\n")));
 
 		// No sipher suites selected. Cannot continue.
 		status = eap_status_illegal_cipher_suite;
 		send_error_notification(status);
 	}
+	else
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::configure(): %d cipher suites selected.\n"),
+			m_allowed_cipher_suites.Count()));
+	}
 
 	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
@@ -1849,19 +2029,21 @@
 	
 	m_configured = true;
 	
-	EAP_TRACE_DEBUG(m_am_tools, 
+	EAP_TRACE_DEBUG(
+		m_am_tools, 
 		TRACE_FLAGS_DEFAULT, 
-		(EAPL("eap_am_type_tls_peap_symbian_c::configure - END \n")));	
+		(EAPL("eap_am_type_tls_peap_symbian_c::configure(): END \n")));
 	
 
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
 //--------------------------------------------------
+
 #if defined(USE_FAST_EAP_TYPE)
 
 eap_status_e eap_am_type_tls_peap_symbian_c::ConfigureL()
-	{
+{
 	
 	eap_status_e status(eap_status_ok);
 	
@@ -1870,7 +2052,8 @@
 
 	TempUserName.Copy(KTempUserName);
 	
-	HBufC8* buf = HBufC8::NewLC(KIdentityFieldLength);
+  HBufC8* buf = HBufC8::NewLC(KMaxNotifItemLength);
+
 	TPtr8 bufPtr = buf->Des();
 
 	HBufC8* tempUserBuf8 = HBufC8::NewLC(KMacAddressLength);
@@ -1950,13 +2133,13 @@
 	m_use_manual_username = true;
 	
 	return status;
-	}
+}
 
 #endif // #if defined(USE_FAST_EAP_TYPE)
 
 //--------------------------------------------------
 
-eap_status_e eap_am_type_tls_peap_symbian_c::reset()
+EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::reset()
 {
 
 	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
@@ -1990,6 +2173,8 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::authentication_finishedL(
 	const bool true_when_successful,
 	const tls_session_type_e tls_session_type)
@@ -2095,6 +2280,7 @@
 	// Get the own certificate only if it has already been retrieved
 	if (m_own_certificate == 0)
 	{
+		// Get the matching certificates. This function call is completed asyncronously by complete_get_matching_certificates() function call.
 		TRAPD(err, m_cert_if->GetMatchingCertificatesL(
 			m_allowed_user_certs, 
 			EFalse, 
@@ -2131,6 +2317,7 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
+//--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::complete_read_own_certificate(
 	const RPointerArray<CX509Certificate>& aCertChain, eap_status_e aStatus)
@@ -2393,6 +2580,8 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
+//--------------------------------------------------
+
 eap_status_e eap_am_type_tls_peap_symbian_c::complete_read_ca_certificate(
 		const RPointerArray<CX509Certificate>& aCertChain, eap_status_e aStatus)
 {
@@ -2582,6 +2771,8 @@
 	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);	
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::get_identities_from_distinguished_namesL(
 	const CX509Certificate * const aCertificate, 
 	eap_variable_data_c * const aSubjectIdentity,
@@ -2685,6 +2876,8 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::get_identity_from_alternative_nameL(
 	const CX509Certificate * const aCertificate, 
 	eap_variable_data_c * const aIdentity)
@@ -2886,9 +3079,6 @@
 //--------------------------------------------------
 
 //
-//--------------------------------------------------
-
-//
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::timer_expired(
 	const u32_t id, void *data)
 {
@@ -3159,6 +3349,9 @@
 		TRACE_FLAGS_DEFAULT, 
 		(EAPL("eap_am_type_tls_peap_symbian_c::type_configure_read - Start\n")));
 	
+	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eap_am_type_tls_peap_symbian_c::type_configure_read()");
+
+
 	if (m_current_eap_type == eap_type_peap
 #if defined(USE_TTLS_EAP_TYPE)
 		|| m_current_eap_type == eap_type_ttls
@@ -3167,7 +3360,7 @@
 		|| m_current_eap_type == eap_type_fast
 #endif
 
-		|| m_current_eap_type == eap_type_ttls_plain_pap
+		|| m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type()
 	
 		)
 	{
@@ -3230,8 +3423,6 @@
 		{
 			// We are asked to return cf_str_PEAP_tunneled_eap_type_hex_data
 			
-#ifdef USE_EAP_EXPANDED_TYPES
-	
 			// We need to return here the next ENABLED tunneled EAP type we should try. 
 	
 			if (0 == m_enabled_tunneling_exp_eap_array.Count())
@@ -3249,108 +3440,35 @@
 			{
 				// Get the first enabled EAP type (tunneling).
 
-				TBuf8<KExpandedEAPTypeSize> tmpExpEAP(m_enabled_tunneling_exp_eap_array[0]->iExpandedEAPType); //first item.
-
 				EAP_TRACE_DATA_DEBUG(
 					m_am_tools,
 					TRACE_FLAGS_DEFAULT,
 					(EAPL("type_configure_read:Enabled expanded tunneling EAP type:"),
-					tmpExpEAP.Ptr(),
-					tmpExpEAP.Size()));
-					
-					status = data->set_copy_of_buffer(tmpExpEAP.Ptr(), KExpandedEAPTypeSize);
-					if (status != eap_status_ok)
-					{
-						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-						return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);			
-					}
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Ptr(),
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Length()));
+					
+				status = data->set_copy_of_buffer(
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Ptr(),
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Length());
+				if (status != eap_status_ok)
+				{
+					EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+					return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);			
+				}
 					
 				EAP_TRACE_DATA_DEBUG(
 					m_am_tools,
 					TRACE_FLAGS_DEFAULT,
 					(EAPL("EAP-PEAP or EAP-TTLS: Trying encapsulated EAP type:"),
-					tmpExpEAP.Ptr(),
-					tmpExpEAP.Size()));
-			}
-	
-#else // For normal EAP types.
-			
-			// We need to return here the next tunneled EAP type we should try. 
-			TInt i;
-
-			for (i = 0; i < m_iap_eap_array.Count(); i++)
-			{
-				// Find the first enabled EAP type (highest priority)
-				TEap *eapType = m_iap_eap_array[i];			
-				if (eapType->Enabled == 1)
-				{
-					// Convert the string to integer
-					TLex8 tmp(eapType->UID);
-					TInt val(0);
-					tmp.Val(val);
-					status = data->set_copy_of_buffer(reinterpret_cast<u8_t *>(&val), sizeof(TUint));
-					if (status != eap_status_ok)
-					{
-						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-						return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);			
-					}
-					EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("EAP-PEAP: Trying encapsulated EAP type: %d.\n"), val));
-					break;
-				}
-			}		
-			if (i == m_iap_eap_array.Count())
-			{
-				// Not found
-				if (m_is_client)
-				{
-					EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: No configured encapsulated EAP types.\n")));
-				}
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_configure_field);
-			}
-			
-#endif //#ifdef USE_EAP_EXPANDED_TYPES
-					
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Ptr(),
+					m_enabled_tunneling_exp_eap_array[0]->GetValue().Length()));
+			}
+
 			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 			return EAP_STATUS_RETURN(m_am_tools, status);
 		
 		} // End of  if (!wanted_field.compare(&type_field))
 		
-#if !defined(USE_EAP_EXPANDED_TYPES)
-
-		// cf_str_PEAP_accepted_tunneled_client_types_hex_data is available only for expaned EAP types.
-		// cf_str_PEAP_accepted_tunneled_client_types_u32array should be used otherwise.
-		// So for cf_str_PEAP_accepted_tunneled_client_types_hex_data and eap_configure_type_hex_data
-		// we should return eap_status_illegal_configure_field.
-		// This is needed only if USE_EAP_EXPANDED_TYPES is not defined. Otherwise the field 
-		// cf_str_PEAP_accepted_tunneled_client_types_hex_data can be read from the database using
-		// type_configure_readL (let it fall through).
-
-		eap_variable_data_c tunneled_type_field(m_am_tools);
-
-		status = tunneled_type_field.set_buffer(
-			cf_str_PEAP_accepted_tunneled_client_types_hex_data.get_field()->get_field(),
-			cf_str_PEAP_accepted_tunneled_client_types_hex_data.get_field()->get_field_length(),
-			false,
-			false);
-		if (status != eap_status_ok)
-		{
-			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-			return EAP_STATUS_RETURN(m_am_tools, status);
-		}
-
-		if (!wanted_field.compare(&tunneled_type_field))
-		{
-			// Check if the type is eap_configure_type_hex_data.
-			
-			if( eap_configure_type_hex_data ==  field->get_type() )
-			{
-				// This field is used only for exapanded EAP types.
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_configure_type);
-			}
-		}
-		
-#else // For expanded EAP type.
 
 		// cf_str_PEAP_accepted_tunneled_client_types_u32array is available only for normal EAP types.
 		// So for cf_str_PEAP_accepted_tunneled_client_types_u32array and eap_configure_type_u32array
@@ -3379,34 +3497,28 @@
 				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_configure_type);
 			}
 		}
-		
-#endif // End of #if !defined(USE_EAP_EXPANDED_TYPES)
-		
 	} // End of if (m_current_eap_type == eap_type_peap
-	
+
 	TRAPD(err, type_configure_readL(
 		field->get_field(),
 		field->get_field_length(),
 		data));
 	if (err != KErrNone) 
 	{	
-		status = m_am_tools->convert_am_error_to_eapol_error(err);
+		status = m_partner->read_configure(field, data);
 	}
 
 	m_am_tools->trace_configuration(
 		status,
 		field,
 		data);
-        
-	EAP_TRACE_DEBUG(m_am_tools, 
-		TRACE_FLAGS_DEFAULT, 
-		(EAPL("eap_am_type_tls_peap_symbian_c::type_configure_read - End\n")));
 
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
 //--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::type_configure_readL(
 	eap_config_string field,
 	const u32_t field_length,
@@ -3437,7 +3549,7 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 	
-	_LIT(KSQLQueryRow, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");	
+	_LIT(KSQLQueryRow, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");	
 	
 #if defined(USE_FAST_EAP_TYPE)
 	
@@ -3447,44 +3559,62 @@
 	if(m_current_eap_type == eap_type_fast
 	   && ((unicodeString.Compare(cf_str_EAP_FAST_allow_server_authenticated_provisioning_mode_literal) == 0)
 	   || (unicodeString.Compare(cf_str_EAP_FAST_allow_server_unauthenticated_provisioning_mode_ADHP_literal) == 0)
-	   || (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_no_PAC_literal) == 0)
-	   || (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_no_matching_PAC_literal) == 0)
-	   || (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_not_default_server_literal) == 0)
+	   || (unicodeString.Compare(KFASTWarnADHPNoPAC) == 0)
+	   || (unicodeString.Compare(KFASTWarnADHPNoMatchingPAC) == 0)
+	   || (unicodeString.Compare(KFASTWarnNotDefaultServer) == 0)
 	   || (unicodeString.Compare(KFASTPACGroupImportReferenceCollection) == 0)
 	   || (unicodeString.Compare(KFASTPACGroupDBReferenceCollection) == 0)))
-	    {
-	    if (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_no_matching_PAC_literal) == 0)
-	        {
-	        unicodeString.Copy(KFASTWarnADHPNoMatchingPAC);
-	        }
-        if (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_no_PAC_literal) == 0)
-            {
-            unicodeString.Copy(KFASTWarnADHPNoPAC);
-            }
-        if (unicodeString.Compare(cf_str_EAP_FAST_warn_ADHP_not_default_server_literal) == 0)
-            {
-            unicodeString.Copy(KFASTWarnNotDefaultServer);
-            }
+	{
 		EAP_TRACE_DEBUG(m_am_tools, 
 			TRACE_FLAGS_DEFAULT, 
 			(EAPL("eap_am_type_tls_peap_symbian_c::type_configure_readL This field will be read from EAP-FAST's special table\n")));
 		
-		sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_fast_special_table_name, 
-			&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);		
-	    }
+		sqlStatement.Format(
+			KSQLQueryRow,
+			&unicodeString,
+			&m_db_fast_special_table_name, 
+			&KServiceType,
+			m_index_type,
+			&KServiceIndex,
+			m_index,
+			&KTunnelingTypeVendorId,
+			m_tunneling_type.get_vendor_id(),
+			&KTunnelingType, 
+			m_tunneling_type.get_vendor_type());
+	}
 	else
-	    {
-		sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_table_name, 
-			&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);		
-	    }
+	{
+		sqlStatement.Format(
+			KSQLQueryRow,
+			&unicodeString,
+			&m_db_table_name, 
+			&KServiceType,
+			m_index_type,
+			&KServiceIndex,
+			m_index,
+			&KTunnelingTypeVendorId,
+			m_tunneling_type.get_vendor_id(),
+			&KTunnelingType, 
+			m_tunneling_type.get_vendor_type());
+	}
 	
 #else
 
-	sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_table_name, 
-		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	sqlStatement.Format(
+		KSQLQueryRow,
+		&unicodeString,
+		&m_db_table_name, 
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 		
 #endif // End: #if defined(USE_FAST_EAP_TYPE)
-	
+
 	RDbView view;
 	User::LeaveIfError(view.Prepare(m_database, TDbQuery(sqlStatement), TDbWindow::EUnlimited));
 	CleanupClosePushL(view);
@@ -3560,10 +3690,10 @@
 
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
+
 //--------------------------------------------------
 
 //
-
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::type_configure_write(
 	const eap_configuration_field_c * const field,
 	eap_variable_data_c * const data)
@@ -3600,9 +3730,21 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 	
-	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	sqlStatement.Format(KSQLInsert, field_name.PtrZ(), &m_db_table_name, 
-		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+
+	sqlStatement.Format(
+		KSQLInsert,
+		field_name.PtrZ(),
+		&m_db_table_name, 
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
+
 	// Evaluate view
 	RDbView view;
 	User::LeaveIfError(view.Prepare(m_database,TDbQuery(sqlStatement), TDbWindow::EUnlimited));
@@ -3630,6 +3772,8 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::WriteIntParamL(
 	eap_config_string field,
 	const u32_t field_length,
@@ -3648,9 +3792,20 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 
-	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	sqlStatement.Format(KSQLInsert, field_name.PtrZ(), &m_db_table_name, 
-		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+
+	sqlStatement.Format(
+		KSQLInsert,
+		field_name.PtrZ(),
+		&m_db_table_name, 
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 	
 	// Evaluate view
 	RDbView view;
@@ -3678,6 +3833,8 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::WriteIntParamL(
 	eap_config_string field,
 	const u32_t field_length,
@@ -3696,9 +3853,20 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 
-	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	sqlStatement.Format(KSQLInsert, field_name.PtrZ(), &m_db_table_name, 
-		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQLInsert, "SELECT %s FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+
+	sqlStatement.Format(
+		KSQLInsert,
+		field_name.PtrZ(),
+		&m_db_table_name, 
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 	
 	// Evaluate view
 	RDbView view;
@@ -3788,6 +3956,62 @@
 
 //--------------------------------------------------
 
+eap_status_e eap_am_type_tls_peap_symbian_c::select_cipher_suite(
+	const bool select_all_cipher_suites,
+	const tls_cipher_suites_e test_cipher_suite,
+	const TAlgorithmId testcertAlgorithm,
+	const TAlgorithmId certAlgorithm,
+	eap_array_c<u16_t> * cipher_suites)
+{
+	EAP_TRACE_DEBUG(
+		m_am_tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("eap_am_type_tls_peap_symbian_c::select_cipher_suite(), select_all_cipher_suites=%d, test_cipher_suite=%d, testcertAlgorithm=%d, certAlgorithm=%d\n"),
+		select_all_cipher_suites,
+		test_cipher_suite,
+		testcertAlgorithm,
+		certAlgorithm));
+
+	eap_status_e status(eap_status_ok);
+
+	// Cipher suite must be allowed AND the algorithm must match the certificates algorithm.
+	// Also select_all_cipher_suites can be used to add all cipher suites to the list.
+
+	TInt found = m_allowed_cipher_suites.Find(test_cipher_suite);
+
+	EAP_TRACE_DEBUG(
+		m_am_tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("eap_am_type_tls_peap_symbian_c::select_cipher_suite(), found=%d, cipher suite=%d, KErrNotFound=%d\n"),
+		found,
+		test_cipher_suite,
+		KErrNotFound));
+
+	if (found != KErrNotFound
+		&& (select_all_cipher_suites == true
+			|| testcertAlgorithm == certAlgorithm))
+	{
+		u16_t *tmp_object = new u16_t;
+		if (tmp_object == 0)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
+		}
+		*tmp_object = eap_htons(test_cipher_suite);
+		
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::select_cipher_suite(), adds cipher suite=%d\n"),
+			test_cipher_suite));
+
+		status = cipher_suites->add_object(tmp_object, true);
+	}
+
+	return EAP_STATUS_RETURN(m_am_tools, status);
+}
+
+//--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::query_cipher_suites_and_previous_session()
 {
@@ -3800,18 +4024,18 @@
 	EAP_ASSERT_ALWAYS(m_is_client == true);
 
 	eap_status_e status(eap_status_process_general_error);
-	
+
 	TAlgorithmId certAlgorithm(ERSA);
 
 	bool select_all_cipher_suites = false;
-	
+
 	eap_variable_data_c session_id(m_am_tools);
 	eap_variable_data_c master_secret(m_am_tools);
 	tls_cipher_suites_e used_cipher_suite(tls_cipher_suites_TLS_NULL_WITH_NULL_NULL);
 	tls_session_type_e tls_session_type(tls_session_type_full_authentication);	
 
 	eap_array_c<u16_t> cipher_suites(m_am_tools);
-		
+
 #if defined(USE_FAST_EAP_TYPE)
 		
 	if(m_current_eap_type == eap_type_fast &&
@@ -3857,7 +4081,8 @@
 			EAP_TRACE_DEBUG(
 				m_am_tools, 
 				TRACE_FLAGS_DEFAULT, 
-				(EAPL("query_cipher_suites_and_previous_session(): No user or CA certificate. Read CA certificate.\n")));
+				(EAPL("query_cipher_suites_and_previous_session(): No user or CA certificate. Read CA certificate. m_allowed_ca_certs.Count()=%d\n"),
+				m_allowed_ca_certs.Count()));
 			
 			if (m_allowed_ca_certs.Count() != 0)
 			{		
@@ -3876,7 +4101,7 @@
 				{
 					m_state = EHandlingCipherSuiteQuery;
 					
-					TRAPD(err, m_cert_if->ReadCACertificateL(m_allowed_ca_certs[0]));
+					TRAPD(err, m_cert_if->ReadCACertificateL(*m_allowed_ca_certs[0]));
 					if (err != KErrNone)
 					{
 						// Error occurred. Just select all cipher suites.
@@ -3889,6 +4114,16 @@
 					}
 				}
 			} // End: if (m_allowed_ca_certs.Count() != 0)
+			else
+			{
+				EAP_TRACE_DEBUG(
+					m_am_tools, 
+					TRACE_FLAGS_DEFAULT, 
+					(EAPL("query_cipher_suites_and_previous_session(): No allowed CA certificates. Sends all cipher suites and hopes best.\n"),
+					m_allowed_ca_certs.Count()));
+
+				select_all_cipher_suites = true;
+			}
 		}
 		else if (m_own_certificate != 0)
 		{
@@ -3916,176 +4151,105 @@
 
 			certAlgorithm = public_key.AlgorithmId();				
 		}
-		
-			// IF cipher suite is allowed
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_RSA_WITH_3DES_EDE_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_RSA_WITH_3DES_EDE_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_RSA_WITH_AES_128_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_RSA_WITH_AES_128_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == EDSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_DHE_DSS_WITH_AES_128_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == EDSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_DHE_DSS_WITH_AES_128_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_DHE_RSA_WITH_AES_128_CBC_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_DHE_RSA_WITH_AES_128_CBC_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_RSA_WITH_RC4_128_MD5) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_RSA_WITH_RC4_128_MD5);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-		if (m_allowed_cipher_suites.Find(tls_cipher_suites_TLS_RSA_WITH_RC4_128_SHA) != KErrNotFound
-			// AND the algorithm matches the certificates algorithm
-			&& (select_all_cipher_suites == true
-				|| certAlgorithm == ERSA))
-			// THEN add it to list.)
-		{
-			u16_t *tmp_object = new u16_t;
-			if (tmp_object == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-			*tmp_object = eap_htons(tls_cipher_suites_TLS_RSA_WITH_RC4_128_SHA);
-			
-			status = cipher_suites.add_object(tmp_object, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
+
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_RSA_WITH_3DES_EDE_CBC_SHA,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_RSA_WITH_AES_128_CBC_SHA,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
+			certAlgorithm,
+			EDSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
+			certAlgorithm,
+			EDSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_RSA_WITH_RC4_128_MD5,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+		status = select_cipher_suite(
+			select_all_cipher_suites,
+			tls_cipher_suites_TLS_RSA_WITH_RC4_128_SHA,
+			certAlgorithm,
+			ERSA,
+			&cipher_suites);
+		if (status != eap_status_ok)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
+
+
 		
 		if (is_session_valid())
 		{
@@ -4183,6 +4347,7 @@
 
 	// Compression methods. TLS supports only null compression at the moment.
 	eap_array_c<u8_t> compression_methods(m_am_tools);
+
 	{
 		u8_t *tmp_object = new u8_t;
 		if (tmp_object == 0)
@@ -4191,6 +4356,7 @@
 			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
 		}
 		*tmp_object = tls_compression_method_null;
+
 		status = compression_methods.add_object(tmp_object, true);
 		if (status != eap_status_ok)
 		{
@@ -4199,6 +4365,7 @@
 		}
 	}
 
+
 	status = get_tls_am_partner()->complete_query_cipher_suites_and_previous_session(
 		tls_session_type,
 		&cipher_suites,
@@ -4444,9 +4611,11 @@
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
 	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("\n")));
-	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("TLS: %s: message_function: verify_certificate_chain_and_query_public_key()\n"),
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("TLS: %s: message_function: verify_certificate_chain()\n"),
 		(m_is_client == true ? "client": "server")));
 
+	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eap_am_type_tls_peap_symbian_c::verify_certificate_chain()");
+
 	EAP_ASSERT_ALWAYS(certificate_chain->get_object_count() > 0);
 
 	eap_status_e status(eap_status_ok);
@@ -4468,15 +4637,20 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(
 	EAP_TEMPLATE_CONST eap_array_c<eap_variable_data_c> * const certificate_chain,
 	const tls_cipher_suites_e required_cipher_suite)
 {
-	EAP_TRACE_DEBUG(m_am_tools, 
-	TRACE_FLAGS_DEFAULT, 
-	(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL: Number of certificates in chain=%d\n"),
+	EAP_TRACE_DEBUG(
+		m_am_tools, 
+		TRACE_FLAGS_DEFAULT, 
+		(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): Number of certificates in chain=%d\n"),
 		certificate_chain->get_object_count()));
 
+	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eap_am_type_tls_peap_symbian_c::verify_certificate_chainL()");
+
 	eap_status_e status(eap_status_process_general_error);
 	if (m_is_client)
 	{
@@ -4492,6 +4666,11 @@
 			|| (m_use_manual_realm == true
 				&& m_manual_realm.get_is_valid_data() == true)))
 	{
+		EAP_TRACE_DEBUG(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT, 
+			(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): Does server certificate realm verification\n")));
+
 		eap_variable_data_c client_subject_realm(m_am_tools);
 		eap_variable_data_c manual_client_subject_realm(m_am_tools);
 		eap_variable_data_c client_issuer_realm(m_am_tools);
@@ -4705,10 +4884,29 @@
 				}
 			}
 		}
+
 		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Server certificate realm verification OK.\n")));
 	}
-
-	HBufC8* chain = HBufC8::NewL(0);
+	else
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools, 
+			TRACE_FLAGS_DEFAULT, 
+			(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): No server certificate realm verification\n")));
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	HBufC8* chain = HBufC8::NewL(1);
+
+	EAP_TRACE_DEBUG(
+		m_am_tools, 
+		TRACE_FLAGS_DEFAULT, 
+		(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): Calls CleanupStack::PushL(chain)\n")));
+
+	CleanupStack::PushL(chain);
+	chain->Des().SetLength(0);
+
 	HBufC8* temp;
 	eap_variable_data_c* cert;
 	
@@ -4728,50 +4926,61 @@
 	
 #if defined(_DEBUG) || defined(DEBUG)
 
-		TPtr8 certPtr(
-			cert->get_data(cert->get_data_length()), 
-			cert->get_data_length(),
-			cert->get_data_length());
-		CX509Certificate* x509Cert = CX509Certificate::NewL(certPtr);
-
-		if( x509Cert != NULL )
-		{				
-			CleanupStack::PushL(x509Cert);
-
-			TKeyIdentifier KeyIdentifier = x509Cert->KeyIdentifierL();
-			
-			EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Key identifier is"),
-				KeyIdentifier.Ptr(),
-				KeyIdentifier.Size()));
-								
-			// This is for subject key id.
-			const CX509CertExtension* certExt = x509Cert->Extension(KSubjectKeyId);
-			
-			if (certExt)
-			{
-				const CX509SubjectKeyIdExt* subKeyExt = CX509SubjectKeyIdExt::NewLC(certExt->Data());
-				EAP_UNREFERENCED_PARAMETER(subKeyExt);
-
-				EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("The Subject key Id is:"),
-					subKeyExt->KeyId().Ptr(),
-					subKeyExt->KeyId().Size()));					
+		{
+			TPtr8 certPtr(
+				cert->get_data(cert->get_data_length()), 
+				cert->get_data_length(),
+				cert->get_data_length());
+
+			CX509Certificate* x509Cert = CX509Certificate::NewL(certPtr);
+
+			if( x509Cert != NULL )
+			{				
+				CleanupStack::PushL(x509Cert);
+
+				TKeyIdentifier KeyIdentifier = x509Cert->KeyIdentifierL();
+				
+				EAP_TRACE_DATA_DEBUG(
+					m_am_tools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("Key identifier is"),
+					KeyIdentifier.Ptr(),
+					KeyIdentifier.Size()));
+									
+				// This is for subject key id.
+				const CX509CertExtension* certExt = x509Cert->Extension(KSubjectKeyId);
 				
-				CleanupStack::PopAndDestroy(); // subKeyExt					
-			}
-			else
-			{
-				EAP_TRACE_ERROR(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: verify_certificate_chainL - No extension for this certificate\n")));			
-			}
-			
-			CleanupStack::PopAndDestroy(x509Cert);
-		}
-
+				if (certExt)
+				{
+					const CX509SubjectKeyIdExt* subKeyExt = CX509SubjectKeyIdExt::NewLC(certExt->Data());
+					EAP_UNREFERENCED_PARAMETER(subKeyExt);
+
+					EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("The Subject key Id is:"),
+						subKeyExt->KeyId().Ptr(),
+						subKeyExt->KeyId().Size()));					
+					
+					CleanupStack::PopAndDestroy();
+				}
+				else
+				{
+					EAP_TRACE_ERROR(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: verify_certificate_chainL - No extension for this certificate\n")));			
+				}
+				
+				CleanupStack::PopAndDestroy();
+			}
+		}
 #endif
 
+		temp = chain->ReAllocL(chain->Length() + cert->get_data_length());
+
+		CleanupStack::Pop(chain);
+
+		chain = temp;
+
 		CleanupStack::PushL(chain);
-		temp = chain->ReAllocL(chain->Length() + cert->get_data_length());
-		chain = temp;
+
 		TPtr8 ptr = chain->Des();
+
 		ptr.Append(cert->get_data(cert->get_data_length()), cert->get_data_length());
 		if (i == 0)
 		{
@@ -4782,42 +4991,120 @@
 			}
 			m_peer_certificate = CX509Certificate::NewL(ptr);
 		}
-		CleanupStack::Pop();
-	}
-	CleanupStack::PushL(chain);
+
+	} // for()
+
+
+	EAP_TRACE_DEBUG(
+		m_am_tools, 
+		TRACE_FLAGS_DEFAULT, 
+		(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): calls chain->Des()\n")));
+
 	TPtr8 certChain = chain->Des();
-	m_cert_if->ValidateChainL(certChain, m_allowed_ca_certs);
-	
-	CleanupStack::PopAndDestroy();
+	TBool aUseAutomaticCaCertificate = (m_use_automatic_ca_certificate == true) ? ETrue : EFalse;
+
+	EAP_TRACE_DEBUG(
+		m_am_tools, 
+		TRACE_FLAGS_DEFAULT, 
+		(EAPL("eap_am_type_tls_peap_symbian_c::verify_certificate_chainL(): calls m_cert_if->ValidateChainL()\n")));
+
+	m_cert_if->ValidateChainL(certChain, m_allowed_ca_certs, aUseAutomaticCaCertificate);
+	
+	CleanupStack::PopAndDestroy(chain);
+
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+
 	// This returns eap_status_pending_request
 	User::Leave(KErrCompletion);
 
 }
 
+//--------------------------------------------------
+
+#if defined(USE_EAP_DEBUG_TRACE)
+
+static eap_const_string get_certificate_error_string(const enum TValidationError certificate_error)
+{
+#if defined(USE_EAP_TRACE_STRINGS)
+	EAP_IF_RETURN_STRING(certificate_error, EValidatedOK)
+	else EAP_IF_RETURN_STRING(certificate_error, EChainHasNoRoot)
+	else EAP_IF_RETURN_STRING(certificate_error, ESignatureInvalid)
+	else EAP_IF_RETURN_STRING(certificate_error, EDateOutOfRange)
+	else EAP_IF_RETURN_STRING(certificate_error, ENameIsExcluded)
+	else EAP_IF_RETURN_STRING(certificate_error, ENameNotPermitted)
+	else EAP_IF_RETURN_STRING(certificate_error, ENotCACert)
+	else EAP_IF_RETURN_STRING(certificate_error, ECertificateRevoked)
+	else EAP_IF_RETURN_STRING(certificate_error, EUnrecognizedCriticalExtension)
+	else EAP_IF_RETURN_STRING(certificate_error, ENoBasicConstraintInCACert)
+	else EAP_IF_RETURN_STRING(certificate_error, ENoAcceptablePolicy)
+	else EAP_IF_RETURN_STRING(certificate_error, EPathTooLong)
+	else EAP_IF_RETURN_STRING(certificate_error, ENegativePathLengthSpecified)
+	else EAP_IF_RETURN_STRING(certificate_error, ENamesDontChain)
+	else EAP_IF_RETURN_STRING(certificate_error, ERequiredPolicyNotFound)
+	else EAP_IF_RETURN_STRING(certificate_error, EBadKeyUsage)
+	else EAP_IF_RETURN_STRING(certificate_error, ERootCertNotSelfSigned)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalExtendedKeyUsage)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalCertPoliciesWithQualifiers)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalPolicyMapping)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalDeviceId)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalSid)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalVid)
+	else EAP_IF_RETURN_STRING(certificate_error, ECriticalCapabilities)
+#endif // #if defined(USE_EAP_TRACE_STRINGS)
+	{
+		EAP_UNREFERENCED_PARAMETER(certificate_error);
+		return EAPL("Unknown TValidationError");
+	}
+}
+
+#endif //#if defined(USE_EAP_DEBUG_TRACE)
+
+//--------------------------------------------------
 
 void eap_am_type_tls_peap_symbian_c::complete_validate_chain(
-	CPKIXValidationResult& aValidationResult, eap_status_e aStatus)
+	const CPKIXValidationResult * const aValidationResult,
+	const eap_status_e aStatus)
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
-	
+
+	TValidationError validationError(EBadKeyUsage);
+
+	if (aValidationResult != 0)
+	{
+		validationError = aValidationResult->Error().iReason;
+	}
+
+	EAP_TRACE_DEBUG(
+		m_am_tools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("eap_am_type_tls_peap_symbian_c::complete_validate_chain(): Certificate chain validation reason=%d=%s, status=%d=%s\n"),
+		validationError,
+		get_certificate_error_string(validationError),
+		aStatus,
+		eap_status_string_c::get_status_string(aStatus)));
+
 	if(aStatus != eap_status_ok)
 	{
 		get_tls_am_partner()->complete_verify_certificate_chain(aStatus);
 		return;
 	}
-	
-	eap_status_e result;	
-	if (aValidationResult.Error().iReason == EValidatedOK) 
-	{
-		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, 
-			(EAPL("Certificate chain validation OK. Reason: %d\n"), 
-			aValidationResult.Error().iReason));
+
+	eap_status_e result(eap_status_ok);
+
+	if (validationError == EValidatedOK)
+	{
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("Certificate chain validation OK. Reason: %d=%s\n"),
+			validationError,
+			get_certificate_error_string(validationError)));
+
 		result = eap_status_ok;
 	}
 	else
 	{
-		if (aValidationResult.Error().iReason == EDateOutOfRange)
+		if (validationError == EDateOutOfRange)
 		{
 			send_error_notification(eap_status_certificate_expired);
 			// Ignore error on purpose
@@ -4828,9 +5115,12 @@
 			// Ignore error on purpose			
 		}
 
-		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, 
-			(EAPL("ERROR: Certificate chain validation FAILED. Reason: %d\n"), 
-			aValidationResult.Error().iReason));
+		EAP_TRACE_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT, 
+			(EAPL("ERROR: Certificate chain validation FAILED. Reason: %d=%s\n"), 
+			validationError,
+			get_certificate_error_string(validationError)));
 			
 		result = eap_status_illegal_certificate;
 	}
@@ -4851,203 +5141,63 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 
+//--------------------------------------------------
+
 #if defined(USE_FAST_EAP_TYPE)
 #if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
+
 eap_status_e eap_am_type_tls_peap_symbian_c::ReadFileConfig()
-    {
-        eap_status_e status = eap_status_ok;
-        
-        eap_am_file_input_symbian_c * const fileio = new eap_am_file_input_symbian_c(m_am_tools);
-
-        eap_automatic_variable_c<eap_am_file_input_symbian_c> automatic_fileio(m_am_tools, fileio);
-
-        if (fileio != 0
-            && fileio->get_is_valid() == true)
-        {
-            EAP_TRACE_DEBUG(
-                m_am_tools,
-                TRACE_FLAGS_DEFAULT,
-                (EAPL("Initialize file configuration.\n")));
-
-            eap_variable_data_c file_name_c_data(m_am_tools);
-
-             {
-                #if defined(EAPOL_SYMBIAN_VERSION_7_0_s)
-                    eap_const_string const FILECONFIG_FILENAME_C
-                        = "c:\\system\\data\\eap.conf";
-                #else
-                    eap_const_string const FILECONFIG_FILENAME_C
-                        = "c:\\private\\101F8EC5\\eap.conf";
-                #endif
-
-                status = file_name_c_data.set_copy_of_buffer(
-                    FILECONFIG_FILENAME_C,
-                    m_am_tools->strlen(FILECONFIG_FILENAME_C));
-                if (status != eap_status_ok)
-                {
-                    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-                    return EAP_STATUS_RETURN(m_am_tools, status);
-                }
-
-                status = file_name_c_data.add_end_null();
-                if (status != eap_status_ok)
-                {
-                    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-                    return EAP_STATUS_RETURN(m_am_tools, status);
-                }
-            }
-
-            eap_variable_data_c file_name_z_data(m_am_tools);
-
-            {
-                #if defined(EAPOL_SYMBIAN_VERSION_7_0_s)
-                    eap_const_string const FILECONFIG_FILENAME_Z
-                        = "z:\\system\\data\\eap.conf";
-                #else
-                    eap_const_string const FILECONFIG_FILENAME_Z
-                        = "z:\\private\\101F8EC5\\eap.conf";
-                #endif
-
-                status = file_name_z_data.set_copy_of_buffer(
-                    FILECONFIG_FILENAME_Z,
-                    m_am_tools->strlen(FILECONFIG_FILENAME_Z));
-                if (status != eap_status_ok)
-                {
-                    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-                    return EAP_STATUS_RETURN(m_am_tools, status);
-                }
-
-                status = file_name_z_data.add_end_null();
-                if (status != eap_status_ok)
-                {
-                    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-                    return EAP_STATUS_RETURN(m_am_tools, status);
-                }
-            }
-
-
-
-            if (status == eap_status_ok)
-            {
-                // First try open from C: disk.
-                status = fileio->file_open(
-                    &file_name_c_data,
-                    eap_file_io_direction_read);
-                if (status == eap_status_ok)
-                {
-                    EAP_TRACE_DEBUG(
-                        m_am_tools,
-                        TRACE_FLAGS_DEFAULT,
-                        (EAPL("Opens configure file %s\n"),
-                        file_name_c_data.get_data(file_name_c_data.get_data_length())));
-                }
-                else if (status != eap_status_ok)
-                {
-                    // Second try open from Z: disk.
-                    status = fileio->file_open(
-                        &file_name_z_data,
-                        eap_file_io_direction_read);
-                    if (status == eap_status_ok)
-                    {
-                        EAP_TRACE_DEBUG(
-                            m_am_tools,
-                            TRACE_FLAGS_DEFAULT,
-                            (EAPL("Opens configure file %s\n"),
-                             file_name_z_data.get_data(file_name_z_data.get_data_length())));
-                    }
-                }
-
-                if (status == eap_status_ok)
-                {
-                    // Some of the files were opened.
-
-                    m_fileconfig = new eap_file_config_c(m_am_tools);
-                    if (m_fileconfig != 0
-                        && m_fileconfig->get_is_valid() == true)
-                    {
-                        status = m_fileconfig->configure(fileio);
-                        if (status != eap_status_ok)
-                        {
-                            EAP_TRACE_DEBUG(
-                                m_am_tools,
-                                TRACE_FLAGS_DEFAULT,
-                                (EAPL("ERROR: Configure read from %s failed.\n"),
-                                file_name_c_data.get_data(file_name_c_data.get_data_length())));
-                        }
-                        else
-                        {
-                            EAP_TRACE_DEBUG(
-                                m_am_tools,
-                                TRACE_FLAGS_DEFAULT,
-                                (EAPL("Configure read from %s\n"),
-                                file_name_c_data.get_data(file_name_c_data.get_data_length())));
-                        }
-                    }
-                    else
-                    {
-                        // No file configuration.
-                        delete m_fileconfig;
-                        m_fileconfig = 0;
-
-                        EAP_TRACE_DEBUG(
-                            m_am_tools,
-                            TRACE_FLAGS_DEFAULT,
-                            (EAPL("ERROR: Cannot create configure object for file %s\n"),
-                            file_name_c_data.get_data(file_name_c_data.get_data_length())));
-                    }
-                }
-                else
-                {
-                    EAP_TRACE_DEBUG(
-                        m_am_tools,
-                        TRACE_FLAGS_DEFAULT,
-                        (EAPL("ERROR: Cannot open configure file neither %s nor %s\n"),
-                        file_name_c_data.get_data(file_name_c_data.get_data_length()),
-                        file_name_z_data.get_data(file_name_z_data.get_data_length())));
-                }
-            }
-        }
-        else
-        {
-            EAP_TRACE_DEBUG(
-                m_am_tools,
-                TRACE_FLAGS_DEFAULT,
-                (EAPL("Skips file configuration.\n")));
-        }
-
-    eap_variable_data_c skip_user_interactions(m_am_tools);
-
-    if (m_fileconfig != 0
-            && m_fileconfig->get_is_valid() == true)
-        {
-            // Here we could try the final configuration option.
-            status = m_fileconfig->read_configure(
-                    cf_str_EAP_skip_user_interactions_for_testing_purposes.get_field(),
-                    &skip_user_interactions);
-        }
-
-    if (status == eap_status_ok
-        && skip_user_interactions.get_is_valid_data() == true)
-    {
-        u32_t *skip_user_interactions_flag = reinterpret_cast<u32_t *>(
-            skip_user_interactions.get_data(sizeof(u32_t)));
-        if (skip_user_interactions_flag != 0)
-        {
-            if (*skip_user_interactions_flag != 0)
-            {
-                m_skip_user_interactions = true;
-            }
-            else
-            {
-                m_skip_user_interactions = false;
-            }
-        }
-    }
-
-    iPacStoreDb->SkipUserActions (m_skip_user_interactions);        
-    
-     return status;
-    }
+{
+	eap_status_e status = eap_status_ok;
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+	status = EapConfigToolsSymbian::EapReadDefaultConfigFileSymbian(
+	m_am_tools,
+	&m_fileconfig);
+	if (status != eap_status_ok)
+	{
+		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+		return EAP_STATUS_RETURN(m_am_tools, status);
+	}
+
+	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+	eap_variable_data_c skip_user_interactions(m_am_tools);
+
+	if (m_fileconfig != 0
+	&& m_fileconfig->get_is_valid() == true)
+	{
+		// Here we could try the final configuration option.
+		status = m_fileconfig->read_configure(
+			cf_str_EAP_skip_user_interactions_for_testing_purposes.get_field(),
+			&skip_user_interactions);
+	}
+
+	if (status == eap_status_ok
+	&& skip_user_interactions.get_is_valid_data() == true)
+	{
+		u32_t *skip_user_interactions_flag = reinterpret_cast<u32_t *>(
+			skip_user_interactions.get_data(sizeof(u32_t)));
+		if (skip_user_interactions_flag != 0)
+		{
+			if (*skip_user_interactions_flag != 0)
+			{
+				m_skip_user_interactions = true;
+			}
+			else
+			{
+				m_skip_user_interactions = false;
+			}
+		}
+	}
+
+	iPacStoreDb->SkipUserActions(m_skip_user_interactions);        
+
+	return status;
+}
+
 #endif //#if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
 #endif
 
@@ -5072,7 +5222,8 @@
 
 	if (m_is_client)
 	{
-		// Get the matching certificates
+		// client
+		// Get the matching certificates. This function call is completed asyncronously by complete_get_matching_certificates() function call.
 		TRAPD(err, m_cert_if->GetMatchingCertificatesL(
 			m_allowed_user_certs, 
 			ETrue, 
@@ -5087,6 +5238,7 @@
 	else
 	{
 		// server
+		// Get the matching certificates. This function call is completed asyncronously by complete_get_matching_certificates() function call.
 		TRAPD(err, m_cert_if->GetMatchingCertificatesL(
 				m_allowed_user_certs, 
 				EFalse, 
@@ -5116,8 +5268,10 @@
 
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(
-	CArrayFixFlat<SCertEntry>& aMatchingCerts,
+	RPointerArray<EapCertificateEntry>& aMatchingCerts,
 	eap_status_e aStatus)
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -5138,17 +5292,39 @@
 
 		// Add found certs to allowed certificate list.
 		// This list is updated here because there might be certificates that have been removed.
-		m_allowed_user_certs.Reset();
-		for (TInt i = 0; i < aMatchingCerts.Count(); i++)
-		{
-			TRAPD(err, m_allowed_user_certs.AppendL(aMatchingCerts[i]));
-			if (err != KErrNone)
+		m_allowed_user_certs.ResetAndDestroy();
+
+		for (TInt i = 0; i < aMatchingCerts.Count() && aMatchingCerts[i] != 0; i++)
+		{
+			EapCertificateEntry * const entry = aMatchingCerts[i]->Copy();
+			if (entry == 0)
 			{
 				EAP_TRACE_DEBUG(
 					m_am_tools,
 					TRACE_FLAGS_DEFAULT,
-					(EAPL("ERROR: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates -EHandlingIdentityQuery- Error=%d\n"),
-					err));
+					(EAPL("ERROR: EAP-TLS: No memory.\n")));
+
+				get_am_partner()->complete_eap_identity_query(
+					0, // 0 because identity query failed
+					&m_receive_network_id,
+					m_eap_identifier,
+					eap_status_allocation_error, 
+					false, 
+					0, 
+					false, 
+					0);
+				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+				return;	
+			}
+
+			TInt error = m_allowed_user_certs.Append(entry);
+			if (error != KErrNone)
+			{
+				EAP_TRACE_DEBUG(
+					m_am_tools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(): -EHandlingIdentityQuery- Error=%d\n"),
+					error));
 			
 				get_am_partner()->complete_eap_identity_query(
 					0, // 0 because identity query failed
@@ -5159,6 +5335,8 @@
 					0, 
 					false, 
 					0);
+
+				delete entry;
 				
 				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
 				return;		
@@ -5200,35 +5378,60 @@
 				EAP_TRACE_DEBUG(
 					m_am_tools, 
 					TRACE_FLAGS_DEFAULT, 
-					(EAPL("eap_am_type_tls_peap_symbian_c: no manual realm - no user cert. Get realm from CA certificate.\n")));
+					(EAPL("eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(): no manual realm - no user cert. Get realm from CA certificate.\n")));
 				
 				TInt allowed_ca_cert_count = m_allowed_ca_certs.Count();
 				TInt err(KErrNone);
-				
+
 				if(allowed_ca_cert_count > 0)
 				{
-					TRAP(err, m_cert_if->ReadCACertificateL(m_allowed_ca_certs[0]));
+					TRAP(err, m_cert_if->ReadCACertificateL(*m_allowed_ca_certs[0]));
 				}
-				if (err != KErrNone || allowed_ca_cert_count <= 0)
+
+				if (err != KErrNone
+					|| allowed_ca_cert_count <= 0)
 				{
-					EAP_TRACE_DEBUG(
-					m_am_tools,
-					TRACE_FLAGS_DEFAULT,
-					(EAPL("ERROR: EAP-TLS: Cannot read user certificate or No CA cert configured, CA cert count=%d.\n"),
-					allowed_ca_cert_count));
-
-					get_am_partner()->complete_eap_identity_query(
-						0, // 0 because identity query failed
-						&m_receive_network_id,
-						m_eap_identifier,
-						eap_status_illegal_certificate, 
-						false, 
-						0, 
-						false, 
-						0);
-					EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-					return;	
+					if (m_use_automatic_ca_certificate == false)
+					{
+						EAP_TRACE_DEBUG(
+							m_am_tools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("ERROR: EAP-TLS: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(): Cannot read user certificate and no CA cert configured, CA cert count=%d.\n"),
+							allowed_ca_cert_count));
+
+						get_am_partner()->complete_eap_identity_query(
+							0, // 0 because identity query failed
+							&m_receive_network_id,
+							m_eap_identifier,
+							eap_status_illegal_certificate, 
+							false, 
+							0, 
+							false, 
+							0);
+
+						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+						return;
+					}
+					else
+					{
+						EAP_TRACE_DEBUG(
+							m_am_tools,
+							TRACE_FLAGS_DEFAULT,
+							(EAPL("WARNING: EAP-TLS: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(): Cannot read user certificate and automatic CA cert configured, CA cert count=%d.\n"),
+							m_allowed_ca_certs.Count()));
+
+						get_am_partner()->complete_eap_identity_query(
+							0, // 0 because certificate query failed
+							&m_receive_network_id,
+							m_eap_identifier,
+							eap_status_ok, 
+							false, 
+							0, 
+							false, 
+							0);
+					}
 				}
+
 				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 				return;
 			}
@@ -5240,14 +5443,14 @@
 					(EAPL("EAP-TLS: Uses manual realm.\n")));
 
 				get_am_partner()->complete_eap_identity_query(
-						0, // 0 because certificate query failed
-						&m_receive_network_id,
-						m_eap_identifier,
-						eap_status_ok, 
-						m_use_manual_username, 
-						&m_manual_username, 
-						m_use_manual_realm, 
-						&m_manual_realm);
+					0, // 0 because certificate query failed
+					&m_receive_network_id,
+					m_eap_identifier,
+					eap_status_ok, 
+					m_use_manual_username, 
+					&m_manual_username, 
+					m_use_manual_realm, 
+					&m_manual_realm);
 
 			}
 			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
@@ -5265,20 +5468,31 @@
 		
 		if (aMatchingCerts.Count() > 0)
 		{
-				m_allowed_user_certs.Reset();
-			
-				for (TInt i = 0; i < aMatchingCerts.Count(); i++)
+			TInt error;
+
+			m_allowed_user_certs.ResetAndDestroy();
+		
+			for (TInt i = 0; i < aMatchingCerts.Count(); i++)
+			{
+				EapCertificateEntry * const entry = aMatchingCerts[i]->Copy();
+				if (entry != 0)
+				{
+					TRAP(error, m_allowed_user_certs.AppendL(entry));
+				}
+				else
 				{
-					TRAPD(err, m_allowed_user_certs.AppendL(aMatchingCerts[i]));
-					if (err != KErrNone)
-					{
-						EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates -EHandlingChainQuery- Error=%d\n"),
-						err));
-									
-						get_tls_am_partner()->complete_query_certificate_chain(0, eap_status_allocation_error);
-						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);		
-						return;					
-					} 
+					error = KErrNoMemory;
+				}
+
+				if (error != KErrNone)
+				{
+					EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates -EHandlingChainQuery- Error=%d\n"),
+						error));
+								
+					get_tls_am_partner()->complete_query_certificate_chain(0, eap_status_allocation_error);
+					EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);		
+					return;					
+				} 
 			}	
 		}
 
@@ -5287,10 +5501,18 @@
 			// No matching or allowed certs and no pre-loaded cert.
 			// Could not find matching certificate
 
-			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("EAP-TLS: Could not find proper user certificate.\n")));
+			EAP_TRACE_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("EAP-TLS: Could not find proper user certificate.\n")));
 
 			if (m_tls_peap_server_authenticates_client_policy_flag == true)
 			{
+				EAP_TRACE_DEBUG(
+					m_am_tools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("ERROR: EAP-TLS: Could not find proper user certificate and anonymous cliet is not allowed.\n")));
+
 				send_error_notification(eap_status_user_certificate_unknown);
 			}
 
@@ -5313,10 +5535,12 @@
 	{
 		EAP_TRACE_ERROR(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("EAP-TLS: Illegal state in complete_get_matching_certs.\n")));
 	}
+
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
 	return;
 }
 
+//--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::query_certificate_authorities_and_types()
 {
@@ -5331,7 +5555,7 @@
 	eap_array_c<eap_variable_data_c> certificate_authorities(m_am_tools);
 	eap_variable_data_c ca_dn(m_am_tools);
 	
-	// TEST CODE: This is not a proper CA DN.
+	// TEST CODE: Implementation do not support yet a proper CA DN.
 	_LIT8(KTestCA, "ca.eapsim.foo");
 	status = ca_dn.add_data(KTestCA().Ptr(), KTestCA().Size());
 	if (status != eap_status_ok)
@@ -5521,13 +5745,13 @@
 		subject_identity.get_data_length(),
 		subject_identity.get_data_length());		
 
-	status = subject_realm->set_copy_of_buffer((ptr.Mid(offset + 1)).Ptr(), ptr.Length() - offset - 1);
+	status = subject_realm->set_copy_of_buffer((ptr.Mid(offset + KOffsetCorrection)).Ptr(), ptr.Length() - offset - KOffsetCorrection);
 	if (status != eap_status_ok)
 	{
 		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 		return EAP_STATUS_RETURN(m_am_tools, status);
 	}	
-	
+
 	// ISSUER
 	// Check DN
 	TRAP(err, get_identities_from_distinguished_namesL(certificate, &subject_identity, &issuer_identity));	
@@ -5542,10 +5766,10 @@
 		issuer_identity.get_data(issuer_identity.get_data_length()), 
 		issuer_identity.get_data_length(),
 		issuer_identity.get_data_length());		
-		
+
 	offset = ptr2.Find(KAt);
 
-	status = issuer_realm->set_copy_of_buffer((ptr2.Mid(offset + 1)).Ptr(), ptr2.Length() - offset - 1);
+	status = issuer_realm->set_copy_of_buffer((ptr2.Mid(offset + KOffsetCorrection)).Ptr(), ptr2.Length() - offset - KOffsetCorrection);
 	if (status != eap_status_ok)
 	{
 		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -5558,7 +5782,6 @@
 
 //--------------------------------------------------
 
-
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::save_tls_session(
 	const eap_variable_data_c * const session_id,
 	const eap_variable_data_c * const master_secret,
@@ -5651,7 +5874,7 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
 }
-//--------------------------------------------------
+
 //--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::rsa_encrypt_with_public_key(
@@ -5731,7 +5954,7 @@
 	ptr.Copy(encrypted_premaster_secret->get_data(encrypted_premaster_secret->get_data_length()), 
 		encrypted_premaster_secret->get_data_length());
 
-	TRAP(err, m_cert_if->DecryptL(m_own_certificate_info.iSubjectKeyId, *data));
+	TRAP(err, m_cert_if->DecryptL(m_own_certificate_info.GetSubjectKeyId(), *data));
 
 	if (err != KErrNone)
 	{
@@ -5793,6 +6016,7 @@
 }
 
 //--------------------------------------------------
+
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::sign_with_private_key(
 	const eap_variable_data_c * const message_hash)
 {
@@ -5851,7 +6075,7 @@
 		signature_length = public_key_data.Size();
 	}
 
-	TRAP(err, m_cert_if->SignL(m_own_certificate_info.iSubjectKeyId, hash, signature_length));
+	TRAP(err, m_cert_if->SignL(m_own_certificate_info.GetSubjectKeyId(), hash, signature_length));
 	if (err != KErrNone)
 	{
 		status = m_am_tools->convert_am_error_to_eapol_error(err);
@@ -5867,7 +6091,9 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 		
 }
-//--------------------------------------------------
+
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::complete_sign(
 	const RInteger& aR, const RInteger& aS, eap_status_e aStatus)
 {
@@ -5888,6 +6114,8 @@
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::complete_signL(
 	const RInteger& aR, const RInteger& aS, eap_status_e aStatus)
 {
@@ -6049,7 +6277,7 @@
 	}
 	else
 	{
-		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: Signing with private key failed.\n")));
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: Verify with private key failed.\n")));
 		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 		return EAP_STATUS_RETURN(m_am_tools, eap_status_not_supported);
 	}
@@ -6066,6 +6294,8 @@
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::read_dsa_parametersL()
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); 
@@ -6123,6 +6353,7 @@
 //--------------------------------------------------
 // MODULE HANDLING FUNCTIONS
 //--------------------------------------------------
+
 eap_status_e eap_am_type_tls_peap_symbian_c::load_module(
 		const eap_type_value_e /*type*/,
 		const eap_type_value_e /* tunneling_type */,
@@ -6144,31 +6375,32 @@
 	
 	eap_status_e status(eap_status_illegal_eap_type);
 	
-#ifdef USE_EAP_EXPANDED_TYPES
-
 	EAP_TRACE_DEBUG(m_am_tools, 
 		TRACE_FLAGS_DEFAULT, 
-		(EAPL("eap_am_type_tls_peap_symbian_c::check_is_valid_eap_type:Given EAP vendor ID=%x, type=%x\n"),
-		eap_type.get_vendor_id(), eap_type.get_vendor_type()));	
+		(EAPL("eap_am_type_tls_peap_symbian_c::check_is_valid_eap_type:Given EAP-type=0xfe%06x%08x\n"),
+		eap_type.get_vendor_id(),
+		eap_type.get_vendor_type()));	
 		
 	for (TInt i = 0; i < m_enabled_tunneling_exp_eap_array.Count(); i++)
 	{
 		eap_expanded_type_c expEAPTmp;
 		
-		// This will read the expanded EAP from enabledEAPTypes[i]->iExpandedEAPType to expEAPTmp.
-		// This makes easy to get the vendor type.
-		eap_expanded_type_c::read_type( m_am_tools,
-										0,
-										m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType.Ptr(),
-										KExpandedEAPTypeSize,
-										&expEAPTmp);
-		
+		TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType(
+			m_enabled_tunneling_exp_eap_array[i],
+			&expEAPTmp);
+
+		if (error != KErrNone)
+		{
+			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+			return EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error));
+		}
+
 		EAP_TRACE_DATA_DEBUG(
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("check_is_valid_eap_type:Checking with EAP type:"),
-	 		m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType.Ptr(),
-	 		m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType.Size()));	 			
+	 		m_enabled_tunneling_exp_eap_array[i]->GetValue().Ptr(),
+	 		m_enabled_tunneling_exp_eap_array[i]->GetValue().Size()));	 			
 		
 		if (eap_type == expEAPTmp)
 		{
@@ -6178,35 +6410,7 @@
 		}
 	}
 
-#else // For normal EAP types.
-	
-	TEap *eapType = 0; 
-	
-	TInt i(0);
-		
-	for (i = 0; i < m_iap_eap_array.Count(); i++)
-	{
-		// Try next EAP type
-		eapType = m_iap_eap_array[i];
-		if (eapType->Enabled == 1)
-		{	
-			// Convert the string to integer
-			TLex8 tmp(eapType->UID);
-			TInt val(0);
-			tmp.Val(val);
-			if (val == eap_type)
-			{
-				// Allowed
-				status = eap_status_ok;
-				break;
-			}	
-		}
-	}
-	
-#endif //#ifdef USE_EAP_EXPANDED_TYPES	
-	
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-
 	return EAP_STATUS_RETURN(m_am_tools, status);
 }
 
@@ -6223,15 +6427,11 @@
 
 	eap_status_e status(eap_status_illegal_eap_type);
 
-#ifdef USE_EAP_EXPANDED_TYPES
-
 	// We need to return only the EAP types available as enabled types.
 	// It means only the ones available in m_enabled_tunneling_exp_eap_array.
 	
 	for (TInt i = 0; i < m_enabled_tunneling_exp_eap_array.Count(); i++)
 	{	
-		TBuf8<KExpandedEAPTypeSize> tmpExpEAP(m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType);
-
 		EAP_TRACE_DEBUG(
 			m_am_tools, 
 			TRACE_FLAGS_DEFAULT, 
@@ -6242,25 +6442,27 @@
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("Enabled expanded EAP type:"),
-			tmpExpEAP.Ptr(),
-			tmpExpEAP.Size()));
+			m_enabled_tunneling_exp_eap_array[i]->GetValue().Ptr(),
+			m_enabled_tunneling_exp_eap_array[i]->GetValue().Size()));
 
 		// This is for one expanded EAP type (for the above one).
 		eap_type_value_e * expandedEAPType = new eap_type_value_e();
-				
-		// Read the expanded EAP type details from an item in m_enabled_tunneling_exp_eap_array.
-		status = eap_type_value_e::read_type(m_am_tools,
-												0,
-												&tmpExpEAP,
-												tmpExpEAP.Length(),
-												expandedEAPType);
-		if (status != eap_status_ok)
-		{
-			delete expandedEAPType;
-			expandedEAPType = 0;
+		
+		eap_automatic_variable_c<eap_type_value_e> automatic_expandedEAPType(
+			m_am_tools,
+			expandedEAPType);
+
+		TInt error = CEapConversion::ConvertExpandedEAPTypeToInternalType(
+			m_enabled_tunneling_exp_eap_array[i],
+			expandedEAPType);
+
+		if (error != KErrNone)
+		{
 			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-			return EAP_STATUS_RETURN(m_am_tools, status);
-		}
+			return EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error));
+		}
+
+		automatic_expandedEAPType.do_not_free_variable();
 
 		// Add EAP-type to list.		
 		status = eap_type_list->add_object(expandedEAPType, true);
@@ -6276,56 +6478,19 @@
 		EAP_TRACE_DEBUG(
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
-			(EAPL("get_eap_type_list():added EAP-type=0x%08x=%s\n"),
+			(EAPL("get_eap_type_list():added EAP-type=0xfe%06x%08x=%s\n"),
+			expandedEAPType->get_vendor_id(),
 			expandedEAPType->get_vendor_type(),
-			eap_string.get_eap_type_string(*expandedEAPType)));			
+			eap_header_string_c::get_eap_type_string(*expandedEAPType)));			
 	
 	}// for()
 
-#else // for normal EAP types.
-
-	TEap *eapType = 0; 
-
-	status = eap_type_list->reset();
-	if (status != eap_status_ok)
-	{
-		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-		return EAP_STATUS_RETURN(m_am_tools, status);
-	}
-
-
-	for (TInt i = 0; i < m_iap_eap_array.Count(); i++)
-	{
-		// Check if type is enabled
-		eapType = m_iap_eap_array[i];
-		if (eapType->Enabled == 1)
-		{	
-			TLex8 tmp(eapType->UID);
-			TInt val(0);
-			tmp.Val(val);
-
-			eap_type_value_e * const eap_type = new eap_type_value_e(static_cast<eap_type_ietf_values_e>(val));
-			if (eap_type == 0)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
-			}
-
-			status = eap_type_list->add_object(eap_type, true);
-			if (status != eap_status_ok)
-			{
-				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
-				return EAP_STATUS_RETURN(m_am_tools, status);
-			}
-		}
-	} // for()
-
-#endif // #ifdef USE_EAP_EXPANDED_TYPES
-
 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 	return eap_status_ok;
 }
 
+//--------------------------------------------------
+
 eap_status_e eap_am_type_tls_peap_symbian_c::unload_module(const eap_type_value_e /*type*/)
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -6333,6 +6498,7 @@
 	return EAP_STATUS_RETURN(m_am_tools, eap_status_not_supported);
 }
 
+//--------------------------------------------------
 
 void eap_am_type_tls_peap_symbian_c::send_error_notification(const eap_status_e error)
 {
@@ -6371,19 +6537,10 @@
 	m_partner->state_notification(&notification);
 }
 
-eap_status_e eap_am_type_tls_peap_symbian_c::show_certificate_selection_dialog()
-{
-	return eap_status_ok;
-}
-
-eap_status_e eap_am_type_tls_peap_symbian_c::show_manual_identity_dialog()
-{
-	return eap_status_ok;
-}
-
 //--------------------------------------------------
 // CANCELLATION FUNCTIONS
 //--------------------------------------------------
+
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::cancel_identity_query()
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -6399,6 +6556,8 @@
 	return eap_status_ok;
 }
 
+//--------------------------------------------------
+
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::cancel_query_cipher_suites_and_previous_session()
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -6628,73 +6787,74 @@
 
 	EAP_TRACE_DEBUG(m_am_tools, 
 		TRACE_FLAGS_DEFAULT, (
-		EAPL("eap_am_type_tls_peap_symbian_c::is_session_valid - m_current_eap_vendor_type=%d \n"),
-		m_current_eap_vendor_type));
+		EAPL("eap_am_type_tls_peap_symbian_c::is_session_valid - m_current_eap_vendor_type=0xfe%06x%08x\n"),
+		m_current_eap_type.get_vendor_id(),
+		m_current_eap_type.get_vendor_type()));
 
 	TPtrC maxSessionTimeString;
 	TPtrC lastFullAuthTimeString;
 
-	switch (m_current_eap_vendor_type)
-	{
-	case eap_type_tls:
-		{
-			maxSessionTimeString.Set(cf_str_EAP_TLS_max_session_validity_time_literal);
-			lastFullAuthTimeString.Set(KTLSLastFullAuthTime);
-		}
-		break;
-
-	case eap_type_peap:
-		{
-			maxSessionTimeString.Set(cf_str_EAP_PEAP_max_session_validity_time_literal);
-			lastFullAuthTimeString.Set(KPEAPLastFullAuthTime);
-		}
-		break;
-	
-	case eap_type_ttls:
-		{
-			maxSessionTimeString.Set(cf_str_EAP_TTLS_max_session_validity_time_literal);
-			lastFullAuthTimeString.Set(KTTLSLastFullAuthTime);
-		}
-		break;
-
+	if (m_current_eap_type == eap_type_tls)
+	{
+		maxSessionTimeString.Set(cf_str_EAP_TLS_max_session_validity_time_literal);
+		lastFullAuthTimeString.Set(KTLSLastFullAuthTime);
+	}
+	else if (m_current_eap_type == eap_type_peap)
+	{
+		maxSessionTimeString.Set(cf_str_EAP_PEAP_max_session_validity_time_literal);
+		lastFullAuthTimeString.Set(KPEAPLastFullAuthTime);
+	}
+	else if (m_current_eap_type == eap_type_ttls)
+	{
+		maxSessionTimeString.Set(cf_str_EAP_TTLS_max_session_validity_time_literal);
+		lastFullAuthTimeString.Set(KTTLSLastFullAuthTime);
+	}
 #if defined(USE_FAST_EAP_TYPE)		
-	case eap_type_fast:
-		{
-			maxSessionTimeString.Set(cf_str_EAP_FAST_max_session_validity_time_literal);
-			lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
-		}
-		break;
+	else if (m_current_eap_type == eap_type_fast)
+	{
+		maxSessionTimeString.Set(cf_str_EAP_FAST_max_session_validity_time_literal);
+		lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
+	}
 #endif
-		
-	case eap_type_ttls_plain_pap:
-	    {
-	        // we should not come here, ttls pap has its own
-	        // method for checking session validity
-	        EAP_TRACE_ERROR( m_am_tools, TRACE_FLAGS_DEFAULT, (
-	            EAPL( "ERROR: wrong eap type.\n" ) ) );
-	        return false;
-	    }
-	    
-	default:
-		{
-			// Should never happen
-			EAP_TRACE_ERROR(m_am_tools, 
-				TRACE_FLAGS_DEFAULT, (
-				EAPL("Unsupported EAP type, m_current_eap_vendor_type=%d \n"),
-				m_current_eap_vendor_type));
-				
-			return false; // Treat this as Session invalid.
-		}
-	}	
+	else if (m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type())
+	{
+	    // we should not come here, ttls pap has its own
+	    // method for checking session validity
+	    EAP_TRACE_ERROR( m_am_tools, TRACE_FLAGS_DEFAULT, (
+	        EAPL( "ERROR: wrong eap type.\n" ) ) );
+	    return false;
+	}
+	else
+	{
+		// Should never happen
+		EAP_TRACE_ERROR(m_am_tools, 
+			TRACE_FLAGS_DEFAULT, (
+			EAPL("Unsupported EAP type, m_current_eap_vendor_type=0xfe%06x%08x\n"),
+			m_current_eap_type.get_vendor_id(),
+			m_current_eap_type.get_vendor_type()));
+			
+		return false; // Treat this as Session invalid.
+	}
 
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 	
 	// Query all the relevant parameters
-	_LIT(KSQLQuery, "SELECT %S, %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	sqlStatement.Format(KSQLQuery, &maxSessionTimeString, &lastFullAuthTimeString, &m_db_table_name,
-						&KServiceType, m_index_type, 
-						&KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQLQuery, "SELECT %S, %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+
+	sqlStatement.Format(
+		KSQLQuery,
+		&maxSessionTimeString,
+		&lastFullAuthTimeString,
+		&m_db_table_name,
+		&KServiceType,
+		m_index_type, 
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 
 	RDbView view;
 	// Evaluate view
@@ -6806,65 +6966,68 @@
 	
 	EAP_TRACE_DEBUG(m_am_tools, 
 		TRACE_FLAGS_DEFAULT, 
-		(EAPL("eap_am_type_tls_peap_symbian_c::store_authentication_timeL, index type=%d, index=%d, tunneling type=%d, current eap type=%d\n"),
-		m_index_type, m_index, m_tunneling_vendor_type, m_current_eap_vendor_type));	
+		(EAPL("eap_am_type_tls_peap_symbian_c::store_authentication_timeL, index type=%d, index=%d, tunneling type=0xfe%06x%08x, current eap type=0xfe%06x%08x\n"),
+		m_index_type,
+		m_index,
+		m_tunneling_type.get_vendor_id(),
+		m_tunneling_type.get_vendor_type(),
+		m_current_eap_type.get_vendor_id(),
+		m_current_eap_type.get_vendor_type()));
 
 	TPtrC lastFullAuthTimeString;
 
-	switch (m_current_eap_vendor_type)
-	{
-	case eap_type_tls:
-		{
-			lastFullAuthTimeString.Set(KTLSLastFullAuthTime);
-		}
-		break;
-
-	case eap_type_peap:
-		{
-			lastFullAuthTimeString.Set(KPEAPLastFullAuthTime);
-		}
-		break;
-
-	case eap_type_ttls:
-		{
-			lastFullAuthTimeString.Set(KTTLSLastFullAuthTime);
-		}
-		break;
-		
-	case eap_type_ttls_plain_pap:
-		{
+	if (m_current_eap_type == eap_type_tls)
+	{
+		lastFullAuthTimeString.Set(KTLSLastFullAuthTime);
+	}
+	else if (m_current_eap_type == eap_type_peap)
+	{
+		lastFullAuthTimeString.Set(KPEAPLastFullAuthTime);
+	}
+	else if (m_current_eap_type == eap_type_ttls)
+	{
+		lastFullAuthTimeString.Set(KTTLSLastFullAuthTime);
+	}
+	else if (m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type())
+	{
 		lastFullAuthTimeString.Set( KTTLSPAPLastFullAuthTime );
-		}
-		break;
-
+	}
 #if defined(USE_FAST_EAP_TYPE)
-	case eap_type_fast:
-		{
-			lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
-		}
-		break;
+	else if (m_current_eap_type == eap_type_fast)
+	{
+		lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
+	}
 #endif
-		
-	default:
-		{
-			// Should never happen
-			EAP_TRACE_ERROR(m_am_tools, 
-				TRACE_FLAGS_DEFAULT, (
-				EAPL("Unsupported EAP type, m_current_eap_vendor_type=%d \n"),
-				m_current_eap_vendor_type));
-				
-			User::Leave(KErrNotSupported);
-		}
-	}	
+	else
+	{
+		// Should never happen
+		EAP_TRACE_ERROR(m_am_tools, 
+			TRACE_FLAGS_DEFAULT, (
+			EAPL("Unsupported EAP type, m_current_eap_vendor_type=0xfe%06x%08x\n"),
+			m_current_eap_type.get_vendor_id(),
+			m_current_eap_type.get_vendor_type()));
+			
+		User::Leave(KErrNotSupported);
+	}
 
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 	
 	// Query all the relevant parameters
-	_LIT(KSQLQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
-	sqlStatement.Format(KSQLQuery, &lastFullAuthTimeString, &m_db_table_name,
-						&KServiceType, m_index_type, 
-						&KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
+	_LIT(KSQLQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d");
+
+	sqlStatement.Format(
+		KSQLQuery,
+		&lastFullAuthTimeString,
+		&m_db_table_name,
+		&KServiceType,
+		m_index_type, 
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
 
 	RDbView view;
 	// Evaluate view
@@ -6872,7 +7035,7 @@
 	CleanupClosePushL(view);
 	User::LeaveIfError(view.EvaluateAll());
 	
-	// Get the first (and only) row for updation.
+	// Get the first (and only) row for update.
 	view.FirstL();
 	view.UpdateL();
 	
@@ -6989,8 +7152,8 @@
 }
 
 #endif //#if defined(USE_EAP_CORE_SERVER)
-//--------------------------------------------------
-
+
+//--------------------------------------------------
 
 // This is commented in eap_am_fast_pac_store_services_c::query_user_permission_for_A_ID().
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::query_user_permission_for_A_ID(
@@ -7046,7 +7209,7 @@
 eap_status_e eap_am_type_tls_peap_symbian_c::QueryUserPermissionForAIDL(
 		const eap_fast_variable_data_c * const in_pac_attribute_A_ID_info,
 		const eap_fast_variable_data_c * const in_pac_attribute_A_ID)
-	{
+{
 	eap_status_e status(eap_status_ok);
 	
 	HBufC8* A_ID_info8 = HBufC8::NewLC((in_pac_attribute_A_ID_info->get_data_length()));
@@ -7073,7 +7236,7 @@
 			(A_IDPtr.Ptr()),
 			(in_pac_attribute_A_ID->get_data_length())));
 
- 	if (A_ID_infoPtr.Size()>KMaxEapFastNotifierBufLength)
+ 	if (A_ID_infoPtr.Size()>=KMaxNotifItemLength)
 	{
   		CleanupStack::PopAndDestroy(3); // A_ID, A_ID_info
   		status = m_am_tools->convert_am_error_to_eapol_error(KErrArgument);
@@ -7081,41 +7244,42 @@
  		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
  		return EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
 	}
-
- 	TBool startedOk = ETrue;
- 	
- 	if (!iEapFastActiveNotes)
-         {
-         TRAPD( err, iEapFastActiveNotes = CEapFastActive::NewL( this ) );
-         
-         if ( err != KErrNone )
-             {
-             status = eap_status_allocation_error;
-             }   
-        }
- 	if ( status == KErrNone )
- 		{
-	    //update buffer
- 		iEapFastActiveNotes->UpdateInputBuf( A_ID_infoPtr );
-        // start query install dialog
- 		// asynch. call, return immediately
- 		startedOk = iEapFastActiveNotes->Start(
- 		    CEapFastActive::EEapFastActiveInstallPacQueryDialog );
- 		if ( startedOk == EFalse )
- 			{
- 			status = eap_status_process_general_error;
- 			}
- 		}
- 	else
- 		{
- 		status = eap_status_process_general_error;	
- 		}
+ 
+    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+    
+    m_notifier_data_to_user->iPassword.Copy(A_ID_infoPtr);
+    
+    if (iEapAuthNotifier == 0)
+    	{
+    	TRAPD(err, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+	  	if (err)
+	  		{
+	  			return eap_status_process_general_error;
+	  		}
+    	}
+    else
+	   	{
+		 	TRAPD(err1, iEapAuthNotifier->Cancel());
+	  	if (err1)
+	  		{
+	  			return eap_status_process_general_error;
+	  		}
+     	}
+
+    TRAPD(err2, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastInstallPacQueryDialog, m_notifier_data_to_user, aEapType));
+  	if (err2)
+  		{
+  			return eap_status_process_general_error;
+  		}
+ 
+ 
 
  	CleanupStack::PopAndDestroy(3); // A_ID, A_ID_info
  	
  	return status;
-	}
-
+}
+
+//--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::read_PAC_store_data(
 	const eap_fast_pac_store_pending_operation_e in_pending_operation,
@@ -7603,84 +7767,88 @@
 					}		
 				}
 				
-				TInt count = 0;
-				
-				m_info_array.Reset();
+				m_info_array.ResetAndDestroy();
 					
 				iPacStoreDb->GetPacStoreDataL(dbTableName, m_info_array);
 				
 				EAP_TRACE_DEBUG_SYMBIAN(
-				(_L("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL:Number of entries in table %S=%d\n"),
-				&dbTableName, m_info_array.Count()));				
+					(_L("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL:Number of entries in table %S=%d\n"),
+					&dbTableName, m_info_array.Count()));
 				
-				while (count < m_info_array.Count())
-					{
-					TPtr8 infoDataPtr = m_info_array[count].iData->Des();
-					TPtr8 infoRefPtr = m_info_array[count].iReference->Des();
-					
-					EAP_TRACE_DATA_DEBUG_SYMBIAN(
-						("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL: BINARY value from PAC DB (reference)",
-						infoRefPtr.Ptr(),
-						infoRefPtr.Size()));
-					
-					EAP_TRACE_DATA_DEBUG_SYMBIAN(
-						("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL: BINARY value from PAC DB (value)",
-						infoDataPtr.Ptr(),
-						infoDataPtr.Size()));					
-					
-					eap_fast_pac_store_data_c * const new_data = new eap_fast_pac_store_data_c(m_am_tools);
-
-					eap_automatic_variable_c<eap_fast_pac_store_data_c> automatic_new_data(
-						m_am_tools, new_data);
-
-					if (new_data == 0)
-					{
-						m_eap_fast_completion_status = eap_status_allocation_error;
-						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
-						break;
-					}
-
-					new_data->set_type(dataType);					
-
-					// Set the reference.
-					m_eap_fast_completion_status = new_data->get_writable_reference()->set_copy_of_buffer(infoRefPtr.Ptr(), infoRefPtr.Size());
-					if (m_eap_fast_completion_status != eap_status_ok)
-					{
-						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
-						delete m_info_array[count].iData;
-						delete m_info_array[count].iReference;
-						break;
-					}
-					
-					m_eap_fast_completion_status = new_data->get_writable_data()->set_copy_of_buffer(infoDataPtr.Ptr(),infoDataPtr.Size() );
-					if (m_eap_fast_completion_status != eap_status_ok)
-					{
-						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
-						delete m_info_array[count].iData;
-						delete m_info_array[count].iReference;
-						break;
-					}
-
-					automatic_new_data.do_not_free_variable();
-
-					m_eap_fast_completion_status = m_references_and_data_blocks.add_object(new_data, true);
-					if (m_eap_fast_completion_status != eap_status_ok)
-					{
-						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
-						delete m_info_array[count].iData;
-						delete m_info_array[count].iReference;
-						break;
-					}					
+				TInt first_index = 0;
+
+				while (m_info_array.Count() > 0)
+					{
+					if (m_info_array[first_index] != 0
+						&& m_info_array[first_index]->GetIsValid() != EFalse)
+						{
+						// Note this will get always the first object of array. After the first object is processed it is destryed and removed from array.
+						TPtr8 infoDataPtr = m_info_array[first_index]->GetData()->Des();
+						TPtr8 infoRefPtr = m_info_array[first_index]->GetReference()->Des();
+						
+						EAP_TRACE_DATA_DEBUG_SYMBIAN(
+							("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL: BINARY value from PAC DB (reference)",
+							infoRefPtr.Ptr(),
+							infoRefPtr.Size()));
+						
+						EAP_TRACE_DATA_DEBUG_SYMBIAN(
+							("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL: BINARY value from PAC DB (value)",
+							infoDataPtr.Ptr(),
+							infoDataPtr.Size()));					
+						
+						eap_fast_pac_store_data_c * const new_data = new eap_fast_pac_store_data_c(m_am_tools);
+
+						eap_automatic_variable_c<eap_fast_pac_store_data_c> automatic_new_data(
+							m_am_tools, new_data);
+
+						if (new_data == 0)
+						{
+							m_eap_fast_completion_status = eap_status_allocation_error;
+							(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
+							break;
+						}
+
+						new_data->set_type(dataType);					
+
+						// Set the reference.
+						m_eap_fast_completion_status = new_data->get_writable_reference()->set_copy_of_buffer(infoRefPtr.Ptr(), infoRefPtr.Size());
+						if (m_eap_fast_completion_status != eap_status_ok)
+						{
+							(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
+							delete m_info_array[first_index];
+							m_info_array.Remove(first_index);
+							break;
+						}
+						
+						m_eap_fast_completion_status = new_data->get_writable_data()->set_copy_of_buffer(infoDataPtr.Ptr(), infoDataPtr.Size());
+						if (m_eap_fast_completion_status != eap_status_ok)
+						{
+							(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
+							delete m_info_array[first_index];
+							m_info_array.Remove(first_index);
+							break;
+						}
+
+						automatic_new_data.do_not_free_variable();
+
+						m_eap_fast_completion_status = m_references_and_data_blocks.add_object(new_data, true);
+						if (m_eap_fast_completion_status != eap_status_ok)
+						{
+							(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
+							delete m_info_array[first_index];
+							m_info_array.Remove(first_index);
+							break;
+						}
+						EAP_TRACE_DATA_DEBUG_SYMBIAN(
+							("For GROUP, AID, PAC INFOs - added data",
+							(new_data->get_data())->get_data((new_data->get_data())->get_data_length()), 
+							(new_data->get_data())->get_data_length()));					
+						}
 							
-					delete m_info_array[count].iData;
-					delete m_info_array[count].iReference;
-					
-					EAP_TRACE_DATA_DEBUG_SYMBIAN(
-						("For GROUP, AID, PAC INFOs - added data",
-						(new_data->get_data())->get_data((new_data->get_data())->get_data_length()), 
-						(new_data->get_data())->get_data_length()));					
-		
-					count++;
+					delete m_info_array[first_index];
+					m_info_array.Remove(first_index);
+					
+		
 					} // End: while
 					
 				
@@ -7731,14 +7899,41 @@
 
 						if(iPacStoreDb->IsMasterKeyPresentL())
 							{
-							m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-								EEapFastNotifierPacStorePwQuery, ETrue );
+				    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+				    
+				    m_notifier_data_to_user->iPassword.Zero();
+				    
+				    if (iEapAuthNotifier == 0)
+				    	{
+				    	iEapAuthNotifier = CEapAuthNotifier::NewL( *this );
+				    	}
+				    else
+					   	{
+						 	iEapAuthNotifier->Cancel();
+				     	}
+				
+				    iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastPacStorePwQueryDialog, m_notifier_data_to_user, aEapType);
+
+
 							}
 						else
 							{
 							m_state =  EMasterkeyQuery; 
-				        	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-				        		EEapFastNotifierCreateMasterkeyQuery, ETrue );
+					    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+					    
+					    m_notifier_data_to_user->iPassword.Zero();
+					    
+					    if (iEapAuthNotifier == 0)
+					    	{
+					    	iEapAuthNotifier = CEapAuthNotifier::NewL( *this );
+					    	}
+					    else
+						   	{
+							 	iEapAuthNotifier->Cancel();
+					     	}
+					
+					    iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastCreateMasterkeyQueryDialog, m_notifier_data_to_user, aEapType);
+
 							}
 
 						break;
@@ -7802,7 +7997,7 @@
 				
 				    eap_variable_data_c m_PAC_store_device_seed(m_am_tools);
 				    m_eap_fast_completion_status = m_PAC_store_device_seed.set_copy_of_buffer(
-				    	iPacStoreDb->GetSeed() );
+				    	iPacStoreDeviceSeed );
 					if ( m_eap_fast_completion_status != eap_status_ok )
 					    {
 					    EAP_TRACE_DEBUG_SYMBIAN(
@@ -8048,9 +8243,21 @@
 
 					m_both_asked++;
 
-					m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-								EEapFastNotifierPacFilePwQuery, ETrue );
-					
+			    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+			    
+			    m_notifier_data_to_user->iPassword.Zero();
+			    
+			    if (iEapAuthNotifier == 0)
+			    	{
+			    	iEapAuthNotifier = CEapAuthNotifier::NewL( *this );
+			    	}
+			    else
+				   	{
+					 	iEapAuthNotifier->Cancel();
+			     	}
+			
+			    iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastPacFilePwQueryDialog, m_notifier_data_to_user, aEapType);
+
 					if (m_eap_fast_completion_status != eap_status_ok)
 						{
 						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
@@ -8076,9 +8283,14 @@
 			} // End: switch(pacStoreDataRefType)			
 		}
 	} // for ()
+
 	if (m_both_asked)
+	{
 		m_eap_fast_completion_status = eap_status_pending_request;
-	m_info_array.Reset();
+	}
+
+	m_info_array.ResetAndDestroy();
+
 	EAP_TRACE_DEBUG_SYMBIAN(
 		(_L("eap_am_type_tls_peap_symbian_c::ReadPACStoredataL-End, m_eap_fast_completion_status=%d"),
 		m_eap_fast_completion_status));			
@@ -8278,18 +8490,10 @@
 						break;		
 					}		
 					case eap_pac_store_data_type_PAC_store_password:
-					{
-						//This is not saved anywhere.
-						break;		
-					}		
 					case eap_pac_store_data_type_PAC_store_device_seed:
-					{
-						//This is not saved anywhere.
-						break;		
-					}		
 					case eap_pac_store_data_type_PAC_store_IAP_reference:
 					{
-						//This is not saved anywhere.
+						//These are not saved anywhere.
 						break;		
 					}		
 					case eap_pac_store_data_type_PAC_store_group_reference:
@@ -8479,10 +8683,12 @@
 	return EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
 }
 	
+//--------------------------------------------------
+
 void eap_am_type_tls_peap_symbian_c::CompleteAddImportedPACFileL(
 		const eap_variable_data_c * const in_imported_PAC_filename,
 		const eap_variable_data_c * const out_used_group_reference)
-	{
+{
 	RFs aFs;
 	aFs.Connect( KFileServerDefaultMessageSlots );
 
@@ -8555,21 +8761,32 @@
 				(_L("eap_am_type_tls_peap_symbian_c::complete_add_imported_PAC_file: NO GROUP REFERENCE !!!!")));	
 
 		}
-	
+
 	HBufC* FilePath = HBufC::NewLC(KMaxFileName); // must be defined to correct maxs dir length
 	TPtr FilePathPtr = FilePath->Des();
 	HBufC8* FilePath8 = HBufC8::NewLC(KMaxFileName); // must be defined to correct maxs dir length
 	TPtr8 FilePathPtr8 = FilePath8->Des();
-	
-	_LIT8(KPacStoreSourceDir, "c:\\private\\101f8ec5\\PACGroup\\"); // in dir are dirs where from files are read
+
 	FilePathPtr8.Zero();
-	FilePathPtr8.Append(KPacStoreSourceDir);
 	FilePathPtr8.Append(refPtr);
 	FilePathPtr8.Append(KSeparator);
 	FilePathPtr8.Append(bufPtr);
 
+	// Copy is the only function that takes TPtr8 type of parameter.
 	FilePathPtr.Copy(FilePathPtr8);
 
+	{
+		TFileName aPrivateDatabasePathName;
+
+		EapPluginTools::GetPrivatePathL(
+			aPrivateDatabasePathName);
+
+		aPrivateDatabasePathName.Append(KPacStoreSourceDir);
+		aPrivateDatabasePathName.Append(FilePathPtr);
+
+		FilePathPtr.Copy(aPrivateDatabasePathName);
+	}
+
 	EAP_TRACE_DATA_DEBUG(
    		m_am_tools,
    		TRACE_FLAGS_DEFAULT,
@@ -8595,7 +8812,7 @@
 	CleanupStack::PopAndDestroy(ref); 
 	CleanupStack::PopAndDestroy(buf); 
 	
-	}
+}
 
 
 // ---------------------------------------------------------
@@ -8603,8 +8820,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::ContinueInitializePacStore()
-
-	{
+{
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ContinueInitializePacStore()")));
 
@@ -8638,7 +8854,7 @@
 			0,
 			1);
 
-	}
+}
 
 //--------------------------------------------------
 
@@ -8751,6 +8967,8 @@
 	return EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
 }
 
+//--------------------------------------------------
+
 // This is commented in eap_am_fast_pac_store_services_c::cancel_PAC_store_operations().
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::cancel_PAC_store_operations()
 {
@@ -8776,9 +8994,7 @@
 
 //--------------------------------------------------
 
-
-EAP_FUNC_EXPORT eap_status_e
-eap_am_type_tls_peap_symbian_c::initialize_PAC_store(
+EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::initialize_PAC_store(
 	const eap_fast_completion_operation_e aCompletionOperation,
 	const eap_fast_initialize_pac_store_completion_e aCompletion )
 {
@@ -8819,7 +9035,7 @@
 		    	    }
         	    }
 		    // asynch. call, return immediately
-		    iPacStoreDb->CreateDeviceSeedAsynch();
+		    CreateDeviceSeedAsync();
 		    }
     	else
     		{
@@ -8845,125 +9061,121 @@
 // eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_starts
 // ---------------------------------------------------------------------------
 //  
-EAP_FUNC_EXPORT
-eap_status_e eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_starts(
+EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_starts(
 	const eap_fast_completion_operation_e provisioning_mode,
 	const eap_fast_pac_type_e pac_type )
-	{
+{
 	eap_status_e status( eap_status_ok );
 	m_provisioning_mode = provisioning_mode; // save provis. mode
-	
-	TInt err = KErrNone;	
-	if ( !iEapFastActiveWaitNote )
-		{
-		TRAP( err, iEapFastActiveWaitNote = CEapFastActive::NewL( this ) );
-		}
-	if ( !iEapFastActiveNotes )
-		{
-		TRAP( err, iEapFastActiveNotes = CEapFastActive::NewL( this ) );
-		}
-	if ( err != KErrNone )
-		{
-		status = eap_status_allocation_error;
-		}	
-	/**
-	* The note is started in a separate active object.
-	* When user cancels waiting note,
-	* SendErrorNotification( eap_status_user_cancel_authentication )
-	* will be called in iEapFastActiveWaitNote->RunL().
-	* Otherwise note is stopped using iEapFastActiveWaitNote.Start() method.
-	*/
-	TBool startedOk = ETrue;
-	
+
+	TInt error(KErrNone);
+
+	TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+
+	m_notifier_data_to_user->iPassword.Zero();
+
+	if (iEapAuthNotifier == 0)
+	{
+		TRAP(error, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+		if (error)
+		{
+			return m_am_tools->convert_am_error_to_eapol_error(error);
+		}
+	}
+	else
+	{
+		TRAP(error, iEapAuthNotifier->Cancel());
+		if (error)
+		{
+			return m_am_tools->convert_am_error_to_eapol_error(error);
+		}
+	}
+
 	if ( pac_type == eap_fast_pac_type_tunnel_pac
-		 &&
-		 provisioning_mode ==
-		     eap_fast_completion_operation_server_authenticated_provisioning_mode
-		 &&
-		 status == eap_status_ok )
-		{
-		EAP_TRACE_DEBUG_SYMBIAN( ( _L("eap_am_type_tls_peap_symbian_c:: \
-				indicates_eap_fast_provisioning_starts Authenticated provisioning!")));			
-		startedOk = iEapFastActiveWaitNote->Start(
-			CEapFastActive::EEapFastActiveStartAuthProvWaitNote );
-		}
+		 && provisioning_mode == eap_fast_completion_operation_server_authenticated_provisioning_mode
+		 && status == eap_status_ok )
+	{
+		TRAP(error, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastStartAuthProvWaitNote, m_notifier_data_to_user, aEapType));
+		if (error)
+		{
+			return m_am_tools->convert_am_error_to_eapol_error(error);
+		}
+	}
 	else if (
 		pac_type == eap_fast_pac_type_tunnel_pac
-		&&
-		provisioning_mode ==
-	        eap_fast_completion_operation_server_unauthenticated_provisioning_mode_ADHP
-	    &&
-	    status == eap_status_ok )
-		{
-		EAP_TRACE_DEBUG_SYMBIAN(  (_L("eap_am_type_tls_peap_symbian_c:: \
-			indicates_eap_fast_provisioning_starts UnAuthenticated provisioning!")));			
-		startedOk = iEapFastActiveWaitNote->Start(
-        	CEapFastActive::EEapFastActiveStartUnauthProvWaitNote );        
-		}
-	if ( startedOk == EFalse )
-        {
-        status = eap_status_process_general_error;
-        }
-	if ( status != eap_status_ok )
-		{
-	    EAP_TRACE_DEBUG_SYMBIAN( (_L("eap_am_type_tls_peap_symbian_c:: \
-            indicates_eap_fast_provisioning_starts ERROR: status=%d."), status ) );
-		}
+		&& provisioning_mode == eap_fast_completion_operation_server_unauthenticated_provisioning_mode_ADHP
+	  && status == eap_status_ok )
+	{
+		TRAP(error, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastStartUnauthProvWaitNote, m_notifier_data_to_user, aEapType));
+		if (error)
+		{
+			return m_am_tools->convert_am_error_to_eapol_error(error);
+		}
+	}
+
+
+
 	return status;
-	}
+}
 
 // ---------------------------------------------------------------------------
 // eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_ends
 // ---------------------------------------------------------------------------
 //  
-EAP_FUNC_EXPORT
-eap_status_e eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_ends(
+EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_ends(
     const bool provisioning_successfull,
     const eap_fast_completion_operation_e provisioning_mode,
     const eap_fast_pac_type_e pac_type )
-	{	
-	EAP_TRACE_DEBUG_SYMBIAN( (_L("eap_am_type_tls_peap_symbian_c:: \
-	    indicates_eap_fast_provisioning_ends()")));
+{	
+	EAP_TRACE_DEBUG_SYMBIAN( (_L("eap_am_type_tls_peap_symbian_c::indicates_eap_fast_provisioning_ends()")));
 
 	EAP_UNREFERENCED_PARAMETER(provisioning_mode);
 
+	TInt error(KErrNone);
+
 	eap_status_e status( eap_status_ok );
-	
+
 	if ( pac_type == eap_fast_pac_type_tunnel_pac )
-		{
-	    // stop wait note;
-		if ( iEapFastActiveWaitNote )
-			{
-			if ( iEapFastActiveWaitNote->IsActive() )
-				{
-				iEapFastActiveWaitNote->Cancel();
-				}
-			delete iEapFastActiveWaitNote;
-			iEapFastActiveWaitNote = NULL;
-			}
-
-	    if ( iEapFastActiveNotes )
-		    {	    
-            if( provisioning_successfull )
-		        {
-		        // synch. call
-		        iEapFastActiveNotes->Start( CEapFastActive::
-		            EEapFastActiveShowProvSuccessNote, ETrue );
-		        }
-            else
-      	        {
-      	        // synch. call
-      	        iEapFastActiveNotes->Start( CEapFastActive::
-      	            EapFastActiveShowProvNotSuccessNote, ETrue );
-      	        }
-		    }
-		} // if ( pac_type == eap_fast_pac_type_tunnel_pac )
+	{
+		// stop wait note;
+		TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+
+		m_notifier_data_to_user->iPassword.Zero();
+
+		if (iEapAuthNotifier == 0)
+		{
+			TRAP(error, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+			if (error)
+			{
+				return m_am_tools->convert_am_error_to_eapol_error(error);
+			}
+		}
+		else
+		{
+			TRAP(error, iEapAuthNotifier->Cancel());
+			if (error)
+			{
+				return m_am_tools->convert_am_error_to_eapol_error(error);
+			}
+		}
+
+		if( !provisioning_successfull )
+		{
+			TRAP(error, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastShowProvNotSuccessNote, m_notifier_data_to_user, aEapType));
+			if (error)
+			{
+				return m_am_tools->convert_am_error_to_eapol_error(error);
+			}
+		}
+	} // if ( pac_type == eap_fast_pac_type_tunnel_pac )
 
 	return status;
-	}
+}
 
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
+//--------------------------------------------------
+
 #ifdef USE_PAC_STORE
 	
 void eap_am_type_tls_peap_symbian_c::GetPacStoreDbDataL(
@@ -9234,76 +9446,11 @@
 
 //--------------------------------------------------
 
-#if defined(USE_FAST_EAP_TYPE)
-
-eap_status_e eap_am_type_tls_peap_symbian_c::ShowNotifierItemAndGetResponse(
-	EEapFastNotifierUiItem aNotifierUiItem, TBool aSetActive )
-{
-	EAP_TRACE_DEBUG_SYMBIAN(
-		(_L("eap_am_type_tls_peap_symbian_c::ShowNotifierItem aNotifierUiItem=%d, ActiveStatus=%d "),
-		aNotifierUiItem, IsActive()));
-
-	if ( aSetActive && IsActive() )
-	{
-		EAP_TRACE_DEBUG_SYMBIAN(
-			(_L("ShowNotifierItemAndGetResponse: Already active when tried to show Notifier")));		
-		
-		return eap_status_device_busy;
-	}
-	
-	eap_status_e status( eap_status_ok );
-	
-	if( !m_is_notifier_connected )
-	{
-		TInt error = m_notifier.Connect();
-		
-		EAP_TRACE_DEBUG_SYMBIAN(
-			(_L("eap_am_type_tls_peap_symbian_c::ShowNotifierItem - m_notifier.Connect() returned error=%d\n"), error));
-		
-		if( error != KErrNone)
-		{
-			// Can not connect to notifier.
-			return m_am_tools->convert_am_error_to_eapol_error(error);		
-		}
-		
-		m_is_notifier_connected = ETrue; // Got connectted to notifier.
-	}
-	
-	// Update the values needed for notifier.
-	m_notifier_data_to_user->iEapFastNotifierUiItem = aNotifierUiItem;
-			
-	EAP_TRACE_DEBUG_SYMBIAN(
-		(_L("m_notifier_data_pckg_to_user"),
-		m_notifier_data_pckg_to_user->Ptr(),
-		m_notifier_data_pckg_to_user->Size()));
-			
-	m_notifier_data_from_user->iEapFastNotifierBuffer.Delete(0,KMaxEapFastNotifierBufLength);
-	
-	EAP_TRACE_DEBUG_SYMBIAN(
-		(_L("eap_am_type_tls_peap_symbian_c::ShowNotifierItem - StartNotifierAndGetResponse")));
-
-	m_notifier.StartNotifierAndGetResponse(
-		iStatus, 
-		KEapFastNotifierUid, 
-		*m_notifier_data_pckg_to_user, 
-		*m_notifier_data_pckg_from_user);
-	
-	if ( aSetActive )
-		{
-		m_notifier_complete = ETrue;
-		SetActive();
-		}
-	    
-	EAP_TRACE_DEBUG_SYMBIAN(
-		(_L("eap_am_type_tls_peap_symbian_c::ShowNotifierItem - End")));
-
-	return status;
-}
-
+#ifdef USE_FAST_EAP_TYPE
 //--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::RemoveIAPReference()
-	{
+{
 	EAP_TRACE_DEBUG_SYMBIAN(
 		(_L("eap_am_type_tls_peap_symbian_c::RemoveIAPReference - Start")));
 	m_eap_fast_completion_status = eap_status_ok;	
@@ -9367,10 +9514,12 @@
 		(_L("eap_am_type_tls_peap_symbian_c::RemoveIAPReference - End")));
 		
 	return m_eap_fast_completion_status;
-	}
+}
+
+//--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::ImportFilesL()
-	{
+{
 
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ImportFilesL - Start")));
@@ -9465,25 +9614,39 @@
 	TBool FileFound(EFalse);
 	
 	PathPtr8.Zero();
-	PathPtr8.Append(KPacStoreSourceDir);
 	PathPtr8.Append(group_referencePtr8);
 	PathPtr8.Append(KSeparator);
+
 	EAP_TRACE_DATA_DEBUG(
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("eap_am_type_tls_peap_symbian_c::ImportFilesL: Path8"),
 			PathPtr8.Ptr(),
 			PathPtr8.Size()));
+
 	PathPtr.Zero();
+	// Copy is the only function that takes TPtr8 type of parameter.
 	PathPtr.Copy(PathPtr8);
 	
+	{
+		TFileName aPrivateDatabasePathName;
+
+		EapPluginTools::GetPrivatePathL(
+			aPrivateDatabasePathName);
+
+		aPrivateDatabasePathName.Append(KPacStoreSourceDir);
+		aPrivateDatabasePathName.Append(PathPtr);
+
+		PathPtr.Copy(aPrivateDatabasePathName);
+	}
+
 	EAP_TRACE_DATA_DEBUG(
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("eap_am_type_tls_peap_symbian_c::ImportFilesL: Path"),
 			PathPtr.Ptr(),
 			PathPtr.Size()));
-			
+
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ImportFilesL: Check directory availability")));					
 
@@ -9502,7 +9665,7 @@
 
 			directoryEmpty = false;
 
-			while( fileCounter < files->Count() || (!FileFound))
+			while( fileCounter < files->Count())
 				{
 				if (!((*files)[fileCounter].IsDir()))
 					{
@@ -9545,8 +9708,6 @@
 				                    KHandleCompletePacstoreOkTimerID, 
 				                    &m_eap_fast_completion_status,
 				                    1);
-					   	if (readData != NULL)
-					   		CleanupStack::PopAndDestroy(readData);
 					   	CleanupStack::PopAndDestroy(5); // Path, Path8, filename, buf2, group_reference8
 						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 						return EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
@@ -9556,23 +9717,44 @@
 			else if(directoryEmpty == false &&  directoryExists == true && FileFound != EFalse)
 				{
 				PathPtr8.Zero();
-				PathPtr8.Append(KPacStoreSourceDir);
 				PathPtr8.Append(group_referencePtr8);
 				PathPtr8.Append(KSeparator);
 				PathPtr8.Append(filenamePtr8);
+
 				EAP_TRACE_DATA_DEBUG(
 						m_am_tools,
 						TRACE_FLAGS_DEFAULT,
 						(EAPL("eap_am_type_tls_peap_symbian_c::ImportFilesL: Path8"),
 						PathPtr8.Ptr(),
 						PathPtr8.Size()));
+
 				PathPtr.Zero();
 				PathPtr.Copy(PathPtr8);
+
+				{
+					TFileName aPrivateDatabasePathName;
+
+					EapPluginTools::GetPrivatePathL(
+						aPrivateDatabasePathName);
+
+					aPrivateDatabasePathName.Append(KPacStoreSourceDir);
+					aPrivateDatabasePathName.Append(PathPtr);
+
+					PathPtr.Copy(aPrivateDatabasePathName);
+				}
 				
+				EAP_TRACE_DATA_DEBUG(
+						m_am_tools,
+						TRACE_FLAGS_DEFAULT,
+						(EAPL("eap_am_type_tls_peap_symbian_c::ImportFilesL: PathPtr"),
+						PathPtr.Ptr(),
+						PathPtr.Size()));
+
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::ImportFilesL: Read file")));	
 				
 				RFile file;
+
 				if(file.Open(aFs, PathPtr, EFileRead)==KErrNone)
 					{
 					readData= HBufC8::NewLC(filesize); 
@@ -9689,7 +9871,7 @@
 	                this,
 	                KHandleCompletePacstoreNokTimerID, 
 	                &m_eap_fast_completion_status,
-	                1);
+	                0);
 			}
 		else
 			{
@@ -9697,18 +9879,19 @@
 		                this,
 		                KHandleCompletePacstoreOkTimerID, 
 		                &m_eap_fast_completion_status,
-		                1);
+		                0);
 			}
 		}
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ImportFilesL - End")));
 
 	return m_eap_fast_completion_status;
-	}
+}
 
 // ----------------------------------------------------------------------------
+
 eap_status_e eap_am_type_tls_peap_symbian_c::PasswordQueryL()
-	{
+{
 
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::PasswordQueryL")));
@@ -9759,8 +9942,10 @@
 	    	{
 	    	CleanupStack::PopAndDestroy(m_pacStorePWBuf8);
 	    	
-	    	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-	    		EEapFastNotifierWrongPacStorePwNote, ETrue );
+		    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+		    
+		    m_notifier_data_to_user->iPassword.Zero();
+	
 			return m_eap_fast_completion_status;
 			 	    
 	    	}
@@ -9789,8 +9974,33 @@
     					m_verificationStatus));
        	pacStorePWPtr8.Zero();
        	if (m_verificationStatus == EFalse)
-			m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-				EEapFastNotifierPacStorePwQuery, ETrue );
+					{
+    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+    if (iEapAuthNotifier == 0)
+    	{
+    	TRAPD(err3, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+    	if (err3)
+    		{
+    			return eap_status_process_general_error;
+    		}
+    	}
+    else
+    	{
+    	TRAPD(err4, iEapAuthNotifier->Cancel());
+    	if (err4)
+    		{
+    			return eap_status_process_general_error;
+    		}
+    	}
+
+		TRAPD(err5, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastPacStorePwQueryDialog, m_notifier_data_to_user, aEapType));
+  	if (err5)
+  		{
+  			return eap_status_process_general_error;
+  		}
+ 
+
+					}
 		else
 			m_eap_fast_completion_status = m_partner->set_timer(
 				this,
@@ -9812,19 +10022,44 @@
     		}
      	else // temporary before masterkey creation is done dynamically !!!
     		{
-        	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
-        			EEapFastNotifierCreateMasterkeyQuery, ETrue );
-   		
-			}
+    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
+    if (iEapAuthNotifier == 0)
+    	{
+    	TRAPD(err, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+	  	if (err)
+	  		{
+	  			return eap_status_process_general_error;
+	  		}
+    	}
+    else
+    	{
+    	TRAPD(err1, iEapAuthNotifier->Cancel());
+	  	if (err1)
+	  		{
+	  			return eap_status_process_general_error;
+	  		}
+    	}
+
+		TRAPD(err2, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypeFastCreateMasterkeyQueryDialog, m_notifier_data_to_user, aEapType));
+  	if (err2)
+  		{
+  			return eap_status_process_general_error;
+  		}
+			
+
+
+				}
     	}
 
     CleanupStack::PopAndDestroy(m_pacStorePWBuf8);
     
 	return m_eap_fast_completion_status;
-	}
+}
+
+//--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::CompletePasswordQueryL()
-	{
+{
 
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::CompletePasswordQueryL")));
@@ -9897,10 +10132,12 @@
 	m_both_completed++;
 
 	return m_eap_fast_completion_status;
-	}
+}
+
+//--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL(eap_status_e status)
-	{
+{
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL")));
 	if (status == eap_status_ok && (m_new_references_and_data_blocks.get_object_count()>0))
@@ -9920,7 +10157,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -9938,7 +10176,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -9953,7 +10192,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -9970,7 +10210,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -9997,7 +10238,8 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+			
+			status = m_tls_application->complete_read_PAC_store_data(
 				m_eap_fast_completion_status,
 				m_eap_fast_pac_store_pending_operation,
 				&m_references_and_data_blocks);
@@ -10015,7 +10257,8 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+			
+			status = m_tls_application->complete_read_PAC_store_data(
 				m_eap_fast_completion_status,
 				m_eap_fast_pac_store_pending_operation,
 				&m_references_and_data_blocks);
@@ -10030,7 +10273,8 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+			
+			status = m_tls_application->complete_read_PAC_store_data(
 				m_eap_fast_completion_status,
 				m_eap_fast_pac_store_pending_operation,
 				&m_references_and_data_blocks);
@@ -10047,7 +10291,8 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+			
+			status = m_tls_application->complete_read_PAC_store_data(
 				m_eap_fast_completion_status,
 				m_eap_fast_pac_store_pending_operation,
 				&m_references_and_data_blocks);
@@ -10075,7 +10320,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -10093,7 +10339,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -10108,7 +10355,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -10125,7 +10373,8 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+				
+				status = m_tls_application->complete_read_PAC_store_data(
 					m_eap_fast_completion_status,
 					m_eap_fast_pac_store_pending_operation,
 					&m_references_and_data_blocks);
@@ -10160,7 +10409,7 @@
 		EAP_TRACE_DEBUG_SYMBIAN(
 				(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL Reset Done")));
 		
-		eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+		status = m_tls_application->complete_read_PAC_store_data(
 			m_eap_fast_completion_status,
 			m_eap_fast_pac_store_pending_operation,
 			&m_ready_references_and_data_blocks);
@@ -10172,7 +10421,8 @@
 		m_eap_fast_completion_status = eap_status_user_cancel_authentication;
 		m_new_references_and_data_blocks.reset();
 		m_ready_references_and_data_blocks.reset();
-		eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+		
+		status = m_tls_application->complete_read_PAC_store_data(
 			m_eap_fast_completion_status,
 			m_eap_fast_pac_store_pending_operation,
 			&m_references_and_data_blocks);
@@ -10185,7 +10435,8 @@
 	m_eap_fast_completion_status = eap_status_user_cancel_authentication;
 	m_new_references_and_data_blocks.reset();
 	m_ready_references_and_data_blocks.reset();
-	eap_status_e status = m_tls_application->complete_read_PAC_store_data(
+	
+	status = m_tls_application->complete_read_PAC_store_data(
 		m_eap_fast_completion_status,
 		m_eap_fast_pac_store_pending_operation,
 		&m_references_and_data_blocks);
@@ -10207,7 +10458,7 @@
 //--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::CompleteFilePasswordQueryL()
-	{
+{
 	eap_fast_pac_store_data_c * const new_data = new eap_fast_pac_store_data_c(m_am_tools);
 
 	eap_automatic_variable_c<eap_fast_pac_store_data_c> automatic_new_data(
@@ -10269,122 +10520,48 @@
 	m_both_completed++;
 	return m_eap_fast_completion_status;
 
-	}
-
-// ---------------------------------------------------------
-// eap_am_type_tls_peap_symbian_c::CompleteNotifier
-// ---------------------------------------------------------
-//    
-eap_status_e eap_am_type_tls_peap_symbian_c::CompleteNotifierL()
-	{
-	eap_status_e status( eap_status_ok );
-	switch ( m_state )
-	    {
-	    case EPasswordCancel:
-	    case EPasswordQuery:
-	    case EWrongPassword:
-	    case EFilePasswordQuery:
-	    case EMasterkeyQuery:
-	    	{
-	    	EAP_TRACE_DEBUG_SYMBIAN(
-	    			(_L("m_notifier_data_pckg_from_user"),
-	    			m_notifier_data_pckg_from_user->Ptr(),
-	    			m_notifier_data_pckg_from_user->Size()));	    		
-	    	if ( iStatus.Int() == KErrCancel )
-	    		{
-	    		EAP_TRACE_DEBUG_SYMBIAN(
-	    				(_L("eap_am_type_tls_peap_symbian_c::CompleteNotifierL - User cancelled the notifier item")));
-	    		m_userAction = EEapFastNotifierUserActionCancel;	
-	    		}		
-	    	else if( iStatus.Int() != KErrNone )
-	    		{
-	    		EAP_TRACE_DEBUG_SYMBIAN(
-	    			(_L("eap_am_type_tls_peap_symbian_c::CompleteNotifierL - ERROR: Notifier error=%d"),
-	    			iStatus.Int()));	
-	    		return m_am_tools->convert_am_error_to_eapol_error(iStatus.Int());		
-	    		}
-    		EAP_TRACE_DEBUG_SYMBIAN(
-    			(_L("CompleteNotifierL - Notifier return UiItem=%d, UserAction=%d"),
-    			m_notifier_data_from_user->iEapFastNotifierUiItem,
-    			m_notifier_data_from_user->iEapFastNotifierUserAction));
-	    		
-    		EAP_TRACE_DATA_DEBUG_SYMBIAN(
-    			("CompleteNotifierL:UserInput:",
-    			m_notifier_data_from_user->iEapFastNotifierBuffer.Ptr(), 
-    			m_notifier_data_from_user->iEapFastNotifierBuffer.Size()));
-	    			    		
-	    	if ( m_notifier_data_from_user->iEapFastNotifierBuffer.Size() > 0 )
-	    		{
-    			HBufC8* notifier_data8 = HBufC8::NewLC(m_notifier_data_from_user->iEapFastNotifierBuffer.Size());
-    			TPtr8 notifier_dataPtr8 = notifier_data8->Des();
-    			
-    			notifier_dataPtr8.Copy(m_notifier_data_from_user->iEapFastNotifierBuffer); // Unicode -> ascii.
-    			EAP_TRACE_DEBUG_SYMBIAN(
-   					(_L("eap_am_type_tls_peap_symbian_c::CompleteNotifierL ShowNotifierItem - Data copy done")));
-    		    
-    			EAP_TRACE_DATA_DEBUG_SYMBIAN(
-	    			("eap_am_type_tls_peap_symbian_c::CompleteNotifierL ShowNotifierItem:PW from UI (8bits)",
-   					notifier_dataPtr8.Ptr(), 
-   					notifier_dataPtr8.Size()));	    
-    		    
-    			status = m_userResponse.set_copy_of_buffer(
-   					notifier_dataPtr8.Ptr(),
-   					notifier_dataPtr8.Size());
-    			
-	    		CleanupStack::PopAndDestroy( notifier_data8 );
-	    		}
-	    	break;
-	    	}
-	    default:
-	    	{
-	    	EAP_TRACE_DEBUG_SYMBIAN(
-	    	    ( _L( "eap_am_type_tls_peap_symbian_c::CompleteNotifierL() m_state = %d not supported." ),
-	    	    m_state ) );
-	    	}
-	    }
-	return status;
-	}
+}
 
 //--------------------------------------------------
 
 void eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL(const TDesC16& aFromUnicode, TDes8& aToAscii)
-	{
-		EAP_TRACE_DATA_DEBUG_SYMBIAN(
-			("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL:From TEXT",
-			aFromUnicode.Ptr(), 
-			aFromUnicode.Size()));	
-		
-		if(aFromUnicode.Length() <= 0)
-		{
-			EAP_TRACE_DEBUG_SYMBIAN(
-			(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL: Return: NOTHING TO CONVERT")));
-			
-			return;
-		}	
-		
+{
+	EAP_TRACE_DATA_DEBUG_SYMBIAN(
+		("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL:From TEXT",
+		aFromUnicode.Ptr(), 
+		aFromUnicode.Size()));	
+	
+	if(aFromUnicode.Length() <= 0)
+	{
 		EAP_TRACE_DEBUG_SYMBIAN(
-			(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL, aFromUnicode.Length=%d, aFromUnicode.Size=%d"),
-			aFromUnicode.Length(), aFromUnicode.Size()));	
-		
-		// Convert from Unicode to ascii.
-		HBufC8* aFromUnicodeBuf8 = HBufC8::NewLC(aFromUnicode.Length()); // Half times size of source (or length) is enough here.
-		TPtr8 aFromUnicodePtr8 = aFromUnicodeBuf8->Des();
-		
-		EAP_TRACE_DEBUG_SYMBIAN(
-			(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL, aFromUnicodePtr8.Length=%d, aFromUnicodePtr8.Size=%d, aFromUnicodePtr8.MaxLength=%d, aFromUnicodePtr8.MaxSize=%d"),
-			aFromUnicodePtr8.Length(), aFromUnicodePtr8.Size(), aFromUnicodePtr8.MaxLength(), aFromUnicodePtr8.MaxSize()));				
-		
-		aFromUnicodePtr8.Copy(aFromUnicode); // Unicode -> ascii.
-		
-		aToAscii = aFromUnicodePtr8;	
-
-		CleanupStack::PopAndDestroy(aFromUnicodeBuf8); // Delete aFromUnicodeBuf8.	
-
-		EAP_TRACE_DATA_DEBUG_SYMBIAN(
-			("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL:To ASCII",
-			aToAscii.Ptr(), 
-			aToAscii.Size()));	
-	}
+		(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL: Return: NOTHING TO CONVERT")));
+		
+		return;
+	}	
+	
+	EAP_TRACE_DEBUG_SYMBIAN(
+		(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL, aFromUnicode.Length=%d, aFromUnicode.Size=%d"),
+		aFromUnicode.Length(), aFromUnicode.Size()));	
+	
+	// Convert from Unicode to ascii.
+	HBufC8* aFromUnicodeBuf8 = HBufC8::NewLC(aFromUnicode.Length()); // Half times size of source (or length) is enough here.
+	TPtr8 aFromUnicodePtr8 = aFromUnicodeBuf8->Des();
+	
+	EAP_TRACE_DEBUG_SYMBIAN(
+		(_L("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL, aFromUnicodePtr8.Length=%d, aFromUnicodePtr8.Size=%d, aFromUnicodePtr8.MaxLength=%d, aFromUnicodePtr8.MaxSize=%d"),
+		aFromUnicodePtr8.Length(), aFromUnicodePtr8.Size(), aFromUnicodePtr8.MaxLength(), aFromUnicodePtr8.MaxSize()));				
+	
+	aFromUnicodePtr8.Copy(aFromUnicode); // Unicode -> ascii.
+	
+	aToAscii = aFromUnicodePtr8;	
+
+	CleanupStack::PopAndDestroy(aFromUnicodeBuf8); // Delete aFromUnicodeBuf8.	
+
+	EAP_TRACE_DATA_DEBUG_SYMBIAN(
+		("eap_am_type_tls_peap_symbian_c::ConvertUnicodeToAsciiL:To ASCII",
+		aToAscii.Ptr(), 
+		aToAscii.Size()));	
+}
 
 
 // ---------------------------------------------------------
@@ -10392,7 +10569,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
-	{
+{
 	/* Check validity of password against timelimit */
 	
 	EAP_TRACE_DEBUG(m_am_tools, 
@@ -10405,14 +10582,22 @@
     // get max session time
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
 	TPtr sqlStatement = buf->Des();	
-	_LIT( KSqlQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d" );
+
+	_LIT( KSqlQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d" );
+
 	sqlStatement.Format(
 		KSqlQuery,
 		&cf_str_EAP_FAST_max_session_validity_time_literal,
 		&KFastGeneralSettingsDBTableName,
-		&KServiceType, m_index_type, 
-		&KServiceIndex, m_index,
-		&KTunnelingType, m_tunneling_vendor_type );	
+		&KServiceType,
+		m_index_type, 
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType, 
+		m_tunneling_type.get_vendor_type());
+
 	TRAPD( err,  maxSessionTime =  ReadIntDbValueL(
 		m_database,
 		cf_str_EAP_FAST_max_session_validity_time_literal,
@@ -10586,7 +10771,7 @@
 			}
 		}
 	
-	} // eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
+} // eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
 
 
 // ---------------------------------------------------------
@@ -10599,7 +10784,7 @@
 	const TDesC& aTableName,
 	const TDesC& aColumnName,
 	const TDesC& aColumnDef )
-	{
+{
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 		"eap_am_type_tls_peap_symbian_c::AlterTableL() IN\n" ) ) );
 	
@@ -10675,7 +10860,7 @@
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 	    "eap_am_type_tls_peap_symbian_c::AlterTableL() OUT\n" ) ) );
 
-	} // eap_am_type_tls_peap_symbian_c::AlterTableL()
+} // eap_am_type_tls_peap_symbian_c::AlterTableL()
 
 
 // ---------------------------------------------------------
@@ -10683,7 +10868,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::FixOldTablesForPwdIdentityTimeL()
-	{
+{
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 	    "eap_am_type_tls_peap_symbian_c::FixOldTablesForPwdIdentityTimeL() IN" ) ) );	
 	
@@ -10716,7 +10901,7 @@
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 	    "eap_am_type_tls_peap_symbian_c::FixOldTablesForPwdIdentityTimeL() OUT" ) ) );
 	
-	} // eap_am_type_tls_peap_symbian_c::FixOldTablesForPwdIdentityTimeL()
+} // eap_am_type_tls_peap_symbian_c::FixOldTablesForPwdIdentityTimeL()
 
 
 // ---------------------------------------------------------
@@ -10724,7 +10909,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::FixOldTableForPacStoreInitL()
-	{
+{
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 		"eap_am_type_tls_peap_symbian_c::FixOldTableForPacStoreInitL() IN\n" ) ) );
 	
@@ -10752,7 +10937,7 @@
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, ( EAPL(
 	    "eap_am_type_tls_peap_symbian_c::FixOldTableForPacStoreInitL() OUT\n" ) ) );
 
-	} // eap_am_type_tls_peap_symbian_c::FixOldTableForPacStoreInitL()
+} // eap_am_type_tls_peap_symbian_c::FixOldTableForPacStoreInitL()
 
 
 // ---------------------------------------------------------
@@ -10763,7 +10948,7 @@
 	RDbNamedDatabase& aDb,
 	const TDesC& aColumnName,
 	const TDesC& aSqlStatement )
-    {
+{
 	EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (
 			EAPL( "eap_am_type_tls_peap_symbian_c::ReadIntDbValueL()\n" ) ) );
     TPtrC columnName;    
@@ -10792,7 +10977,7 @@
 	CleanupStack::PopAndDestroy( &view ); // Close view.
 
 	return retVal;
-    } // eap_am_type_tls_peap_symbian_c::ReadIntDbValueL
+} // eap_am_type_tls_peap_symbian_c::ReadIntDbValueL
 
 
 // ---------------------------------------------------------
@@ -10800,7 +10985,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::UpdatePasswordTimeL()
-	{
+{
 	/* update last password time */
 	TPtrC lastFullPasswordTimeString;
 	
@@ -10851,7 +11036,7 @@
 			EAPL("UpdatePasswordTimeL - evaluate view\n")));
 	User::LeaveIfError(view.EvaluateAll());
 	
-	// Get the first (and only) row for updation.
+	// Get the first (and only) row.
 	view.FirstL();
 	view.UpdateL();
 	
@@ -10886,11 +11071,12 @@
 	
 	/* update end */	
 	
-	} // eap_am_type_tls_peap_symbian_c::UpdatePasswordTimeL()
-
+} // eap_am_type_tls_peap_symbian_c::UpdatePasswordTimeL()
+
+//--------------------------------------------------
 
 eap_status_e eap_am_type_tls_peap_symbian_c::CreateMasterkeyL()
-	{
+{
 	HBufC8* password = HBufC8::NewLC(m_userResponse.get_data_length());
 	TPtr8 passwordPtr = password->Des();
 	m_PAC_store_password.set_copy_of_buffer(&m_userResponse);
@@ -10898,7 +11084,8 @@
 	m_eap_fast_completion_status = m_am_tools->convert_am_error_to_eapol_error(iPacStoreDb->CreateAndSaveMasterKeyL(passwordPtr));
 	CleanupStack::PopAndDestroy(password);
 	return m_eap_fast_completion_status;
-	}
+}
+
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
 
@@ -10909,10 +11096,9 @@
 // eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid()
 // ------------------------------------------------------------------------
 //
-EAP_FUNC_EXPORT
-bool eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid()
-	{
-    DEBUG( "eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid()" );    
+EAP_FUNC_EXPORT bool eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid()
+{
+    EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid()" )));    
 
     TBool isValid = EFalse;
     TInt err = KErrNone;
@@ -10921,8 +11107,7 @@
     TRAP( err, isValid = IsTtlsPapSessionValidL() );
     if ( err != KErrNone )
 	    {
-	    DEBUG1( "eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid() ERROR: \
-	        Leave, err==%d.", err );
+	    EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid(): Leave, err==%d."), err ));
 	    retVal = false;
 	    }
     else
@@ -10930,48 +11115,140 @@
     	retVal = ( isValid ) ? true : false;
     	}
     return retVal;
-	}
+}
 
 // ------------------------------------------------------------------------
 // eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password()
 // ------------------------------------------------------------------------
 //    
-EAP_FUNC_EXPORT eap_status_e
-eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(
+EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(
 	const eap_variable_data_c * const aInSrvChallengeUtf8 )
-    {
-    DEBUG( "eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password()" );    
-	
-    eap_status_e status( eap_status_pending_request );
-
-    if ( !iEapTtlsPapActive )
-    	{
-    	TRAPD( err, iEapTtlsPapActive = CEapTtlsPapActive::NewL(
-    		this, m_am_tools ) );
-    	if ( err != KErrNone )
-    		{
-            DEBUG1( "eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password() \
-            	ERROR: CEapTtlsPapActive::NewL(), err=%d.", err );    
-    	    return ConvertAmErrorToEapolError( err );
-    		}
-    	}
-    if ( aInSrvChallengeUtf8 != NULL )
-    	{
-        iEapTtlsPapActive->UpdateSrvChallenge( *aInSrvChallengeUtf8 );
-    	}
-    TBool startedOk = iEapTtlsPapActive->Start(
-    	CEapTtlsPapActive::EEapTtlsPapActiveQueryUserNameAndPassword );
-	if ( !startedOk )
-        {
-        status = eap_status_process_general_error;
-        }
-	if ( status != eap_status_pending_request )
-		{
-        DEBUG( "eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password() \
-        	ERROR: status != eap_status_pending_request" );    
-		}
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password()" )));    
+
+	eap_status_e status( eap_status_pending_request );
+	TEapExpandedType aEapType(*EapExpandedTypeTtlsPap.GetType());
+
+	m_notifier_data_to_user->iUsername.Zero();
+	m_notifier_data_to_user->iPassword.Zero();
+	m_notifier_data_to_user->iUidata.Zero();
+
+	if ((aInSrvChallengeUtf8 != NULL) && (aInSrvChallengeUtf8->get_data_length() != 0))
+	{
+		const TPtrC8 utf8(
+			aInSrvChallengeUtf8->get_data(),
+			aInSrvChallengeUtf8->get_data_length()*2); // Length in bytes
+
+		CnvUtfConverter::ConvertToUnicodeFromUtf8(m_notifier_data_to_user->iUidata, utf8);
+
+		EAP_TRACE_DATA_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(): iUidata"),
+			m_notifier_data_to_user->iUidata.Ptr(),
+			m_notifier_data_to_user->iUidata.Size()));
+
+		m_state = EPapChallenge;
+		TEapExpandedType aEapType(*EapExpandedTypeTtlsPap.GetType());
+
+		if (iEapAuthNotifier == 0)
+		{
+			TRAPD(err, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+			if (err)
+			{
+				return eap_status_process_general_error;
+			}
+		}
+
+		TRAPD(err1, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypePapChallengeDialog, m_notifier_data_to_user, aEapType));
+		if (err1)
+		{
+			return eap_status_process_general_error;
+		}
+	}
+	else
+	{
+		m_state = EPapUserNameAndPassword;
+
+		TTtlsPapDbInfo aInDbInfo;
+		TRAPD(err2, ReadTtlsPapDbL(aInDbInfo));
+		if (err2)
+		{
+			return eap_status_process_general_error;
+		}
+
+		m_notifier_data_to_user->iPasswordPromptEnabled = aInDbInfo.iUsrPwdInfo.iPasswordPromptEnabled;
+
+		if (m_notifier_data_to_user->iPasswordPromptEnabled
+			|| aInDbInfo.iUsrPwdInfo.iUserName.Size() == 0
+			|| aInDbInfo.iUsrPwdInfo.iPassword.Size() == 0)
+		{
+			if (aInDbInfo.iUsrPwdInfo.iUserName.Size() == 0)
+			{
+				m_notifier_data_to_user->iUsername.Zero();
+			}
+			else
+			{
+				m_notifier_data_to_user->iUsername = aInDbInfo.iUsrPwdInfo.iUserName;
+			}
+
+			m_notifier_data_to_user->iPassword.Zero();
+
+			TRAPD(err3,SetTtlsPapColumnToNullL( cf_str_EAP_TLS_PEAP_ttls_pap_password_literal ));
+			if (err3)
+			{
+				return eap_status_process_general_error;
+			}
+
+			if (iEapAuthNotifier == 0)
+			{
+				TRAPD(err4, iEapAuthNotifier = CEapAuthNotifier::NewL( *this ));
+				if (err4)
+				{
+					return eap_status_process_general_error;
+				}
+			}
+			else
+			{
+				TRAPD(err5,iEapAuthNotifier->Cancel());
+				if (err5)
+				{
+					return eap_status_process_general_error;
+				}
+			}
+
+			TRAPD(err6, iEapAuthNotifier->StartL(CEapAuthNotifier::EEapNotifierTypePapUsernamePasswordDialog, m_notifier_data_to_user, aEapType));
+			if (err6)
+			{
+				return eap_status_process_general_error;
+			}
+		}
+		else
+		{
+			m_notifier_data_to_user->iUsername = aInDbInfo.iUsrPwdInfo.iUserName;
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(): iUserName"),
+				m_notifier_data_to_user->iUsername.Ptr(),
+				m_notifier_data_to_user->iUsername.Size()));
+
+			m_notifier_data_to_user->iPassword = aInDbInfo.iUsrPwdInfo.iPassword;
+
+			EAP_TRACE_DATA_DEBUG(
+				m_am_tools,
+				TRACE_FLAGS_DEFAULT,
+				(EAPL("eap_am_type_tls_peap_symbian_c::query_ttls_pap_username_and_password(): iPassword"),
+				m_notifier_data_to_user->iPassword.Ptr(),
+				m_notifier_data_to_user->iPassword.Size()));
+
+			DlgComplete(KErrNone);
+		}
+	}
+
 	return status;
-    }
+}
 
 // ================= TTLS-PAP public not exported =======================
 
@@ -10979,14 +11256,13 @@
 // eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password()
 // ------------------------------------------------------------------------
 //    
-eap_status_e
-eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password(
+eap_status_e eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password(
 	const eap_variable_data_c * const /*aUserName*/,
 	const eap_variable_data_c * const /*aUserPassword*/ )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password()" )));
 	return eap_status_not_supported;
-	}
+}
 
 // ================= TTLS-PAP public new =======================
 
@@ -10994,13 +11270,12 @@
 // eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword()
 // ------------------------------------------------------------------------
 //    
-eap_status_e
-eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(
+eap_status_e eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(
 	eap_status_e aStatus,
 	const TDesC8& aUserNameUtf8,
 	const TDesC8& aPasswordUtf8 )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword()" )));
 	
 	eap_status_e retStatus = aStatus;
 	eap_status_e tmpStatus = eap_status_ok;
@@ -11022,15 +11297,14 @@
 		}
 	if ( m_tls_am_partner == NULL )
 		{
-		DEBUG( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword() \
-			ERROR: m_tls_am_partner is NULL." );
+		EAP_TRACE_DEBUG_SYMBIAN((_L( "ERROR: eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(): m_tls_am_partner is NULL." )));
         return eap_status_process_general_error;
 		}
 	retStatus = m_tls_am_partner->
 	    complete_query_ttls_pap_username_and_password(
 		    &userNameUtf8, &passwordUtf8, retStatus );	
 	return retStatus;
-	} // eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(
+} // eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(
 
 
 // ------------------------------------------------------------------------
@@ -11039,14 +11313,14 @@
 //    
 eap_status_e
 eap_am_type_tls_peap_symbian_c::ConvertAmErrorToEapolError( TInt aErr )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::ConvertAmErrorToEapolError()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::ConvertAmErrorToEapolError()" )));
     if ( m_am_tools )
     	{
     	return m_am_tools->convert_am_error_to_eapol_error( aErr );
     	}
 	return eap_status_process_general_error;
-	}
+}
 
 
 // ------------------------------------------------------------------------
@@ -11060,8 +11334,8 @@
 //| EAP_TLS_PEAP_ttls_pap_last_full_authentication_time	| BIGINT		   	| KTTLSPAPLastFullAuthTime	                             |//
 void eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL(
 	TTtlsPapDbInfo& aOutDbInfo )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()" )));
 	
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
 	TPtr sqlStatement = buf->Des();
@@ -11098,12 +11372,35 @@
 			// columns reading	
 			aOutDbInfo.iUsrPwdInfo.iPasswordPromptEnabled = view.ColUint(
 				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_password_prompt_literal ) );
-			
-			aOutDbInfo.iUsrPwdInfo.iUserName = view.ColDes(
-				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_username_literal ) );
-			
-			aOutDbInfo.iUsrPwdInfo.iPassword = view.ColDes(
-				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_password_literal ) );
+
+			{
+				TPtrC username = view.ColDes(
+					colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_username_literal ) );
+
+				aOutDbInfo.iUsrPwdInfo.iUserName.Copy(username); 
+
+				EAP_TRACE_DATA_DEBUG(
+					m_am_tools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL(): iUserName"),
+					aOutDbInfo.iUsrPwdInfo.iUserName.Ptr(),
+					aOutDbInfo.iUsrPwdInfo.iUserName.Size()));
+			}
+			
+			{
+				TPtrC password = view.ColDes(
+					colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_password_literal ) );
+
+				 aOutDbInfo.iUsrPwdInfo.iPassword.Copy(password);
+
+
+				EAP_TRACE_DATA_DEBUG(
+					m_am_tools,
+					TRACE_FLAGS_DEFAULT,
+					(EAPL("eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL(): iPassword"),
+					aOutDbInfo.iUsrPwdInfo.iPassword.Ptr(),
+					aOutDbInfo.iUsrPwdInfo.iPassword.Size()));
+			}
 			
 			aOutDbInfo.iMaxSessionTime = view.ColInt64(
 				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_max_session_validity_time_literal ) );
@@ -11116,7 +11413,7 @@
 	CleanupStack::PopAndDestroy( &view ); // Close view.
 	CleanupStack::PopAndDestroy( buf ); // Delete buf.
 	
-	} // eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()
+} // eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()
 
 
 // ------------------------------------------------------------------------
@@ -11130,8 +11427,8 @@
 //| EAP_TLS_PEAP_ttls_pap_last_full_authentication_time	| BIGINT		   	| KTTLSPAPLastFullAuthTime	                             |//
 void eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL(
 	const TTtlsPapDbInfo& aInDbInfo )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()" )));
 	
 	
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
@@ -11139,17 +11436,24 @@
 	
 	// Query all the relevant parameters
 	_LIT( KSQLQuery,
-		"SELECT %S, %S, %S, %S, %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d" );
-	sqlStatement.Format( KSQLQuery,
+		"SELECT %S, %S, %S, %S, %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d" );
+
+	sqlStatement.Format(
+		KSQLQuery,
 		&cf_str_EAP_TLS_PEAP_ttls_pap_password_prompt_literal,           // select´
 		&cf_str_EAP_TLS_PEAP_ttls_pap_username_literal,                  // select
 		&cf_str_EAP_TLS_PEAP_ttls_pap_password_literal,                  // select
 		&cf_str_EAP_TLS_PEAP_ttls_pap_max_session_validity_time_literal, // select
 		&KTTLSPAPLastFullAuthTime,                                       // select
 		&KTtlsDatabaseTableName,                                         // from
-		&KServiceType, m_index_type,                                     // where %S=%d
-		&KServiceIndex, m_index,                                         // where %S=%d
-		&KTunnelingType, m_tunneling_vendor_type );                      // where %S=%d
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType,
+		m_tunneling_type.get_vendor_type());
 	
 	RDbView view;
 	// Evaluate view
@@ -11171,10 +11475,24 @@
 			cf_str_EAP_TLS_PEAP_ttls_pap_password_prompt_literal ),
 			aInDbInfo.iUsrPwdInfo.iPasswordPromptEnabled );
 
+		EAP_TRACE_DATA_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL(): iUserName" ),
+			aInDbInfo.iUsrPwdInfo.iUserName.Ptr(),
+			aInDbInfo.iUsrPwdInfo.iUserName.Size() ) );
+
 		view.SetColL( colSet->ColNo(
 			cf_str_EAP_TLS_PEAP_ttls_pap_username_literal ),
 			aInDbInfo.iUsrPwdInfo.iUserName );
 
+		EAP_TRACE_DATA_DEBUG(
+			m_am_tools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL(): iPassword" ),
+			aInDbInfo.iUsrPwdInfo.iPassword.Ptr(),
+			aInDbInfo.iUsrPwdInfo.iPassword.Size() ) );
+
 		view.SetColL( colSet->ColNo(
 			cf_str_EAP_TLS_PEAP_ttls_pap_password_literal ),
 			aInDbInfo.iUsrPwdInfo.iPassword );
@@ -11195,7 +11513,7 @@
 	CleanupStack::PopAndDestroy( &view ); // Close view.
 	CleanupStack::PopAndDestroy( buf ); // Delete buf.
 	
-	} // eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()
+} // eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()
 
 
 // ------------------------------------------------------------------------
@@ -11203,21 +11521,28 @@
 // ------------------------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::SetTtlsPapColumnToNullL( const TDesC& aColName )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::SetColumnNullL()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::SetColumnNullL()" )));
 
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
 	TPtr sqlStatement = buf->Des();
 	
 	// Query all the relevant parameters
 	_LIT( KSQLQuery,
-		"SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d" );
-	sqlStatement.Format( KSQLQuery,
+		"SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d AND %S=%d" );
+
+	sqlStatement.Format(
+		KSQLQuery,
 		&aColName,                                  // select´
 		&KTtlsDatabaseTableName,                    // from
-		&KServiceType, m_index_type,                // where %S=%d
-		&KServiceIndex, m_index,                    // where %S=%d
-		&KTunnelingType, m_tunneling_vendor_type ); // where %S=%d
+		&KServiceType,
+		m_index_type,
+		&KServiceIndex,
+		m_index,
+		&KTunnelingTypeVendorId,
+		m_tunneling_type.get_vendor_id(),
+		&KTunnelingType,
+		m_tunneling_type.get_vendor_type());
 	
 	RDbView view;
 	// Evaluate view
@@ -11245,7 +11570,7 @@
 	CleanupStack::PopAndDestroy( &view ); // Close view.
 	CleanupStack::PopAndDestroy( buf ); // Delete buf.
 	
-	} // eap_am_type_tls_peap_symbian_c::SetTtlsPapColumnToNullL()
+} // eap_am_type_tls_peap_symbian_c::SetTtlsPapColumnToNullL()
 
 
 // ================= TTLS-PAP private =======================
@@ -11255,8 +11580,8 @@
 // ------------------------------------------------------------------------
 //
 TBool eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()" )));
 
 	TTtlsPapDbInfo dbInfo;
 	TInt err = KErrNone;
@@ -11266,8 +11591,7 @@
 	
     if 	( err != KErrNone )
         {
-        DEBUG1( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL() ERROR: \
-        	Leave happened, err=%d.", err );
+        EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL(): Leave happened, err=%d."), err ));
         retValue = EFalse;
         }
     else
@@ -11278,8 +11602,7 @@
 			// one read from configuration file.
 		    if( dbInfo.iMaxSessionTime == 0 )
 	            {
-	            DEBUG( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL() \
-	                	Using max TTLS PAP session validity time from config file." );
+	            EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL() Using max TTLS PAP session validity time from config file." )));
 			
 				// use value from config file
 				dbInfo.iMaxSessionTime = iEapTtlsPapMaxSessionConfigTime;
@@ -11290,7 +11613,7 @@
 		    }
     	}	
 	return retValue;
-	}  // eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
+}  // eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
 
 
 // ------------------------------------------------------------------------
@@ -11300,8 +11623,8 @@
 TBool eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity(
 	const TInt64& aInMaxSessionTime,
 	const TInt64& aInLastFullAuthTime )
-	{
-	DEBUG( "eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity()" );
+{
+	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity()" )));
 	
 	// Get the current time.
 	TTime currentTime;
@@ -11371,7 +11694,93 @@
 		
 		return EFalse;	
 	    }
-	} // eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity
-
+} // eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity
+
+//--------------------------------------------------
+#if defined(USE_FAST_EAP_TYPE)
+
+TInt eap_am_type_tls_peap_symbian_c::CreateMMETelConnectionL()
+{
+    EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Creating MMETel connection.\n")));
+
+    TInt errorCode = KErrNone;
+    
+    // MMETel need to be connected only once.    
+    if( !iMMETELConnectionStatus )
+    {
+        RTelServer::TPhoneInfo phoneInfo;
+        TInt phoneCount = 0;
+
+        // Connect to ETel server
+        User::LeaveIfError( iServer.Connect() );    
+        
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Connected to ETel server.\n")));    
+
+        // This function loads an ETel TSY module, mmtsy.
+        errorCode = iServer.LoadPhoneModule( KMmTsyModuleName );    
+        
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Loaded phone module.\n")));     
+        
+        if ( errorCode != KErrNone && errorCode != KErrAlreadyExists )
+        {
+            User::Leave( errorCode );
+        }
+
+        iServer.SetExtendedErrorGranularity( RTelServer::EErrorExtended );
+
+        // This function retrieves the total number of phones supported by all 
+        // the currently loaded ETel (TSY) modules.
+        User::LeaveIfError( iServer.EnumeratePhones( phoneCount ) );    
+        
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Number of phones supported by the loaded ETel = %d.\n"), phoneCount));
+        
+        // This function retrieves information associated with the specified phone
+        while ( ( phoneCount-- ) && ( phoneInfo.iName != KMmTsyPhoneName ) ) 
+        { 
+            User::LeaveIfError( iServer.GetPhoneInfo( phoneCount, phoneInfo ) );        
+            
+            EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Got phone info.\n")));
+        } 
+
+        // This function opens a phone subsession by name. ("DefaultPhone").
+        User::LeaveIfError( iPhone.Open( iServer, phoneInfo.iName ) );  
+        
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Opened phone subsession.\n")));
+        
+        // MMETel connected and the phone module loaded fine.   
+        iMMETELConnectionStatus = ETrue;    
+    }
+    else
+    {
+        // MMETel already connected.
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("MMETel connected once already.\n")));
+    }
+        
+    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+    
+    return errorCode;   
+}
+
+//--------------------------------------------------
+
+void eap_am_type_tls_peap_symbian_c::DisconnectMMETel()
+{
+    if( iMMETELConnectionStatus )
+    {
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Closing RMobilePhone and MMETEL.\n")));
+        
+        iPhone.Close();
+        iServer.Close(); // Phone module is unloaded automatically when RTelServer session is closed
+        
+        iMMETELConnectionStatus = EFalse;
+    }
+    else
+    {
+        EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("RMobilePhone and MMETEL already closed.\n")));      
+    }   
+}
+#endif
+//--------------------------------------------------
 
 // End of file.