eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/eap_am_type_tls_peap_symbian.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
parent 45 bad0cc58d154
--- a/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
+++ b/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/eap_am_type_tls_peap_symbian.cpp	Wed Sep 01 12:23:57 2010 +0100
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 256 %
+* %version: 253 %
 */
 
 // This is enumeration of EAPOL source code.
@@ -53,7 +53,7 @@
 #include <asn1enc.h>
 #include "EapTlsPeapTimerValues.h"
 #include "eap_state_notification.h"
-#include "EapTraceSymbian.h"
+#include "eap_am_trace_symbian.h"
 #include "eap_automatic_variable.h"
 
 #if defined(USE_FAST_EAP_TYPE)
@@ -65,49 +65,36 @@
 #include "eap_tlv_header.h"
 #include "eap_tlv_message_data.h"
 #endif
-#include <utf.h>
-
+
+#include "eap_ttls_pap_active.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(
@@ -129,7 +116,8 @@
 #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)
@@ -150,7 +138,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)
@@ -160,7 +148,6 @@
 	  , 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)
@@ -189,98 +176,101 @@
 	, 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)
-
-	, iMMETELConnectionStatus(false)
+	, m_notifier_data_from_user(NULL)
+	, m_notifier_data_pckg_from_user(NULL)
 	, 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 )
-
-
-
-  , iPacStoreDeviceSeed(0)
-
-	, iEapAuthNotifier(0)	
-
+	
+	
+	
+    , iEapTtlsPapMaxSessionConfigTime( 0 )
+    , iEapTtlsPapActive( NULL )
+    
 {
 	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
-	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;
-	}
+	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 defined (USE_FAST_EAP_TYPE)
-	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;
-	}
+			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;
 #endif // #if defined (USE_FAST_EAP_TYPE)			
-	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;
+		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;
+			}
 	}
 
 	if (receive_network_id != 0
@@ -320,7 +310,7 @@
 		&& aEapType != eap_type_ttls
 #endif // #if defined(USE_TTLS_EAP_TYPE)
 
-	    && aEapType != eap_expanded_type_ttls_plain_pap.get_type()
+	    && aEapType != eap_type_ttls_plain_pap
 		
 #if defined (USE_FAST_EAP_TYPE)
 		&& aEapType != eap_type_fast
@@ -358,10 +348,6 @@
 //
 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);
 
@@ -386,13 +372,30 @@
 		EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ConstructL Opened PAC store")));		
 	}
-	m_info_array.ResetAndDestroy();
+	m_info_array.Reset();
 	
 #endif	// End: #ifdef USE_FAST_EAP_TYPE
 #endif // End: 	#ifdef USE_PAC_STORE
 
-	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);
+#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	
+	
 
 }
 
@@ -421,27 +424,48 @@
 			m_cert_if->Cancel();
 		}		
 	}
-
-	if (iEapAuthNotifier != 0)
-		{
-		iEapAuthNotifier->Cancel();
-		}
-
-	
-
-	
-#if defined(USE_FAST_EAP_TYPE)
-
-
-
-#endif 
+	
+	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 (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);
@@ -458,28 +482,36 @@
 				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 defined(USE_FAST_EAP_TYPE)
-
+		if ( iEapFastActiveWaitNote )
+			{
+			if ( iEapFastActiveWaitNote->IsActive() )
+				{
+				iEapFastActiveWaitNote->Cancel();
+				}
+			delete iEapFastActiveWaitNote;
+			iEapFastActiveWaitNote = NULL;
+			}
+
+		if ( iEapFastActiveNotes )
+			{
+			if ( iEapFastActiveNotes->IsActive() )
+				{
+			    iEapFastActiveNotes->Cancel();
+				}
+			delete iEapFastActiveNotes;
+			iEapFastActiveNotes = NULL;
+			}
 #endif // #if defined(USE_FAST_EAP_TYPE)
 	
 
-	m_allowed_server_certs.ResetAndDestroy();
-	m_allowed_ca_certs.ResetAndDestroy();			
+	m_allowed_server_certs.Reset();
+	m_allowed_ca_certs.Close();			
 	m_allowed_cipher_suites.Close();			
-	m_allowed_user_certs.ResetAndDestroy();			
+	m_allowed_user_certs.Reset();			
 
 #ifdef USE_PAC_STORE
 #ifdef USE_FAST_EAP_TYPE
@@ -489,7 +521,13 @@
 		iPacStoreDb->Close();
 	}
 	
-	m_info_array.ResetAndDestroy();
+	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();
 
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L(" eap_am_type_tls_peap_symbian_c::shutdown - Arrays cleared")));
@@ -513,6 +551,7 @@
 	return eap_status_ok;
 }
 
+
 //--------------------------------------------------
 
 EAP_FUNC_EXPORT eap_am_type_tls_peap_symbian_c::~eap_am_type_tls_peap_symbian_c()
@@ -532,14 +571,26 @@
 	m_database.Close();
 	m_session.Close();
 
-	delete m_notifier_data_to_user;
-	delete m_notifier_data_pckg_to_user;
+#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_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();
@@ -549,306 +600,24 @@
 			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 // #ifdef USE_PAC_STORE	
-
-	delete iEapAuthNotifier;
-	iEapAuthNotifier = 0;
-
+#endif	// End: #ifdef USE_PAC_STORE	
+	
 	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);		
@@ -858,17 +627,41 @@
 		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)
@@ -908,11 +701,10 @@
 				0, 
 				eap_status_process_general_error);			
 			return;
-			
 		default:
 			return;
 		}
-	} // (iStatus.Int() != KErrNone)
+	}
 
 	if (m_state == EHandlingIdentityQuery
 		|| m_state == EHandlingChainQuery)
@@ -931,7 +723,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;
@@ -950,7 +742,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)
 		{
@@ -990,124 +782,102 @@
 			}
 		}
 	}
+	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()
 {
@@ -1119,12 +889,18 @@
 	{
 		m_cert_if->Cancel();		
 	}
-	if (iEapAuthNotifier != 0)
-		{
-		iEapAuthNotifier->Cancel();
-		}
-
-
+
+	if ( iEapTtlsPapActive )
+		{
+		if ( iEapTtlsPapActive->IsActive() )
+			{
+			EAP_TRACE_DEBUG_SYMBIAN(
+				( _L( " eap_am_type_tls_peap_symbian_c::DoCancel() \
+				Cancelling iEapTtlsPapActive." ) ) );
+			iEapTtlsPapActive->Cancel();
+			}
+		}
+	
 #if defined(USE_FAST_EAP_TYPE)
 
 	m_partner->cancel_timer(
@@ -1143,6 +919,23 @@
 			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)
 	
@@ -1152,6 +945,7 @@
 //--------------------------------------------------
 
 //
+
 eap_status_e eap_am_type_tls_peap_symbian_c::SaveManualIdentityL( 
 	const TBool use_manual_username,
 	TDesC& manual_username,
@@ -1161,11 +955,11 @@
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
 	
 	// Validate length.
-	if(manual_username.Length() > KMaxUsernameLengthInDB
-		|| manual_realm.Length() > KMaxRealmLengthInDB)
+	if(manual_username.Length() > KMaxManualUsernameLengthInDB
+		|| manual_realm.Length() > KMaxManualRealmLengthInDB)
 	{
 		// 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: manual_username=%d, manual_realm=%d\n"),
+		EAP_TRACE_DEBUG_SYMBIAN((_L("eap_am_type_tls_peap_symbian_c::SaveManualIdentityL: Too long username or realm. Length: UN=%d, Realm=%d\n"),
 		manual_username.Length(), manual_realm.Length()));
 		
 		User::Leave(KErrArgument);
@@ -1176,19 +970,10 @@
 
 	RDbView view;
 
-	_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());
+	_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);
 	
 	User::LeaveIfError(view.Prepare(m_database, TDbQuery(sqlStatement), TDbWindow::EUnlimited));	
 	CleanupClosePushL(view);
@@ -1266,10 +1051,9 @@
 //
 void eap_am_type_tls_peap_symbian_c::SendErrorNotification(
 	const eap_status_e aError )
-{
+	{
 	send_error_notification( aError );
-}
-
+	}
 //--------------------------------------------------
 
 #if defined(USE_FAST_EAP_TYPE)
@@ -1284,15 +1068,19 @@
 	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()
@@ -1301,7 +1089,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 )
@@ -1325,14 +1113,15 @@
   		        m_pending_operation );
   		} 
 	return m_eap_fast_completion_status;
-}
+	}
+
 
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
 //--------------------------------------------------
 
 //
-EAP_FUNC_EXPORT void eap_am_type_tls_peap_symbian_c::notify_configuration_error(
+void eap_am_type_tls_peap_symbian_c::notify_configuration_error(
 	const eap_status_e configuration_status)
 {
 	if (m_is_client == true)
@@ -1409,7 +1198,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.
@@ -1435,7 +1224,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.
@@ -1462,7 +1251,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.
@@ -1485,6 +1274,8 @@
 		
 		)
 	{
+#ifdef USE_EAP_EXPANDED_TYPES
+
 		TRAPD(err, EapTlsPeapUtils::GetTunnelingExpandedEapDataL(
 			m_database,
 			m_am_tools,
@@ -1494,12 +1285,24 @@
 			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.
@@ -1564,28 +1367,6 @@
 
 	//----------------------------------------------------------
 
-	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);
@@ -1607,6 +1388,75 @@
 	
 	//----------------------------------------------------------
 
+#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);
 
@@ -1682,7 +1532,7 @@
 	{
 		eap_variable_data_c use_session_ticket(m_am_tools);
 
-		eap_status_e status = type_configure_read(
+		eap_status_e status = m_partner->read_configure(
 			cf_str_EAP_TLS_PEAP_use_session_ticket.get_field(),
 			&use_session_ticket);
 		if (status == eap_status_ok
@@ -1753,48 +1603,60 @@
 		
 		eap_status_e status(eap_status_ok);
 
-		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())
-		{
+		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:
+			{
 			// read PAP session time
-			status = type_configure_read(
+			status = m_partner->read_configure(
 				cf_str_EAP_TLS_PEAP_ttls_pap_max_session_validity_time.get_field(),
 				&sessionTimeFromFile );
-		}
+			}
+			break;
+			
 #if defined(USE_FAST_EAP_TYPE)
-		else if (m_current_eap_type == eap_type_fast)
-		{
-			status = type_configure_read(
-				cf_str_EAP_FAST_max_session_validity_time.get_field(),
-				&sessionTimeFromFile);
-		}
+		case eap_type_fast:
+			{
+				status = m_partner->read_configure(
+					cf_str_EAP_FAST_max_session_validity_time.get_field(),
+					&sessionTimeFromFile);
+			}
+			break;
 #endif
-		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()));
-		}
+			
+		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));
+			}
+		}	
 
 		// set m_max_session_time
 		if (status == eap_status_ok
@@ -1895,130 +1757,88 @@
 	
 	status = eap_status_ok;
 
-	if (m_use_automatic_ca_certificate == false)
-	{
-		if (m_allowed_ca_certs.Count() == 0)
-		{
-			// needed because of nonworking wrong settings
+	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);
-			}			
-		}
-		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()));
-	}
-	
-
+		{
+			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);
+		}			
+	}
+	
 	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()));
-	}
 
 	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
@@ -2029,21 +1849,19 @@
 	
 	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);
 	
@@ -2052,8 +1870,7 @@
 
 	TempUserName.Copy(KTempUserName);
 	
-  HBufC8* buf = HBufC8::NewLC(KMaxNotifItemLength);
-
+	HBufC8* buf = HBufC8::NewLC(KIdentityFieldLength);
 	TPtr8 bufPtr = buf->Des();
 
 	HBufC8* tempUserBuf8 = HBufC8::NewLC(KMacAddressLength);
@@ -2133,13 +1950,13 @@
 	m_use_manual_username = true;
 	
 	return status;
-}
+	}
 
 #endif // #if defined(USE_FAST_EAP_TYPE)
 
 //--------------------------------------------------
 
-EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::reset()
+eap_status_e eap_am_type_tls_peap_symbian_c::reset()
 {
 
 	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
@@ -2173,8 +1990,6 @@
 	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)
@@ -2280,7 +2095,6 @@
 	// 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, 
@@ -2317,7 +2131,6 @@
 	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)
@@ -2580,8 +2393,6 @@
 	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)
 {
@@ -2771,8 +2582,6 @@
 	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,
@@ -2876,8 +2685,6 @@
 	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)
@@ -3079,6 +2886,9 @@
 //--------------------------------------------------
 
 //
+//--------------------------------------------------
+
+//
 EAP_FUNC_EXPORT eap_status_e eap_am_type_tls_peap_symbian_c::timer_expired(
 	const u32_t id, void *data)
 {
@@ -3349,9 +3159,6 @@
 		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
@@ -3360,7 +3167,7 @@
 		|| m_current_eap_type == eap_type_fast
 #endif
 
-		|| m_current_eap_type == eap_expanded_type_ttls_plain_pap.get_type()
+		|| m_current_eap_type == eap_type_ttls_plain_pap
 	
 		)
 	{
@@ -3423,6 +3230,8 @@
 		{
 			// 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())
@@ -3440,35 +3249,108 @@
 			{
 				// 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:"),
-					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);			
-				}
+					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);			
+					}
 					
 				EAP_TRACE_DATA_DEBUG(
 					m_am_tools,
 					TRACE_FLAGS_DEFAULT,
 					(EAPL("EAP-PEAP or EAP-TTLS: Trying encapsulated EAP type:"),
-					m_enabled_tunneling_exp_eap_array[0]->GetValue().Ptr(),
-					m_enabled_tunneling_exp_eap_array[0]->GetValue().Length()));
-			}
-
+					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
+					
 			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
@@ -3497,28 +3379,34 @@
 				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_partner->read_configure(field, data);
+		status = m_am_tools->convert_am_error_to_eapol_error(err);
 	}
 
 	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,
@@ -3549,7 +3437,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 AND %S=%d");	
+	_LIT(KSQLQueryRow, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");	
 	
 #if defined(USE_FAST_EAP_TYPE)
 	
@@ -3559,62 +3447,44 @@
 	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(KFASTWarnADHPNoPAC) == 0)
-	   || (unicodeString.Compare(KFASTWarnADHPNoMatchingPAC) == 0)
-	   || (unicodeString.Compare(KFASTWarnNotDefaultServer) == 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(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,
-			&KTunnelingTypeVendorId,
-			m_tunneling_type.get_vendor_id(),
-			&KTunnelingType, 
-			m_tunneling_type.get_vendor_type());
-	}
+		sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_fast_special_table_name, 
+			&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);		
+	    }
 	else
-	{
-		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());
-	}
+	    {
+		sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_table_name, 
+			&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);		
+	    }
 	
 #else
 
-	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());
+	sqlStatement.Format(KSQLQueryRow, &unicodeString, &m_db_table_name, 
+		&KServiceType, m_index_type, &KServiceIndex, m_index, &KTunnelingType, m_tunneling_vendor_type);
 		
 #endif // End: #if defined(USE_FAST_EAP_TYPE)
-
+	
 	RDbView view;
 	User::LeaveIfError(view.Prepare(m_database, TDbQuery(sqlStatement), TDbWindow::EUnlimited));
 	CleanupClosePushL(view);
@@ -3690,10 +3560,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)
@@ -3730,21 +3600,9 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 	
-	_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());
-
+	_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);
 	// Evaluate view
 	RDbView view;
 	User::LeaveIfError(view.Prepare(m_database,TDbQuery(sqlStatement), TDbWindow::EUnlimited));
@@ -3772,8 +3630,6 @@
 	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,
@@ -3792,20 +3648,9 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 
-	_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());
+	_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);
 	
 	// Evaluate view
 	RDbView view;
@@ -3833,8 +3678,6 @@
 	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,
@@ -3853,20 +3696,9 @@
 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
 	TPtr sqlStatement = buf->Des();
 
-	_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());
+	_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);
 	
 	// Evaluate view
 	RDbView view;
@@ -3956,62 +3788,6 @@
 
 //--------------------------------------------------
 
-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()
 {
@@ -4024,18 +3800,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 &&
@@ -4081,8 +3857,7 @@
 			EAP_TRACE_DEBUG(
 				m_am_tools, 
 				TRACE_FLAGS_DEFAULT, 
-				(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()));
+				(EAPL("query_cipher_suites_and_previous_session(): No user or CA certificate. Read CA certificate.\n")));
 			
 			if (m_allowed_ca_certs.Count() != 0)
 			{		
@@ -4101,7 +3876,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.
@@ -4114,16 +3889,6 @@
 					}
 				}
 			} // 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)
 		{
@@ -4151,105 +3916,176 @@
 
 			certAlgorithm = public_key.AlgorithmId();				
 		}
-
-
-		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 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);
+			}
+		}
 		
 		if (is_session_valid())
 		{
@@ -4347,7 +4183,6 @@
 
 	// 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)
@@ -4356,7 +4191,6 @@
 			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)
 		{
@@ -4365,7 +4199,6 @@
 		}
 	}
 
-
 	status = get_tls_am_partner()->complete_query_cipher_suites_and_previous_session(
 		tls_session_type,
 		&cipher_suites,
@@ -4611,11 +4444,9 @@
 {
 	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()\n"),
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("TLS: %s: message_function: verify_certificate_chain_and_query_public_key()\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);
@@ -4637,20 +4468,15 @@
 	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)
 	{
@@ -4666,11 +4492,6 @@
 			|| (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);
@@ -4884,29 +4705,10 @@
 				}
 			}
 		}
-
 		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Server certificate realm verification OK.\n")));
 	}
-	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* chain = HBufC8::NewL(0);
 	HBufC8* temp;
 	eap_variable_data_c* cert;
 	
@@ -4926,61 +4728,50 @@
 	
 #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);
+		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()));					
 				
-				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();
-			}
-		}
+				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);
+		}
+
 #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)
 		{
@@ -4991,120 +4782,42 @@
 			}
 			m_peer_certificate = CX509Certificate::NewL(ptr);
 		}
-
-	} // 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")));
-
+		CleanupStack::Pop();
+	}
+	CleanupStack::PushL(chain);
 	TPtr8 certChain = chain->Des();
-	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);
-
+	m_cert_if->ValidateChainL(certChain, m_allowed_ca_certs);
+	
+	CleanupStack::PopAndDestroy();
 	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(
-	const CPKIXValidationResult * const aValidationResult,
-	const eap_status_e aStatus)
+	CPKIXValidationResult& aValidationResult, 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(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)));
-
+	
+	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));
 		result = eap_status_ok;
 	}
 	else
 	{
-		if (validationError == EDateOutOfRange)
+		if (aValidationResult.Error().iReason == EDateOutOfRange)
 		{
 			send_error_notification(eap_status_certificate_expired);
 			// Ignore error on purpose
@@ -5115,12 +4828,9 @@
 			// Ignore error on purpose			
 		}
 
-		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)));
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, 
+			(EAPL("ERROR: Certificate chain validation FAILED. Reason: %d\n"), 
+			aValidationResult.Error().iReason));
 			
 		result = eap_status_illegal_certificate;
 	}
@@ -5141,63 +4851,203 @@
 	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;
-
-	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-	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;
-}
-
+    {
+        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;
+    }
 #endif //#if defined(USE_EAP_CONFIGURATION_TO_SKIP_USER_INTERACTIONS)
 #endif
 
@@ -5222,8 +5072,7 @@
 
 	if (m_is_client)
 	{
-		// client
-		// Get the matching certificates. This function call is completed asyncronously by complete_get_matching_certificates() function call.
+		// Get the matching certificates
 		TRAPD(err, m_cert_if->GetMatchingCertificatesL(
 			m_allowed_user_certs, 
 			ETrue, 
@@ -5238,7 +5087,6 @@
 	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, 
@@ -5268,10 +5116,8 @@
 
 }
 
-//--------------------------------------------------
-
 void eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(
-	RPointerArray<EapCertificateEntry>& aMatchingCerts,
+	CArrayFixFlat<SCertEntry>& aMatchingCerts,
 	eap_status_e aStatus)
 {
 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -5292,39 +5138,17 @@
 
 		// 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.ResetAndDestroy();
-
-		for (TInt i = 0; i < aMatchingCerts.Count() && aMatchingCerts[i] != 0; i++)
-		{
-			EapCertificateEntry * const entry = aMatchingCerts[i]->Copy();
-			if (entry == 0)
+		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)
 			{
 				EAP_TRACE_DEBUG(
 					m_am_tools,
 					TRACE_FLAGS_DEFAULT,
-					(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));
+					(EAPL("ERROR: eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates -EHandlingIdentityQuery- Error=%d\n"),
+					err));
 			
 				get_am_partner()->complete_eap_identity_query(
 					0, // 0 because identity query failed
@@ -5335,8 +5159,6 @@
 					0, 
 					false, 
 					0);
-
-				delete entry;
 				
 				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
 				return;		
@@ -5378,60 +5200,35 @@
 				EAP_TRACE_DEBUG(
 					m_am_tools, 
 					TRACE_FLAGS_DEFAULT, 
-					(EAPL("eap_am_type_tls_peap_symbian_c::complete_get_matching_certificates(): no manual realm - no user cert. Get realm from CA certificate.\n")));
+					(EAPL("eap_am_type_tls_peap_symbian_c: 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)
 				{
-					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_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;	
 				}
-
 				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
 				return;
 			}
@@ -5443,14 +5240,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);	
@@ -5468,31 +5265,20 @@
 		
 		if (aMatchingCerts.Count() > 0)
 		{
-			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
+				m_allowed_user_certs.Reset();
+			
+				for (TInt i = 0; i < aMatchingCerts.Count(); i++)
 				{
-					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;					
-				} 
+					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;					
+					} 
 			}	
 		}
 
@@ -5501,18 +5287,10 @@
 			// 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);
 			}
 
@@ -5535,12 +5313,10 @@
 	{
 		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()
 {
@@ -5555,7 +5331,7 @@
 	eap_array_c<eap_variable_data_c> certificate_authorities(m_am_tools);
 	eap_variable_data_c ca_dn(m_am_tools);
 	
-	// TEST CODE: Implementation do not support yet a proper CA DN.
+	// TEST CODE: This is not a proper CA DN.
 	_LIT8(KTestCA, "ca.eapsim.foo");
 	status = ca_dn.add_data(KTestCA().Ptr(), KTestCA().Size());
 	if (status != eap_status_ok)
@@ -5745,13 +5521,13 @@
 		subject_identity.get_data_length(),
 		subject_identity.get_data_length());		
 
-	status = subject_realm->set_copy_of_buffer((ptr.Mid(offset + KOffsetCorrection)).Ptr(), ptr.Length() - offset - KOffsetCorrection);
+	status = subject_realm->set_copy_of_buffer((ptr.Mid(offset + 1)).Ptr(), ptr.Length() - offset - 1);
 	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));	
@@ -5766,10 +5542,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 + KOffsetCorrection)).Ptr(), ptr2.Length() - offset - KOffsetCorrection);
+	status = issuer_realm->set_copy_of_buffer((ptr2.Mid(offset + 1)).Ptr(), ptr2.Length() - offset - 1);
 	if (status != eap_status_ok)
 	{
 		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
@@ -5782,6 +5558,7 @@
 
 //--------------------------------------------------
 
+
 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,
@@ -5874,7 +5651,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(
@@ -5954,7 +5731,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.GetSubjectKeyId(), *data));
+	TRAP(err, m_cert_if->DecryptL(m_own_certificate_info.iSubjectKeyId, *data));
 
 	if (err != KErrNone)
 	{
@@ -6016,7 +5793,6 @@
 }
 
 //--------------------------------------------------
-
 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)
 {
@@ -6075,7 +5851,7 @@
 		signature_length = public_key_data.Size();
 	}
 
-	TRAP(err, m_cert_if->SignL(m_own_certificate_info.GetSubjectKeyId(), hash, signature_length));
+	TRAP(err, m_cert_if->SignL(m_own_certificate_info.iSubjectKeyId, hash, signature_length));
 	if (err != KErrNone)
 	{
 		status = m_am_tools->convert_am_error_to_eapol_error(err);
@@ -6091,9 +5867,7 @@
 	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)
 {
@@ -6114,8 +5888,6 @@
 	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)
 {
@@ -6277,7 +6049,7 @@
 	}
 	else
 	{
-		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: Verify with private key failed.\n")));
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: Signing 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);
 	}
@@ -6294,8 +6066,6 @@
 	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); 
@@ -6353,7 +6123,6 @@
 //--------------------------------------------------
 // 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 */,
@@ -6375,32 +6144,31 @@
 	
 	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-type=0xfe%06x%08x\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 vendor ID=%x, type=%x\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;
 		
-		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));
-		}
-
+		// 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);
+		
 		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]->GetValue().Ptr(),
-	 		m_enabled_tunneling_exp_eap_array[i]->GetValue().Size()));	 			
+	 		m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType.Ptr(),
+	 		m_enabled_tunneling_exp_eap_array[i]->iExpandedEAPType.Size()));	 			
 		
 		if (eap_type == expEAPTmp)
 		{
@@ -6410,7 +6178,35 @@
 		}
 	}
 
+#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);
 }
 
@@ -6427,11 +6223,15 @@
 
 	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, 
@@ -6442,27 +6242,25 @@
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
 			(EAPL("Enabled expanded EAP type:"),
-			m_enabled_tunneling_exp_eap_array[i]->GetValue().Ptr(),
-			m_enabled_tunneling_exp_eap_array[i]->GetValue().Size()));
+			tmpExpEAP.Ptr(),
+			tmpExpEAP.Size()));
 
 		// This is for one expanded EAP type (for the above one).
 		eap_type_value_e * expandedEAPType = new eap_type_value_e();
-		
-		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)
-		{
+				
+		// 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_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));
-		}
-
-		automatic_expandedEAPType.do_not_free_variable();
+			return EAP_STATUS_RETURN(m_am_tools, status);
+		}
 
 		// Add EAP-type to list.		
 		status = eap_type_list->add_object(expandedEAPType, true);
@@ -6478,19 +6276,56 @@
 		EAP_TRACE_DEBUG(
 			m_am_tools,
 			TRACE_FLAGS_DEFAULT,
-			(EAPL("get_eap_type_list():added EAP-type=0xfe%06x%08x=%s\n"),
-			expandedEAPType->get_vendor_id(),
+			(EAPL("get_eap_type_list():added EAP-type=0x%08x=%s\n"),
 			expandedEAPType->get_vendor_type(),
-			eap_header_string_c::get_eap_type_string(*expandedEAPType)));			
+			eap_string.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);
@@ -6498,7 +6333,6 @@
 	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)
 {
@@ -6537,10 +6371,19 @@
 	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);
@@ -6556,8 +6399,6 @@
 	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);
@@ -6787,74 +6628,73 @@
 
 	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=0xfe%06x%08x\n"),
-		m_current_eap_type.get_vendor_id(),
-		m_current_eap_type.get_vendor_type()));
+		EAPL("eap_am_type_tls_peap_symbian_c::is_session_valid - m_current_eap_vendor_type=%d \n"),
+		m_current_eap_vendor_type));
 
 	TPtrC maxSessionTimeString;
 	TPtrC lastFullAuthTimeString;
 
-	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);
-	}
+	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 defined(USE_FAST_EAP_TYPE)		
-	else if (m_current_eap_type == eap_type_fast)
-	{
-		maxSessionTimeString.Set(cf_str_EAP_FAST_max_session_validity_time_literal);
-		lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
-	}
+	case eap_type_fast:
+		{
+			maxSessionTimeString.Set(cf_str_EAP_FAST_max_session_validity_time_literal);
+			lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
+		}
+		break;
 #endif
-	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.
-	}
+		
+	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.
+		}
+	}	
 
 	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 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());
+	_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);
 
 	RDbView view;
 	// Evaluate view
@@ -6966,68 +6806,65 @@
 	
 	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=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()));
+		(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));	
 
 	TPtrC lastFullAuthTimeString;
 
-	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())
-	{
+	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:
+		{
 		lastFullAuthTimeString.Set( KTTLSPAPLastFullAuthTime );
-	}
+		}
+		break;
+
 #if defined(USE_FAST_EAP_TYPE)
-	else if (m_current_eap_type == eap_type_fast)
-	{
-		lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
-	}
+	case eap_type_fast:
+		{
+			lastFullAuthTimeString.Set(KFASTLastFullAuthTime);
+		}
+		break;
 #endif
-	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);
-	}
+		
+	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);
+		}
+	}	
 
 	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 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());
+	_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);
 
 	RDbView view;
 	// Evaluate view
@@ -7035,7 +6872,7 @@
 	CleanupClosePushL(view);
 	User::LeaveIfError(view.EvaluateAll());
 	
-	// Get the first (and only) row for update.
+	// Get the first (and only) row for updation.
 	view.FirstL();
 	view.UpdateL();
 	
@@ -7152,9 +6989,9 @@
 }
 
 #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(
 	const eap_fast_pac_store_pending_operation_e in_pending_operation,
@@ -7209,7 +7046,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()));
@@ -7236,7 +7073,7 @@
 			(A_IDPtr.Ptr()),
 			(in_pac_attribute_A_ID->get_data_length())));
 
- 	if (A_ID_infoPtr.Size()>=KMaxNotifItemLength)
+ 	if (A_ID_infoPtr.Size()>KMaxEapFastNotifierBufLength)
 	{
   		CleanupStack::PopAndDestroy(3); // A_ID, A_ID_info
   		status = m_am_tools->convert_am_error_to_eapol_error(KErrArgument);
@@ -7244,42 +7081,41 @@
  		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
  		return EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
 	}
- 
-    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;
-  		}
- 
- 
+
+ 	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;	
+ 		}
 
  	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,
@@ -7767,88 +7603,84 @@
 					}		
 				}
 				
-				m_info_array.ResetAndDestroy();
+				TInt count = 0;
+				
+				m_info_array.Reset();
 					
 				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()));				
 				
-				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()));					
-						}
+				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;
+					}					
 							
-					delete m_info_array[first_index];
-					m_info_array.Remove(first_index);
-					
-		
+					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++;
 					} // End: while
 					
 				
@@ -7899,41 +7731,14 @@
 
 						if(iPacStoreDb->IsMasterKeyPresentL())
 							{
-				    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);
-
-
+							m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+								EEapFastNotifierPacStorePwQuery, ETrue );
 							}
 						else
 							{
 							m_state =  EMasterkeyQuery; 
-					    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);
-
+				        	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+				        		EEapFastNotifierCreateMasterkeyQuery, ETrue );
 							}
 
 						break;
@@ -7997,7 +7802,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(
-				    	iPacStoreDeviceSeed );
+				    	iPacStoreDb->GetSeed() );
 					if ( m_eap_fast_completion_status != eap_status_ok )
 					    {
 					    EAP_TRACE_DEBUG_SYMBIAN(
@@ -8243,21 +8048,9 @@
 
 					m_both_asked++;
 
-			    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);
-
+					m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+								EEapFastNotifierPacFilePwQuery, ETrue );
+					
 					if (m_eap_fast_completion_status != eap_status_ok)
 						{
 						(void) EAP_STATUS_RETURN(m_am_tools, m_eap_fast_completion_status);
@@ -8283,14 +8076,9 @@
 			} // End: switch(pacStoreDataRefType)			
 		}
 	} // for ()
-
 	if (m_both_asked)
-	{
 		m_eap_fast_completion_status = eap_status_pending_request;
-	}
-
-	m_info_array.ResetAndDestroy();
-
+	m_info_array.Reset();
 	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));			
@@ -8490,10 +8278,18 @@
 						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:
 					{
-						//These are not saved anywhere.
+						//This is not saved anywhere.
 						break;		
 					}		
 					case eap_pac_store_data_type_PAC_store_group_reference:
@@ -8683,12 +8479,10 @@
 	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 );
 
@@ -8761,32 +8555,21 @@
 				(_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,
@@ -8812,7 +8595,7 @@
 	CleanupStack::PopAndDestroy(ref); 
 	CleanupStack::PopAndDestroy(buf); 
 	
-}
+	}
 
 
 // ---------------------------------------------------------
@@ -8820,7 +8603,8 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::ContinueInitializePacStore()
-{
+
+	{
 	EAP_TRACE_DEBUG_SYMBIAN(
 			(_L("eap_am_type_tls_peap_symbian_c::ContinueInitializePacStore()")));
 
@@ -8854,7 +8638,7 @@
 			0,
 			1);
 
-}
+	}
 
 //--------------------------------------------------
 
@@ -8967,8 +8751,6 @@
 	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()
 {
@@ -8994,7 +8776,9 @@
 
 //--------------------------------------------------
 
-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 )
 {
@@ -9035,7 +8819,7 @@
 		    	    }
         	    }
 		    // asynch. call, return immediately
-		    CreateDeviceSeedAsync();
+		    iPacStoreDb->CreateDeviceSeedAsynch();
 		    }
     	else
     		{
@@ -9061,121 +8845,125 @@
 // 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 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);
-		}
-	}
-
+	
+	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;
+	
 	if ( pac_type == eap_fast_pac_type_tunnel_pac
-		 && 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);
-		}
-	}
+		 &&
+		 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 );
+		}
 	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 )
-	{
-		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);
-		}
-	}
-
-
-
+		&&
+		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 ) );
+		}
 	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;
-		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 )
+		{
+	    // 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 )
 
 	return status;
-}
+	}
 
 #endif //#if defined(USE_FAST_EAP_TYPE)
 
-//--------------------------------------------------
-
 #ifdef USE_PAC_STORE
 	
 void eap_am_type_tls_peap_symbian_c::GetPacStoreDbDataL(
@@ -9446,11 +9234,76 @@
 
 //--------------------------------------------------
 
-#ifdef USE_FAST_EAP_TYPE
+#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;
+}
+
 //--------------------------------------------------
 
 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;	
@@ -9514,12 +9367,10 @@
 		(_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")));
@@ -9614,39 +9465,25 @@
 	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")));					
 
@@ -9665,7 +9502,7 @@
 
 			directoryEmpty = false;
 
-			while( fileCounter < files->Count())
+			while( fileCounter < files->Count() || (!FileFound))
 				{
 				if (!((*files)[fileCounter].IsDir()))
 					{
@@ -9708,6 +9545,8 @@
 				                    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);
@@ -9717,44 +9556,23 @@
 			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); 
@@ -9871,7 +9689,7 @@
 	                this,
 	                KHandleCompletePacstoreNokTimerID, 
 	                &m_eap_fast_completion_status,
-	                0);
+	                1);
 			}
 		else
 			{
@@ -9879,19 +9697,18 @@
 		                this,
 		                KHandleCompletePacstoreOkTimerID, 
 		                &m_eap_fast_completion_status,
-		                0);
+		                1);
 			}
 		}
 	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")));
@@ -9942,10 +9759,8 @@
 	    	{
 	    	CleanupStack::PopAndDestroy(m_pacStorePWBuf8);
 	    	
-		    TEapExpandedType aEapType(*EapExpandedTypeFast.GetType());
-		    
-		    m_notifier_data_to_user->iPassword.Zero();
-	
+	    	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+	    		EEapFastNotifierWrongPacStorePwNote, ETrue );
 			return m_eap_fast_completion_status;
 			 	    
 	    	}
@@ -9974,33 +9789,8 @@
     					m_verificationStatus));
        	pacStorePWPtr8.Zero();
        	if (m_verificationStatus == EFalse)
-					{
-    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;
-  		}
- 
-
-					}
+			m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+				EEapFastNotifierPacStorePwQuery, ETrue );
 		else
 			m_eap_fast_completion_status = m_partner->set_timer(
 				this,
@@ -10022,44 +9812,19 @@
     		}
      	else // temporary before masterkey creation is done dynamically !!!
     		{
-    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;
-  		}
-			
-
-
-				}
+        	m_eap_fast_completion_status = ShowNotifierItemAndGetResponse(
+        			EEapFastNotifierCreateMasterkeyQuery, ETrue );
+   		
+			}
     	}
 
     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")));
@@ -10132,12 +9897,10 @@
 	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))
@@ -10157,8 +9920,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10176,8 +9938,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10192,8 +9953,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10210,8 +9970,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10238,8 +9997,7 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			
-			status = m_tls_application->complete_read_PAC_store_data(
+			eap_status_e 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);
@@ -10257,8 +10015,7 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			
-			status = m_tls_application->complete_read_PAC_store_data(
+			eap_status_e 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);
@@ -10273,8 +10030,7 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			
-			status = m_tls_application->complete_read_PAC_store_data(
+			eap_status_e 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);
@@ -10291,8 +10047,7 @@
 			EAP_TRACE_DEBUG_SYMBIAN(
 					(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 			m_ready_references_and_data_blocks.reset();
-			
-			status = m_tls_application->complete_read_PAC_store_data(
+			eap_status_e 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);
@@ -10320,8 +10075,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10339,8 +10093,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10355,8 +10108,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10373,8 +10125,7 @@
 				EAP_TRACE_DEBUG_SYMBIAN(
 						(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL:status nok")));
 				m_ready_references_and_data_blocks.reset();
-				
-				status = m_tls_application->complete_read_PAC_store_data(
+				eap_status_e 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);
@@ -10409,7 +10160,7 @@
 		EAP_TRACE_DEBUG_SYMBIAN(
 				(_L("eap_am_type_tls_peap_symbian_c::FinalCompleteReadPACStoreDataL Reset Done")));
 		
-		status = m_tls_application->complete_read_PAC_store_data(
+		eap_status_e 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);
@@ -10421,8 +10172,7 @@
 		m_eap_fast_completion_status = eap_status_user_cancel_authentication;
 		m_new_references_and_data_blocks.reset();
 		m_ready_references_and_data_blocks.reset();
-		
-		status = m_tls_application->complete_read_PAC_store_data(
+		eap_status_e 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);
@@ -10435,8 +10185,7 @@
 	m_eap_fast_completion_status = eap_status_user_cancel_authentication;
 	m_new_references_and_data_blocks.reset();
 	m_ready_references_and_data_blocks.reset();
-	
-	status = m_tls_application->complete_read_PAC_store_data(
+	eap_status_e 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);
@@ -10458,7 +10207,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(
@@ -10520,48 +10269,122 @@
 	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_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_DEBUG_SYMBIAN(
-		(_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()));	
-}
+			(_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()));	
+	}
 
 
 // ---------------------------------------------------------
@@ -10569,7 +10392,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
-{
+	{
 	/* Check validity of password against timelimit */
 	
 	EAP_TRACE_DEBUG(m_am_tools, 
@@ -10582,22 +10405,14 @@
     // 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 AND %S=%d" );
-
+	_LIT( KSqlQuery, "SELECT %S FROM %S WHERE %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,
-		&KTunnelingTypeVendorId,
-		m_tunneling_type.get_vendor_id(),
-		&KTunnelingType, 
-		m_tunneling_type.get_vendor_type());
-
+		&KServiceType, m_index_type, 
+		&KServiceIndex, m_index,
+		&KTunnelingType, m_tunneling_vendor_type );	
 	TRAPD( err,  maxSessionTime =  ReadIntDbValueL(
 		m_database,
 		cf_str_EAP_FAST_max_session_validity_time_literal,
@@ -10771,7 +10586,7 @@
 			}
 		}
 	
-} // eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
+	} // eap_am_type_tls_peap_symbian_c::CheckPasswordTimeValidityL()
 
 
 // ---------------------------------------------------------
@@ -10784,7 +10599,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" ) ) );
 	
@@ -10860,7 +10675,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()
 
 
 // ---------------------------------------------------------
@@ -10868,7 +10683,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" ) ) );	
 	
@@ -10901,7 +10716,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()
 
 
 // ---------------------------------------------------------
@@ -10909,7 +10724,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" ) ) );
 	
@@ -10937,7 +10752,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()
 
 
 // ---------------------------------------------------------
@@ -10948,7 +10763,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;    
@@ -10977,7 +10792,7 @@
 	CleanupStack::PopAndDestroy( &view ); // Close view.
 
 	return retVal;
-} // eap_am_type_tls_peap_symbian_c::ReadIntDbValueL
+    } // eap_am_type_tls_peap_symbian_c::ReadIntDbValueL
 
 
 // ---------------------------------------------------------
@@ -10985,7 +10800,7 @@
 // ---------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::UpdatePasswordTimeL()
-{
+	{
 	/* update last password time */
 	TPtrC lastFullPasswordTimeString;
 	
@@ -11036,7 +10851,7 @@
 			EAPL("UpdatePasswordTimeL - evaluate view\n")));
 	User::LeaveIfError(view.EvaluateAll());
 	
-	// Get the first (and only) row.
+	// Get the first (and only) row for updation.
 	view.FirstL();
 	view.UpdateL();
 	
@@ -11071,12 +10886,11 @@
 	
 	/* 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);
@@ -11084,8 +10898,7 @@
 	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)
 
 
@@ -11096,9 +10909,10 @@
 // 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()" )));    
+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()" );    
 
     TBool isValid = EFalse;
     TInt err = KErrNone;
@@ -11107,7 +10921,8 @@
     TRAP( err, isValid = IsTtlsPapSessionValidL() );
     if ( err != KErrNone )
 	    {
-	    EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid(): Leave, err==%d."), err ));
+	    DEBUG1( "eap_am_type_tls_peap_symbian_c::is_ttls_pap_session_valid() ERROR: \
+	        Leave, err==%d.", err );
 	    retVal = false;
 	    }
     else
@@ -11115,140 +10930,48 @@
     	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 )
-{
-	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);
-		}
-	}
-
+    {
+    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" );    
+		}
 	return status;
-}
+    }
 
 // ================= TTLS-PAP public not exported =======================
 
@@ -11256,13 +10979,14 @@
 // 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*/ )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::verify_ttls_pap_username_and_password()" );
 	return eap_status_not_supported;
-}
+	}
 
 // ================= TTLS-PAP public new =======================
 
@@ -11270,12 +10994,13 @@
 // 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 )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword()" );
 	
 	eap_status_e retStatus = aStatus;
 	eap_status_e tmpStatus = eap_status_ok;
@@ -11297,14 +11022,15 @@
 		}
 	if ( m_tls_am_partner == NULL )
 		{
-		EAP_TRACE_DEBUG_SYMBIAN((_L( "ERROR: eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword(): m_tls_am_partner is NULL." )));
+		DEBUG( "eap_am_type_tls_peap_symbian_c::CompleteQueryTtlsPapUserNameAndPassword() \
+			ERROR: 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(
 
 
 // ------------------------------------------------------------------------
@@ -11313,14 +11039,14 @@
 //    
 eap_status_e
 eap_am_type_tls_peap_symbian_c::ConvertAmErrorToEapolError( TInt aErr )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::ConvertAmErrorToEapolError()" )));
+	{
+	DEBUG( "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;
-}
+	}
 
 
 // ------------------------------------------------------------------------
@@ -11334,8 +11060,8 @@
 //| EAP_TLS_PEAP_ttls_pap_last_full_authentication_time	| BIGINT		   	| KTTLSPAPLastFullAuthTime	                             |//
 void eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL(
 	TTtlsPapDbInfo& aOutDbInfo )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::ReadTtlsPapDbL()" );
 	
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
 	TPtr sqlStatement = buf->Des();
@@ -11372,35 +11098,12 @@
 			// columns reading	
 			aOutDbInfo.iUsrPwdInfo.iPasswordPromptEnabled = view.ColUint(
 				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_password_prompt_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.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 ) );
 			
 			aOutDbInfo.iMaxSessionTime = view.ColInt64(
 				colSet->ColNo( cf_str_EAP_TLS_PEAP_ttls_pap_max_session_validity_time_literal ) );
@@ -11413,7 +11116,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()
 
 
 // ------------------------------------------------------------------------
@@ -11427,8 +11130,8 @@
 //| EAP_TLS_PEAP_ttls_pap_last_full_authentication_time	| BIGINT		   	| KTTLSPAPLastFullAuthTime	                             |//
 void eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL(
 	const TTtlsPapDbInfo& aInDbInfo )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::WriteTtlsPapDbL()" );
 	
 	
 	HBufC* buf = HBufC::NewLC( KMaxSqlQueryLength );
@@ -11436,24 +11139,17 @@
 	
 	// Query all the relevant parameters
 	_LIT( KSQLQuery,
-		"SELECT %S, %S, %S, %S, %S FROM %S WHERE %S=%d AND %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" );
+	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,
-		&KServiceIndex,
-		m_index,
-		&KTunnelingTypeVendorId,
-		m_tunneling_type.get_vendor_id(),
-		&KTunnelingType,
-		m_tunneling_type.get_vendor_type());
+		&KServiceType, m_index_type,                                     // where %S=%d
+		&KServiceIndex, m_index,                                         // where %S=%d
+		&KTunnelingType, m_tunneling_vendor_type );                      // where %S=%d
 	
 	RDbView view;
 	// Evaluate view
@@ -11475,24 +11171,10 @@
 			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 );
@@ -11513,7 +11195,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()
 
 
 // ------------------------------------------------------------------------
@@ -11521,28 +11203,21 @@
 // ------------------------------------------------------------------------
 //
 void eap_am_type_tls_peap_symbian_c::SetTtlsPapColumnToNullL( const TDesC& aColName )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::SetColumnNullL()" )));
+	{
+	DEBUG( "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 AND %S=%d" );
-
-	sqlStatement.Format(
-		KSQLQuery,
+		"SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d" );
+	sqlStatement.Format( KSQLQuery,
 		&aColName,                                  // select´
 		&KTtlsDatabaseTableName,                    // from
-		&KServiceType,
-		m_index_type,
-		&KServiceIndex,
-		m_index,
-		&KTunnelingTypeVendorId,
-		m_tunneling_type.get_vendor_id(),
-		&KTunnelingType,
-		m_tunneling_type.get_vendor_type());
+		&KServiceType, m_index_type,                // where %S=%d
+		&KServiceIndex, m_index,                    // where %S=%d
+		&KTunnelingType, m_tunneling_vendor_type ); // where %S=%d
 	
 	RDbView view;
 	// Evaluate view
@@ -11570,7 +11245,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 =======================
@@ -11580,8 +11255,8 @@
 // ------------------------------------------------------------------------
 //
 TBool eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()" );
 
 	TTtlsPapDbInfo dbInfo;
 	TInt err = KErrNone;
@@ -11591,7 +11266,8 @@
 	
     if 	( err != KErrNone )
         {
-        EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL(): Leave happened, err=%d."), err ));
+        DEBUG1( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL() ERROR: \
+        	Leave happened, err=%d.", err );
         retValue = EFalse;
         }
     else
@@ -11602,7 +11278,8 @@
 			// one read from configuration file.
 		    if( dbInfo.iMaxSessionTime == 0 )
 	            {
-	            EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL() Using max TTLS PAP session validity time from config file." )));
+	            DEBUG( "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;
@@ -11613,7 +11290,7 @@
 		    }
     	}	
 	return retValue;
-}  // eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
+	}  // eap_am_type_tls_peap_symbian_c::IsTtlsPapSessionValidL()
 
 
 // ------------------------------------------------------------------------
@@ -11623,8 +11300,8 @@
 TBool eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity(
 	const TInt64& aInMaxSessionTime,
 	const TInt64& aInLastFullAuthTime )
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L( "eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity()" )));
+	{
+	DEBUG( "eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity()" );
 	
 	// Get the current time.
 	TTime currentTime;
@@ -11694,93 +11371,7 @@
 		
 		return EFalse;	
 	    }
-} // 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
-//--------------------------------------------------
+	} // eap_am_type_tls_peap_symbian_c::CheckTtlsPapSessionValidity
+
 
 // End of file.